首页 > 解决方案 > 在没有新的静态/动态快捷方式的情况下获取快捷方式

问题描述

我正在从系统中检索所有可能的快捷方式,如下所示:

val pm = context.getPackageManager()
val shortcutsIntent = Intent(Intent.ACTION_CREATE_SHORTCUT)
val ril = pm.queryIntentActivities(shortcutsIntent, 0)
// I progress this data and show my users a custom dialog with apps 
// and possible shortcuts and then will start the shortcut setup with ACTION_CREATE_SHORTCUT intent

这里的问题是,在 android O 或更高版本上,例如上面还返回新的静态快捷方式 - 据我所知,应用程序需要成为默认启动器。我可以以某种方式过滤掉它们吗?

我有一个类似应用程序的侧边栏,只能支持普通快捷方式,并且由于缺少权限而不能支持较新的静态/动态快捷方式...

例子

Gmail 例如提供标签的快捷方式——我在上面得到了这个可能的快捷方式。但是,如果我开始设置如下快捷方式

 val i = Intent(Intent.ACTION_CREATE_SHORTCUT)
 i.addCategory(Intent.CATEGORY_DEFAULT)
 i.component = ComponentName(packageName, activityName)
 startActivityForResult(i, RequestCodes.SHORTCUT_CREATE_REQUEST_CODE)

并等待结果,我不会在其中返回一个Intentwith Intent.EXTRA_SHORTCUT_INTENT(以及所有其他人喜欢的Intent.EXTRA_SHORTCUT_ICON,...),而是一个 withLauncherApps.EXTRA_PIN_ITEM_REQUEST在其中。但这为时已晚,我想从上面的列表中删除这个快捷方式,因为我知道我的应用程序由于缺少权限而无法启动这样的快捷方式......

标签: androidshortcutandroid-8.0-oreoandroid-9.0-pie

解决方案


推荐阅读