1.Android Maniftest.xml 中,每个Activity添加如下属性:
android:alwaysRetainTaskState="true"
2. 创建快捷方式
private static final String SHORTCUT_UNINSTALL = "com.android.launcher.action.UNINSTALL_SHORTCUT";
public static void creatShortCut(Activity activity) { deleteCallShortcut(activity); int resourceId = R.drawable.ic_launcher; Intent intent = new Intent(); intent.setClass(activity, SplashActivity.class); /*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/ intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); //不允许重复创建 shortcutintent.putExtra("duplicate", false); //需要现实的名称 shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, activity.getResources().getString(R.string.app_name)); //快捷图片 Parcelable icon = Intent.ShortcutIconResource.fromContext(activity.getApplicationContext(), resourceId); shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); //点击快捷图片,运行的程序主入口 shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); //发送广播。OK activity.sendBroadcast(shortcutintent); }
//删除快捷方式 private static void deleteCallShortcut(Activity activity) { Intent shortcut = new Intent(SHORTCUT_UNINSTALL); //名字要和创建时的一样 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, activity.getResources().getString(R.string.app_name)); //这里的intent要和创建时的intent设置一致 Intent intent = new Intent(); intent.setClass(activity, SplashActivity.class);//SplashActivity.class); /*以下两句是为了在卸载应用的时候同时删除桌面快捷方式*/ intent.setAction("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); //发送广播以删除shortcut activity.sendBroadcast(shortcut); }
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); //这一句很关键 是从系统创建的快捷方式中列出它的值找到的。
public static boolean hasShortcut(Context cx) { boolean result = false; // 获取当前应用名称 String title = null; try { final PackageManager pm = cx.getPackageManager(); title = pm.getApplicationLabel( pm.getApplicationInfo(cx.getPackageName(), PackageManager.GET_META_DATA)).toString(); } catch (Exception e) { } final String uriStr; if (android.os.Build.VERSION.SDK_INT < 8) { uriStr = "content://com.android.launcher.settings/favorites?notify=true"; } else { uriStr = "content://com.android.launcher2.settings/favorites?notify=true"; } final Uri CONTENT_URI = Uri.parse(uriStr); // final Cursor c = cx.getContentResolver().query(CONTENT_URI, null, // "title=?", new String[] { title }, null); // if (c != null && c.getCount() > 0) { // result = true; // } final Cursor c = cx.getContentResolver().query(CONTENT_URI, null, "", new String[]{}, null); if (c != null && c.getCount() > 0) { for(int i=0; i<c.getCount(); i++){ c.moveToPosition(i); for(int j=0; j<c.getColumnCount();j++){ try{ if(j == 15){ // byte[] blob = c.getBlob(j); // if(blob != null) // for(int x = 0; x<blob.length; x++){ // Log.e("","blog["+x+"]:"+blob[x]); // } } else COM.LOGE("", "i:" + i + "j:" + j + " name:" + c.getColumnName(j) + " value:" + c.getString(j)); } catch(RuntimeException e){ e.printStackTrace(); } } c.moveToNext(); } result = true; } return result; }