Android中创建和检测快捷方式
16lz
2021-12-04
public class ShortcutUtil {/** * 创建快捷方式 * * @param context */public static void createShortcut(Context context, Class<?> target) {// <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.icon));intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));intent.putExtra("duplicate", false);Intent sIntent = new Intent(Intent.ACTION_MAIN);sIntent.addCategory(Intent.CATEGORY_LAUNCHER);// 加入action,和category之后,程序卸载的时候才会主动将该快捷方式也卸载sIntent.setClass(context, target);intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, sIntent);context.sendBroadcast(intent);}/** * 判断桌面上是否有的快捷方式 * * @return */public static boolean hasShortcut(Context context) {final ContentResolver cr = context.getContentResolver();final String AUTHORITY = "com.android.launcher.settings";final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/favorites?notify=true");// <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>Cursor c = cr.query(CONTENT_URI, new String[] { "intent" }, null, null, null);if (c == null) {// 注: 2.1update和2.2版本的真机上测试无法访问com.android.launcher.settings,2.1update1的模拟器上可以// ERROR/ActivityThread(1136): Failed to find provider info for com.android.launcher.settingsreturn false;}while (c.moveToNext()) {String intentstring = c.getString(c.getColumnIndex("intent"));if (intentstring == null) {continue;}String componentString = getComponentString(intentstring);if (componentString.startsWith(context.getPackageName())) {return true;}}return false;}private static String getComponentString(String intentInfo) {// intent info 的格式:intent=#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.allstar.tanzhi/.activities.StartActivity;endint start = intentInfo.indexOf("component") + 9 + 1;int end = intentInfo.indexOf(";", start);return intentInfo.substring(start, end);}
更多相关文章
- Android判断apk是否存在
- Android(安卓)数据库操作 创建 添加 删除 查询
- js判断Android和Ios
- Retrofit系列文章翻译1—开始创建android客户端
- Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
- Android(安卓)android下的数据持久化和读取数据,保存数据到手机及
- android 实现静默安装、卸载(图)
- Android本地数据存储之SQLite
- Android深入浅出之Surface