过滤具有权限要求的活动

时间:2016-05-28 12:23:57

标签: android android-permissions

我正在尝试让用户选择我的应用应发送特定意图的应用程序。为了获得候选人列表,queryIntentActivities()大部分都有效,除了一些应用程序用permission要求定义接受活动,所以我无法真正启动它们。那么,我可以用这些方式过滤掉它们吗?

  • 让我PackageManager过滤掉它们。
  • ResolveInfo,检查活动(或其父应用程序)是否需要权限,以便我可以使用checkSelfPermission()进行检查。
  • 启动活动选择器(从Android 4.1开始过滤它们)并以某种方式获取所选的活动。

1 个答案:

答案 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);
}