Android 6.0 权限请求问题
2016-11-08 15:47
405 查看
最近写项目碰到一个比较烦人的事情,修改前人版本,他在清单文件里设置了 android:targetSdkVersion="23" 很明显这个是Android 6.0的, 我自己的版本比这个低,在Android 6.0手机上更新安装版本时,出错,提示我的版本太低了,好吧,那就是android:targetSdkVersion="23"这个不能低于23了,所以只好修改自己的版本为23。那么问题来了,Android 6.0 权限只在清单文件里设置了还不行,还要在代码里再询问一次,这就很坑了,参照一些文件,跟一些博友的文章,自己搞了一下,写在这边跟大家分享一下,也自己留个档案
首先,Android 6.0 才要判断是否要在代码里判断权限,所以通过下面的方法可以获取手机的版本号:
if (Build.VERSION.SDK_INT >= 23) {
check();
} else {
}
///////////////////////////////////////////////////////////////////////////////////////////////
// 再次判断权限的方法
private void check() {
List<String> permissionsNeeded = new ArrayList<
4000
String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList,
Manifest.permission.ACCESS_COARSE_LOCATION))
permissionsNeeded.add("位置");
if (!addPermission(permissionsList,
Manifest.permission.WRITE_EXTERNAL_STORAGE))
permissionsNeeded.add("读写sd卡");
if (!addPermission(permissionsList, Manifest.permission.CALL_PHONE))
permissionsNeeded.add("电话");
if (!addPermission(permissionsList, Manifest.permission.CAMERA)) {
permissionsNeeded.add("相机");
}
if (!addPermission(permissionsList, Manifest.permission.READ_SMS)) {
permissionsNeeded.add("短信");
}
if (permissionsList.size() > 0) {
requestPermissions(
permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return;
}
}
private boolean addPermission(List<String> permissionsList,
String permission) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(permission))
return false;
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
此外还要重写一个方法
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
if (grantResults != null && !grantResults.equals("")) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
// check();
} else {
// Permission Denied
// 这边是有没给的权限让他再弹一次,因为6.0 有些权限不给,会报错,甚至奔溃闪退
check();
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions,
grantResults);
}
}
代码不多,就没用代码片
首先,Android 6.0 才要判断是否要在代码里判断权限,所以通过下面的方法可以获取手机的版本号:
if (Build.VERSION.SDK_INT >= 23) {
check();
} else {
}
///////////////////////////////////////////////////////////////////////////////////////////////
// 再次判断权限的方法
private void check() {
List<String> permissionsNeeded = new ArrayList<
4000
String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList,
Manifest.permission.ACCESS_COARSE_LOCATION))
permissionsNeeded.add("位置");
if (!addPermission(permissionsList,
Manifest.permission.WRITE_EXTERNAL_STORAGE))
permissionsNeeded.add("读写sd卡");
if (!addPermission(permissionsList, Manifest.permission.CALL_PHONE))
permissionsNeeded.add("电话");
if (!addPermission(permissionsList, Manifest.permission.CAMERA)) {
permissionsNeeded.add("相机");
}
if (!addPermission(permissionsList, Manifest.permission.READ_SMS)) {
permissionsNeeded.add("短信");
}
if (permissionsList.size() > 0) {
requestPermissions(
permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
return;
}
}
private boolean addPermission(List<String> permissionsList,
String permission) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(permission))
return false;
}
return true;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
此外还要重写一个方法
@Override
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
if (grantResults != null && !grantResults.equals("")) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
// check();
} else {
// Permission Denied
// 这边是有没给的权限让他再弹一次,因为6.0 有些权限不给,会报错,甚至奔溃闪退
check();
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions,
grantResults);
}
}
代码不多,就没用代码片
相关文章推荐
- Android 6.0(M) 获得权限请求问题
- Android 6.0 Fragment权限请求问题
- Android 6.0 权限问题
- android 6.0权限请求
- Android基础_6.0权限请求
- Android 6.0权限问题之Dexter库的使用
- android 6.0的权限问题
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- Android 6.0运行时权限请求示例
- 关于Android 6.0 调用 要求使用权限代码报红色问题
- Android 6.0开始动态请求权限
- 关于Android 6.0的权限问题这个大坑记录
- 4.14-3 Android 6.0 请求权限
- Android 6.0 需要在运行时请求权限
- Android 6.0 运行时请求权限
- Android (6.0) M 请求权限
- 解决Android 6.0动态添加权限问题
- android 6.0运行时权限的申请(微信在android 6.0上实现运行时请求权限的实现)
- Android 6.0权限问题