我正在使用API 22,但是我想在Android M 6.0中编译我的项目,我有以下代码:
在顶部声明:
private static final String[] REQUIRED_PERMISSIONS = new String[]{"READ_EXTERNAL_STORAGE"};
private static final int REQUEST_PERMISSIONS = (Integer) null;
在我的
onCreate()
上:if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
LinkedList<String> missingPermissions = new LinkedList<>();
for(String p : REQUIRED_PERMISSIONS){
if(checkCallingOrSelfPermission(p) != PackageManager.PERMISSION_GRANTED){
missingPermissions.add(p);
}
}
if(!missingPermissions.isEmpty()){
String[] mpArray = new String[missingPermissions.size()];
missingPermissions.toArray(mpArray);
requestPermissions(mpArray, REQUEST_PERMISSIONS);
}
}
我受启发here检查我的问题
在Eclipse中,我在
Build.VERSION_CODES.M
上给我一个错误(找不到M),然后也找不到回调方法requestPermissions(mpArray, REQUEST_PERMISSIONS)
,有什么建议吗?如果我正在使用API 22,并且正在使用Android 6.0 M进行编译。如何正确解决API 22上的危险权限(例如
READ_EXTERNAL_STORAGE
)的问题? 最佳答案
根据文档,在API级别23中添加了Build.VERSION_CODES.M
和requestPermissions()
。
由于您使用的是API级别22,因此这些根本就不存在。
要访问API级别23中引入的API,您需要使用API 23进行编译。如果继续使用API 22进行编译,则无法访问这些API。
请注意,仅使用API 23进行编译就不会影响您的应用程序在任何设备上的行为方式,只会打开较新的API,供您在至少运行API 23的设备上使用。
如果我正在使用API 22,并且正在使用Android 6.0 M进行编译,我该如何正确解决API 22上的危险权限(如READ_EXTERNAL_STORAGE)的问题?
运行API 22的设备将继续使用旧的安装时模型获得权限。对于运行API 22及以下版本的设备,没有任何更改。只有运行API 23的设备才能使用新的运行时权限模型。