我试图让用户选择一个应用程序,我的应用程序应该发送一个特定的意图。为了得到候选列表,queryIntentActivities()
基本上可以工作,除了一些应用程序定义了带有permission
需求的接受活动,所以我不能真正启动它们。那么,我能用这些方法把它们过滤掉吗?
帮我把它们过滤掉。
从PackageManager
中,检查活动(或其父应用程序)是否需要权限,以便我可以使用ResolveInfo
检查它。
启动activity picker(从android 4.1开始过滤它们),以某种方式获取所选择的活动。
最佳答案
api级别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);
}
关于android - 筛选具有许可要求的 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37498947/