如何在android上正确创建快捷方式?

Posted

技术标签:

【中文标题】如何在android上正确创建快捷方式?【英文标题】:How to properly create a shortcut on android? 【发布时间】:2018-07-21 23:56:31 【问题描述】:

我尝试了这段代码并在清单中添加了创建快捷方式权限,但仍然无法创建快捷方式。代码在主要活动中。

//设置应用程序的快捷方式 if(!getSharedPreferences("APP_PREFERENCE", Activity.MODE_PRIVATE).getBoolean("IS_ICON_CREATED", false)) 设置图标(); getSharedPreferences("APP_PREFERENCE", Activity.MODE_PRIVATE).edit().putBoolean("IS_ICON_CREATED", true).commit(); Toast.makeText(getApplicationContext(), "完成", Toast.LENGTH_LONG).show();

        

【问题讨论】:

哪里是 setIcon(); 【参考方案1】:

android 为我们提供了一个意图类 com.android.launcher.action.INSTALL_SHORTCUT,它可用于向主屏幕添加快捷方式。在下面的代码 sn-p 中,我们创建了一个名为 HelloWorldShortcut 的活动 MainActivity 的快捷方式。

首先我们需要将权限 INSTALL_SHORTCUT 添加到 android manifest xml。

<uses-permission
        android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

addShortcut() 方法在主屏幕上创建一个新的快捷方式。

private void addShortcut() 
    //Adding shortcut for MainActivity 
    //on Home screen
    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, "HelloWorldShortcut");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
            Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                    R.drawable.ic_launcher));

    addIntent
            .setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    addIntent.putExtra("duplicate", false);  //may it's already there so don't duplicate
    getApplicationContext().sendBroadcast(addIntent);

请注意我们如何创建包含目标活动的快捷方式意图对象。此意图对象作为 EXTRA_SHORTCUT_INTENT 添加到另一个意图中。

最后我们广播了新的意图。这会添加一个快捷方式,其名称为 EXTRA_SHORTCUT_NAME,图标由 EXTRA_SHORTCUT_ICON_RESOURCE 定义。

也放这段代码以避免多个快捷方式:

if(!getSharedPreferences(Utils.APP_PREFERENCE, Activity.MODE_PRIVATE).getBoolean(Utils.IS_ICON_CREATED, false))
          addShortcut();
          getSharedPreferences(Utils.APP_PREFERENCE, Activity.MODE_PRIVATE).edit().putBoolean(Utils.IS_ICON_CREATED, true);
      

【讨论】:

代码来自这个老问题***.com/questions/6337431/…【参考方案2】:

我最终使用此代码来创建快捷方式。它工作正常 如果创建了快捷方式,它还会检查 snd save 是首选项。在清单中添加了与创建启动画面相同的接收活动的意图。

<activity android:name=".ShortCutActivity" 
android:label="@string/shortcut_label"> 
<intent-filter> 

    <action android:name="android.intent.action.CREATE_SHORTCUT" />
     <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
     </activity>

然后使用此代码创建快捷方式

private void 

    createShortcutIcon() 
            // 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(),
                    SplashScreen.class);
            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, "YourAppName");
            addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                    Intent.ShortcutIconResource.fromContext(
                            getApplicationContext(), R.drawable.ic_launcher));
            addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
            getApplicationContext().sendBroadcast(addIntent);

            // Remembering that ShortCut was already added
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putBoolean(PREF_KEY_SHORTCUT_ADDED, true);
            editor.commit();
        

【讨论】:

以上是关于如何在android上正确创建快捷方式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 js 以编程方式为 android/ios 上的网站创建桌面快捷方式?

在桌面上创建快捷方式

求助下大家如何桌面快捷方式创建

Android 应用程序未从快捷方式启动

如何在Mac上创建桌面快捷方式

如何让 cpack 生成正确的开始菜单快捷方式