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

时间:2018-01-16 09:18:29

标签: android android-launcher android-appshortcut

背景

从Android的API 25开始,只需长按一下,应用就可以在启动器中提供额外的快捷方式:

enter image description here

问题

事情就是,我发现你的应用程序可以将这些快捷方式提供给启动器,但是我无法找到启动器如何获取它们的列表。

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

我尝试了什么

我尝试阅读文档(例如here)。我没有看到它被提及。仅提及其他应用程序的一部分,但未提及接收器应用程序(启动器)。

问题

给定应用程序的包名称,如何使用新API获取所有“应用程序快捷方式”的列表?

是否可以使用它来请求从其中一个创建固定的快捷方式?

2 个答案:

答案 0 :(得分:8)

你需要让自己成为启动器应用程序。之后,您可以查询packagemanager以获取特定包的shortcutinfo:

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

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

答案 1 :(得分:1)

很棒的问题这就是我正在寻找的东西,我得到了一个可能有用的东西

(关于意图)

https://github.com/googlesamples/android-AppShortcuts

注意:如果您的应用是静态的,那么它很容易实现。

<强>更新:::

这是一个链接,可以显示动态或静态快捷方式的差异及其实现,如果您愿意,请选择投票。

https://www.novoda.com/blog/exploring-android-nougat-7-1-app-shortcuts/