Android 6.0(M) 获得权限请求问题

Android 6.0权限请求问题

众所周知,android 6.0发布之后好多应用装上都用不了,原因可能最多的就是权限问题google将应用的权限重新定义,归用户管理。那么当应用没有获得权限的时候就会出现报错。不过对于之前的应用google也做了妥协,API 23 以下版本可以默认获取到应用权限,但是用户可以在设置中去关闭权限,想必如果用户关闭权限之后的错误就避免不了了。
那么现在如何解决这个问题,6.0系统的优化还是很多的就内存管理及电池管理还是很牛X的,所以6.0推送之后想必很多厂商会跟进ROM镜像。总之我们必须得要遵从google的规则。无论你是之前的应用还是后续的应用都应该改一下。废话不多说--如何修改好你的应用代码。

第一步

           找一部原生6.0系统的手机,装上你的应用,打开设置看一下你的应用权限都调用了那些,然后找出从哪里调用的代码,我这里就举一个简单的例子拍照权限。
           Android 6.0(M) 获得权限请求问题_第1张图片
           我们去改跳系统相机时候那段代码,
<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);
        }
            上面那句判断应用有没有获取到权限。然后我们在系统提示弹出框回掉里面处理用户的选择结果
             Android 6.0(M) 获得权限请求问题_第2张图片
@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

你可能感兴趣的:(android,优化,应用权限,Android6.0)