过滤具有权限要求的活动

Filter activities with permission requirements

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

API 22 级有一个 createChooser() 版本,让您可以使用系统 activity 选择器并在广播中接收选择的 activity。

在旧版本中,以下方法有效:

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