背景
从 Android 的 API 25 开始,应用程序可以通过长按在启动器中提供额外的快捷方式:
问题
事实是,我所发现的只是您的应用如何为启动器提供这些快捷方式,但我无法找到启动器如何获取它们的列表。
由于它是一个相当新的 API,而且大多数用户和开发人员甚至都没有使用它,所以我找不到太多关于它的信息,特别是因为我想搜索 API 使用的“另一面”。
我尝试过的
我尝试阅读文档(例如 here)。我没有看到它被提及。只提到了其他应用的部分,没有提到接收器应用(启动器)。
问题
给定一个应用程序包名称,我如何使用新 API 获取其所有“应用程序快捷方式”的列表?
是否可以使用它来请求从其中一个创建固定快捷方式?
最佳答案
您需要让自己成为启动器应用程序。之后,您可以查询包管理器以获取特定包的快捷方式信息:
fun getShortcutFromApp(packageName: String): List<Shortcut> {
val shortcutQuery = LauncherApps.ShortcutQuery()
shortcutQuery.setQueryFlags(FLAG_MATCH_DYNAMIC or FLAG_MATCH_MANIFEST or FLAG_MATCH_PINNED)
shortcutQuery.setPackage(packageName)
return try {
launcherApps.getShortcuts(shortcutQuery, Process.myUserHandle())
.map { Shortcut(it.id, it.`package`, it.shortLabel.toString(), it) }
} catch (e: SecurityException) {
Collections.emptyList()
}
完整的实现可以在这里找到:
https://android.jlelse.eu/nhandling-shortcuts-when-building-an-android-launcher-5908d0bb50d2
项目的 Github 链接:
https://github.com/nongdenchet/Shortcuts
LauncherApps是Android框架提供的一个类:
https://developer.android.com/reference/android/content/pm/LauncherApps.html
“用于检索当前用户的可启动 Activity 列表以及当前用户可见的任何关联的托管配置文件的类,可以使用 getProfiles() 检索。这主要供启动器使用。可以查询应用程序对于每个用户配置文件。由于 PackageManager 不会为其他配置文件提供包广播,因此您可以在此处注册包更改。”
关于android - 如何获取特定应用程序的可用 "app shortcuts"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277743/