Android – 权限申请

Android的棉花糖我们需要所有权限请求需要得到用户的许可(当我们的targetSdkVersion>=23时是必须动态获取权限申请)。所以这里,我们就需要去处理当用户拒绝了我们的权限申请,我们的代码该如何处理。

这里咱们代码配合效果图来演示具体效果。

这里假设我需要去申请该权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

当我们第一次去点击READ PHONE STATE时就会弹出这个权限申请dialog,如果用户点击了允许,那恭喜你,万事大吉了,你就不用去担心需要权限的代码不能执行了。但是,如果用户点击了拒绝,那很不幸,你需要权限的代码是不能执行,如果你不加处理,非要执行那段代码的话,应用就会直接崩溃,崩溃日志就会告诉你,需要获取该权限。

图片传自简书APP

    if (Build.VERSION.SDK_INT >= 23) {      
             if (checkPermissionsrp()) {
                    // 对于高于或等于23的API代码导向装置
                    // 执行具体逻辑
             } else {
                 requestPermissionsrp(); //代码去执行权限申请
            }
       } else {
            //面向API的23以下设备的代码
           // 执行具体逻辑
        }
    }
private boolean checkPermissionsrp() {
        int result2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE);
        if (result2 == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }
private void requestPermissionsrp() {
        boolean permissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE);
        if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_PHONE_STATE)) {
            new AlertDialog.Builder(this)
                    .setMessage("跳转到设置页面")
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent intent = new Intent(Settings.ACTION_SETTINGS);
                            startActivity(intent); // 打开系统设置界面
                        }
                    })
                    .setNegativeButton("Cancel", null)
                    .create()
                    .show();
        } else {
            ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
        }
    }

当我们点击了拒绝时,就会打出权限被拒绝,您不能继续执行。所以在这时候,咱们就需要去自己单独自定义一个dialog,去引导用户允许咱们的权限申请。

图片来自简书APP

当用户跟随我们的引导去授予权限时,然后返回我们的APP时,checkPermissionsrp()方法就会返回true,这时候,我们的代码逻辑就可以正常执行了。

 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.e("value", "权限允许,您可以继续执行");
                } else {
                    Log.e("value", "权限被拒绝,您不能继续执行。");
                }
                break;
        }
    }

到这里,权限申请就结束了,其他权限申请也类似。

快乐生活!快乐工作!快乐编程!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

由一条报警信息发现的一系列问题(r7笔记第67天)

今天看到一条报警短信,提示是某个表空间的问题。 ZABBIX-监控系统: ------------------------------------ 报警内容:...

3479
来自专栏小鄧子的技术博客专栏

【译】使用Picasso.Builder定制Picasso实例

可以通过Picasso.Builder 直接修改Picasso实例。我们将使用Picasso.Builder来创建自定义的Picasso实例。新的Picasso...

912
来自专栏Ryan Miao

在dropwizard中使用feign,使用hystrix

前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味。为了增强对外访问API的能力,需要引入open feign...

36512
来自专栏图像识别与深度学习

《Android》Lesson19-广播1

1639
来自专栏GIS讲堂

Highcharts导出图片

Highcharts是在做项目涉及到统计图的时候大家的首选,同时也会用到highcharts的export功能,将统计图导出为图片,刚好,最近也遇到了这样的事情...

682
来自专栏Android机器圈

Android框架之Volley与Glide

1636
来自专栏C语言及其他语言

JAVA中如何图片异步上传

来源:程序员头条:http://www.90159.com/2015/12/15/java-upload-picture/ 在java中要实现异步上传要提前做...

35412
来自专栏散尽浮华

MySQL高可用架构-MMM环境部署记录

MMM介绍 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MM...

21011
来自专栏乐沙弥的世界

Oracle 审计失败的用户登陆(Oracle audit)

       对于在线交易系统,且Oracle用户在使用缺省的profile的情形下,多用户共享相同的数据库用户及密码,任意用户输入错误密码累计达到10次以上,...

713
来自专栏Android源码框架分析

Android硬件加速(二)-RenderThread与OpenGL GPU渲染

Android4.0之后,系统默认开启硬件加速来渲染视图,之前,理解Android硬件加速的小白文简单的讲述了硬件加速的简单模型,不过主要针对前半阶段,并没怎么...

2443

扫码关注云+社区