我在我的快捷方式.xml 中定义了 4 个静态快捷方式(static1、static2、static3、static4) - 全部启用。一旦我添加了一个动态快捷方式 (dynamic1),最后一个静态快捷方式 (static4) 就会被动态快捷方式覆盖。因此,启动器现在显示static1, static2, static3, static4而不是static1, static2, static3, static4。当我添加第二个动态快捷方式 (dynamic2) 时,它也会覆盖 static3。
在 ShortcutManager 文档中清楚地写道,静态快捷方式总是比动态快捷方式排名更高(rank == 0),因此应该在动态快捷方式之前显示。
https://developer.android.com/guide/topics/ui/shortcuts/managing-shortcuts#display-order
当启动器显示应用程序的快捷方式时,它们应按以下顺序显示:
- 静态快捷方式:isDeclaredInManifest() 方法返回 true 的快捷方式。
- 动态快捷方式: ShortcutInfo.isDynamic() 方法返回 true 的快捷方式。在每种快捷方式类型(静态和动态)中,快捷方式根据 ShortcutInfo.getRank() 按排名递增的顺序排序。
我不确定这里出了什么问题以及如何修复它以始终显示静态快捷方式。我的动态快捷方式的目的是提供直接共享功能。
这是我添加动态快捷方式的方法:
final ArrayList<ShortcutInfoCompat> shortcuts = new ArrayList<>();
final Set<String> categories = Collections.singleton("my.package.category.SOME_CATEGORY");
final ShortcutInfoCompat shortcut = new ShortcutInfoCompat.Builder(context, "shortcutId")
.setShortLabel("some_label")
.setIcon(IconCompat.createWithResource(context, R.drawable.some_icon))
.setIntent(new Intent(Intent.ACTION_DEFAULT))
.setCategories(categories)
.setPerson(
new Person.Builder()
.setName("some_name")
.build()
)
.build();
shortcuts.add(shortcut);
ShortcutManagerCompat.addDynamicShortcuts(context, shortcuts);