如何防止多次创建快捷方式?

时间:2013-04-23 06:49:33

标签: android shortcut homescreen

我编写了以下代码,用于在主屏幕中创建应用程序的快捷方式:

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个快捷方式。

如何阻止此消息框并创建多个快捷方式?

3 个答案:

答案 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,则会创建重复