Android 6.0权限请求问题
众所周知,android 6.0发布之后好多应用装上都用不了,原因可能最多的就是权限问题google将应用的权限重新定义,归用户管理。那么当应用没有获得权限的时候就会出现报错。不过对于之前的应用google也做了妥协,API 23 以下版本可以默认获取到应用权限,但是用户可以在设置中去关闭权限,想必如果用户关闭权限之后的错误就避免不了了。
那么现在如何解决这个问题,6.0系统的优化还是很多的就内存管理及电池管理还是很牛X的,所以6.0推送之后想必很多厂商会跟进ROM镜像。总之我们必须得要遵从google的规则。无论你是之前的应用还是后续的应用都应该改一下。废话不多说--如何修改好你的应用代码。
第一步
找一部原生6.0系统的手机,装上你的应用,打开设置看一下你的应用权限都调用了那些,然后找出从哪里调用的代码,我这里就举一个简单的例子拍照权限。
我们去改跳系统相机时候那段代码,
<span style="font-size:24px;color:#3333ff;">startActivityForResult(
new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)), 1);</span>
这段代码是跳到相机拍照页面,然后之前加一句判断语句。
<pre name="code" class="java"> int MY_PERMISSIONS_REQUEST_CAMERA =10011;
/**android 6.0 权限申请**/
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
//请求权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
//判断是否需要 向用户解释,为什么要申请该权限
ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_CONTACTS);
} else {
startActivityForResult(
new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)), 1);
}
上面那句判断应用有没有获取到权限。然后我们在系统提示弹出框回掉里面处理用户的选择结果
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//权限申请结果
if (requestCode == MY_PERMISSIONS_REQUEST_CAMERA) {
for (int index = 0; index < permissions.length; index++) {
switch (permissions[index]) {
case Manifest.permission.CAMERA:
if (grantResults[index] == PackageManager.PERMISSION_GRANTED) {
/**用户已经受权*/
startActivityForResult(
new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(
MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)), 1);
} else if (grantResults[index] == PackageManager.PERMISSION_DENIED) {
/**用户拒绝了权限*/
T.showShort("应用没有拍照权限,请授权!");
} else {
T.showShort("应用没有拍照权限,请授权!");
}
break;
}
}
}
}
这样就好了我们的拍照权限就会交给用户处理了
最后给大家一点资料https://github.com/hotchemi/PermissionsDispatcher