Дублировать закрепленный ярлык с помощью диспетчера ярлыков

Я пытаюсь создать закрепленный ярлык на рабочем столе с помощью 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. Когда ярлык создается с помощью диспетчера ярлыков, значок дублируется, как

дублировать значок

Я просмотрел представленное здесь решение, но пока не повезло: -

Странное дублирование значка приложения в закрепленном ярлыке (Android O)

Любые идеи??


person Sankalp Sharma    schedule 15.05.2019    source источник
comment
Вы решили это?   -  person hamza khan    schedule 25.06.2020
comment
Для первой части проверки создания ярлыка вы можете сделать логическое значение, чтобы убедиться, что вы создали его один раз.   -  person Bishoy Fakhry    schedule 23.08.2020


Ответы (1)


Вы можете получить все текущие ярлыки, позвонив

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

затем добавьте к Map или Set и повторите их, и если он уже существует, не добавляйте его снова

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

person Daniel    schedule 05.08.2019