使用快捷方式管理器复制固定的快捷方式

时间:2019-05-15 07:20:38

标签: java android android-8.0-oreo android-shortcut android-shortcutmanager

我正在尝试使用ShortcutManager在主屏幕上创建固定的快捷方式。我可以使用以下代码创建固定的快捷方式:

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("www.google.com"));
if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)){
    ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, "#1")
    .setIntent(i)                
    .setShortLabel("label")                  
    .setIcon(IconCompat.createWithResource(context, R.drawable.ic_launcher))
    .build();

   ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null);
}else{
    L.v("Shortcut", "Pinned shortcuts are not supported!");
}

我面临两个问题:

  1. 没有检查来处理重复的快捷方式。每次我单击该按钮创建快捷方式时,它每次都会创建一个快捷方式,并且这些快捷方式将填充主屏幕。有什么方法可以检查快捷方式是否已经存在:-
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse("www.google.com"));

Intent installer = new Intent();        installer.putExtra("android.intent.extra.shortcut.INTENT", i);          installer.putExtra("android.intent.extra.shortcut.NAME", "Shortcut name");          installer.putExtra("android.intent.extra.shortcut.ICON_RESOURCE", Intent.ShortcutIconResource.fromContext(getApplicationContext() , R.drawable.ic_launcher));
installer.putExtra("duplicate", false);
installer.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
sendBroadcast(installer);

这段代码的问题是,它无法在android 8.0及更高版本中运行,但可以使用以下代码正确处理快捷方式的重复:-

installer.putExtra("duplicate", false);

我想使用快捷方式管理器实现相同的目的

  1. 使用快捷方式管理器创建快捷方式时,图标会像
  2. 一样重复

duplicate icon

我已经查看了此处提供的解决方案,但到目前为止还没有运气:-

Strange app icon duplication in pinned shortcut (Android O)

任何想法?

1 个答案:

答案 0 :(得分:0)

您可以通过调用

获得所有当前的快捷方式

List<ShortcutInfo> currPinned = shortcutManager.getPinnedShortcuts();

然后将其添加到MapSet并对其进行迭代,如果已经存在,则不要再次添加

if (currPinned != null) { for (ShortcutInfo shortcut: currPinned) { currPinnedMap.put(shortcut.getId(), shortcut); } } .... //iterate over you "new shortcuts" and check if the present already if (currPinnedMap.containsKey(id)) { continue; } // add really new ones