【问题标题】:How to get available "app shortcuts" of a specific app?如何获取特定应用程序的可用“应用程序快捷方式”?
【发布时间】:2018-01-16 09:18:29
【问题描述】:

背景

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

问题

问题是,我发现的只是您的应用如何为启动器提供这些快捷方式,但我不知道启动器如何获取它们的列表。

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

我尝试过的

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

问题

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

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

【问题讨论】:

    标签: android android-launcher android-appshortcut


    【解决方案1】:

    您需要让自己成为启动器应用。之后,您可以查询包管理器以获取特定包的快捷方式信息:

    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 不会为其他配置文件传递包广播,您可以在此处注册包更改。"

    【讨论】:

    • 如果我的应用程序不是启动器应用程序,它不会工作?另外,Shortcut 类是什么?还有launcherApps?您的代码缺少要运行的重要内容。你还没有回答我写的问题:是否可以创建一个固定的快捷方式?
    • 根据正确的文档。其余代码在 github 项目中。没想到你有两个问题。 :)
    • 请输入最少的代码以使其工作。没有任何解决方法可以让它在没有启动器的情况下工作吗?
    • 那太糟糕了。请输入完整的、最少的代码。
    【解决方案2】:

    很好的问题,这是我一直在寻找的,我得到了一个可能有用的问题

    (都是关于意图的)

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

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

    更新:::

    这是一个链接,它将向您展示动态或静态快捷方式的区别及其实现,如果您喜欢它,请投票。

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

    【讨论】:

    • “如果你的应用是静态的”是什么意思?此外,问题是如何查询其他应用程序。而且,由于某种原因,我无法导入它:github.com/googlesamples/android-AppShortcuts/issues/16。我只想在这里看到完整的、最小化的实现。
    • 请看我的更新答案,它是一个简单的实现示例
    • 再一次,我没有问如何为启动器创建它们。我问如何向他们查询任何应用程序。例如,Google-Calendar 有“新提醒”和“新事件”。问题是,如果我设置 Google 日历包名称 ("com.google.android.calendar") 的输入,查询的输出将是这 2 个应用程序快捷方式。
    猜你喜欢
    • 2017-06-09
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多