获取应用权限时遇编译错误:无法解析requestedPermissions
解决"Cannot resolve requestedPermissions"编译错误
我一眼就看出问题啦——你错误地从ApplicationInfo对象去获取requestedPermissions,但这个属性其实是属于PackageInfo类的!
修正后的代码
把你代码里的这一行:
String[] requestedPermissions = applicationInfo.requestedPermissions;
替换成:
String[] requestedPermissions = packageInfo.requestedPermissions;
完整修正后的代码片段:
@Override protected Void doInBackground(Void... params) { PackageManager pm = getPackageManager(); applist = checkForLaunchIntent(pm.getInstalledApplications(PackageManager.GET_META_DATA)); try { for (ApplicationInfo applicationInfo : applist) { PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS); // 这里改用packageInfo获取权限数组 String[] requestedPermissions = packageInfo.requestedPermissions; if (requestedPermissions != null) { for (int i = 0; i < requestedPermissions.length; i++) { Log.d("test", requestedPermissions[i]); } } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } listadapter = new AppAdapter(ViewAppsPermissions.this, R.layout.list_item, applist); return null; }
为什么会出错?
ApplicationInfo主要存储应用的基本信息(比如图标、应用名称、安装路径等),它并没有requestedPermissions这个成员变量。- 你已经通过
pm.getPackageInfo(...)获取到了PackageInfo对象,这个类才包含了应用声明的权限数组requestedPermissions,所以直接从这个对象读取就可以了。
另外,我注意到你代码里一开始写的是packageManager.getInstalledApplications(...),但前面定义的变量是pm,这个小问题也顺手帮你修正了,避免潜在的未定义变量问题~
内容的提问来源于stack exchange,提问作者federicosancho
相关产品推荐
相关产品推荐

