0

这个问题听起来可能是重复的,但我发现没有答案有效:

我已经解决了这些问题:

Android在主屏幕上创建快捷方式

但是建议的解决方案不起作用。

我使用了以下解决方案,该解决方案适用于 API 级别 < 23

  Intent shortcutIntent = new Intent(context,
                LedgerDetailActivity.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, ledgerBean.getName());
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_action_comments));
        addIntent.setAction("android.intent.action.CREATE_SHORTCUT");
        addIntent.putExtra("duplicate", false);
        context.sendBroadcast(addIntent);

添加权限:

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

但上述解决方案并非适用于所有设备,有时会提供如下奇怪的功能:

  1. 在某些设备中,例如 Samsung Edge(使用 Android N),未创建快捷方式
  2. 在我的 Android 7.1 (Android N) 模拟器中,只创建了一个快捷方式

谁能帮帮我,这个功能没有官方文档,请不要与Android N中引入的App快捷方式混淆。我需要主屏幕的快捷方式。

4

1 回答 1

0

要首先添加快捷方式,您必须在 Android 中添加权限:

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

对于以上 23 API 检查运行时权限,使用以下链接: Android 中的运行时权限

现在添加快捷方式:

private void createShortcut() {
    //Adding shortcut for SampleActivity 
    //on Home screen
    Intent shortcutIntent = new Intent(getApplicationContext(),
            SampleActivity.class);

    shortcutIntent.setAction(Intent.ACTION_MAIN);

    Intent addIntent = new Intent();
    addIntent
            .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Your App Name");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
            Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                    R.mipmap.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);
}

如果您发现创建了多个快捷方式以避免这种情况,您可以检查快捷方式是否已创建:

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);
}
于 2017-03-21T06:54:31.117 回答