如何获取特定应用程序的可用“应用程序快捷方式”?

2024-01-01

背景

从 Android 的 API 25 开始,应用程序可以通过长按它们在启动器中提供额外的快捷方式:

问题

问题是,我所发现的只是您的应用程序如何向启动器提供这些快捷方式,但我无法找出启动器如何获取它们的列表。

由于它是一个相当新的 API,并且大多数用户和开发人员甚至不使用它,因此我找不到太多有关它的信息,特别是因为我想搜索 API 使用的“另一面”。

我尝试过的

我尝试阅读文档(here https://developer.android.com/guide/topics/ui/shortcuts.html, 例如)。我没有看到有人提到它。只提到了其他应用程序的部分,但没有提到接收器应用程序(启动器)。

问题

给定应用程序的包名称,如何使用新 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 https://android.jlelse.eu/nhandling-shortcuts-when-building-an-android-launcher-5908d0bb50d2

项目的 Github 链接:

https://github.com/nongdenchet/Shortcuts https://github.com/nongdenchet/Shortcuts

LauncherApps是Android框架提供的一个类:

https://developer.android.com/reference/android/content/pm/LauncherApps.html https://developer.android.com/reference/android/content/pm/LauncherApps.html

“用于检索当前用户的可启动活动列表以及当前用户可见的任何关联的托管配置文件的类,可以使用 getProfiles() 检索这些配置文件。这主要供启动器使用。可以为每个用户查询应用程序由于 PackageManager 不会为其他配置文件提供包广播,因此您可以在此处注册包更改。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取特定应用程序的可用“应用程序快捷方式”? 的相关文章

随机推荐