我正在尝试让用户选择我的应用应发送特定意图的应用程序。为了获得候选人列表,queryIntentActivities()
大部分都有效,除了一些应用程序用permission
要求定义接受活动,所以我无法真正启动它们。那么,我可以用这些方式过滤掉它们吗?
PackageManager
过滤掉它们。ResolveInfo
,检查活动(或其父应用程序)是否需要权限,以便我可以使用checkSelfPermission()
进行检查。答案 0 :(得分:0)
API Level 22的版本为createChooser(),允许您使用系统活动选择器并在广播中接收所选活动。
在旧版本中,以下方法有效:
List<ResolveInfo> candidates = pm.queryIntentActivities(intent, 0);
for (int i = candidates.size() - 1; i >= 0; --i) {
ResolveInfo resolveInfo = candidates.get(i);
String permission = resolveInfo.activityInfo.permission;
if (permission == null)
permission = resolveInfo.activityInfo.applicationInfo.permission;
if (permission != null && ContextCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED)
candidates.remove(i);
}