1

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

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

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

4

3 回答 3

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) 中进行了测试。

于 2013-04-23T07:07:28.237 回答
0

不幸的是,在防止重复方面没有 API 帮助。也没有用于查看主屏幕上的内容的 API(至少在没有破解启动器数据的情况下不会)。您可以做的最好的事情是跟踪您是否已经创建了快捷方式。共享偏好最容易做到这一点。请参阅存储选项指南

无论如何,最好走这条路。如果您总是创建当前不存在的快捷方式,您将很快疏远任何手动删除您的快捷方式的用户。

于 2014-03-27T06:13:01.313 回答
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,则会创建副本

于 2015-12-23T14:27:23.720 回答