我编写了以下代码,用于在主屏幕中创建应用程序的快捷方式:
private void createShortcut() {
Intent shortcutIntent = new Intent(this, ActActivation.class);
shortcutIntent.setClassName("org.mabna.order",
"org.mabna.order.ui.ActActivation");
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "test");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
this.sendBroadcast(addIntent);
}
它工作正常但每次运行我的程序并运行此代码时,我收到消息“创建快捷方式测试”,并在我的主屏幕上添加一个新的快捷方式。打开我的应用程序10次后,我有10个快捷方式。
如何阻止此消息框并创建多个快捷方式?
答案 0 :(得分:5)
创建SharedPrefernce
以及添加此行,您不需要任何其他卸载权限
addIntent.putExtra("duplicate", false);
更改后的代码
Intent shortcutIntent = new Intent(this, ActActivation.class);
shortcutIntent.setClassName("org.mabna.order",
"org.mabna.order.ui.ActActivation");
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "test");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(this, R.drawable.icon));
addIntent.putExtra("duplicate", false); // Just create once
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
this.sendBroadcast(addIntent);
这将在HomeScreen上仅创建一个图标,如果用户清除Cache
,这将阻止应用在主屏幕上创建另一个图标。
编辑:代码在android 4.2(JellyBean)中经过测试,工作正常。
答案 1 :(得分:0)
不幸的是,在防止重复方面没有API帮助。没有用于查看主屏幕上的内容的API(至少在没有黑客攻击启动器数据的情况下)。你能做的最好的事情就是追踪你是否已经创造了捷径。这对共享偏好最容易做到。请参阅storage options guide。
无论如何,走这条路会更好。如果您始终创建快捷方式(如果它当前不存在),您将快速疏远已手动删除快捷方式的任何用户。
答案 2 :(得分:0)
执行此操作的最佳方法是使用SharedPreferences
:
private static final String SHORTCUT = "SHORTCUT";
//...
if (!preferences.readBool(SHORTCUT, false)) {
Intent shortcutIntent = new Intent(getApplicationContext(),
SomeActivity.class);
shortcutIntent.setAction(Intent.ACTION_MAIN);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(getApplicationContext(),
R.drawable.app_icon));
addIntent.putExtra("duplicate", false);
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean(SHORTCUT, true);
edit.apply();
}
但是,如果用户清除App Data并再次启动App,则会创建重复。