【问题标题】:How to determine if a home screen shortcut exists?如何确定是否存在主屏幕快捷方式?
【发布时间】:2012-02-17 02:40:49
【问题描述】:

有没有办法确定某个特定的主屏幕快捷方式 存在吗?

我的应用程序在设备的主屏幕上安装了一个快捷方式 某些条件下的启动时间,我不想重复 出现的快捷方式。我也不希望出现 Toast 消息说 “快捷方式已创建”或“快捷方式已存在”每次 设备启动。我发现了一个未记录的 Intent Extra,称为 EXTRA_SHORTCUT_DUPLICATE 这将防止重复的快捷方式 正在安装,但启动器仍显示“快捷方式已 存在”吐司消息。我宁愿不依赖这个无证 如果有支持的技术,则 Intent Extra。

【问题讨论】:

  • +1 在这个问题上,我问了一个类似的问题:stackoverflow.com/questions/9452121/…。当用户安装应用程序时,或者当用户从应用程序提供的弹出窗口中主动选择时,我真的想要一种安装快捷方式的方法。

标签: android


【解决方案1】:

这不是侵入性的吗?为什么不只添加一次,让用户决定是否保留?

【讨论】:

  • 我同意,只需添加一次快捷方式就足够了。我觉得 Asfman 也有同样的想法,和我一样只能在 onCreate 事件中找到安装图标的代码(即每次应用运行时)。
  • OP 希望能够确定它是否已经存在!如果用户自己启动应用程序之前将它放在那里,“只需添加一次”仍然会给您“快捷方式已经存在”的祝酒词。这里最明智的做法是首先检查是否已经有快捷方式,如果没有,那么您可以自动添加一个(或询问用户是否希望您添加一个)。而且,不,它不是侵入性的。
  • 较新版本的 Android 将在安装应用程序时自动将快捷方式添加到启动器。如果我删除该快捷方式,启动应用程序,快捷方式又回来了,这将需要我再次删除它。如果它在我每次使用该应用程序时添加一个快捷方式(因为我一直在删除它),我将停止使用该应用程序。让用户控制他们的启动器和主屏幕,不要试图从您的应用程序控制它。尝试修改其他活动是侵入性的,沙盒可以防止这种情况发生是有充分理由的。
  • 这是对的,但是如果用户清除应用程序数据,所有保存的数据都会丢失。那么在启动的时候,主屏幕上的快捷方式会出现两次,所以最好知道快捷方式是否存在。
【解决方案2】:

当您的应用创建快捷方式时,将布尔值设置为“true”并将其存储在存储中(例如小文件或共享首选项)。并在您的应用尝试创建快捷方式时检查它的值。

【讨论】:

  • 这只会告诉您您的应用是否创建了快捷方式。它不会告诉您用户是否自己将快捷方式放在主屏幕上,也不会告诉您用户是否自己从主屏幕上删除了快捷方式。
【解决方案3】:
**// Checking if ShortCut was already added
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        boolean shortCutWasAlreadyAdded = sharedPreferences.getBoolean("PREF_KEY_SHORTCUT_ADDED", false);
        if (shortCutWasAlreadyAdded) return;
        Intent shortcutIntent = new Intent(getApplicationContext(), MainActivity.class);
        shortcutIntent.setAction(Intent.ACTION_MAIN);
        Intent addIntent = new Intent();
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "SBM");
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.ic_launcher));
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        sendBroadcast(addIntent);
        // Remembering that ShortCut was already added
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("PREF_KEY_SHORTCUT_ADDED", true);
        editor.commit();**

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多