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 条评论
登录 后参与评论

相关文章

来自专栏贾志刚-OpenCV学堂

OpenCV3.2集成Android Studio2.2开发配置

主要知识点 OpenCV4Android3.2 SDK介绍与下载 AS2.2与OpenCV3.2集成 程序演示与代码 AS集成OpenCV3.2配置常见错误 O...

4086
来自专栏JackeyGao的博客

Django小技巧20: 使用多个settings模块

通常来说, 为了保持项目的配置简单,我们会避免使用多个配置文件。但理想很丰满, 现实是随着项目越来越大, settings.py可能也会变得相当复杂. 在那种情...

2211
来自专栏FreeBuf

新手指南:DVWA-1.9全级别教程之Brute Force

目前,最新的DVWA已经更新到1.9版本 ,而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的想法,错误的地方还...

3349
来自专栏Kubernetes

深入分析Kubernetes Scheduler的优先级队列

从1.9版本开始,Kubernetes实现了基于Pod优先级的调度队列,一方面提供高优先级的Pod优先被调度的能力,另一方面减轻抢占式调度时潜在的High Pr...

7127
来自专栏小樱的经验随笔

【批处理学习笔记】第十四课:常用DOS命令(4)

系统管理 at 安排在特定日期和时间运行命令和程序 shutdown立即或定时关机或重启 taskkill结束进程(WinXPHome版中无该命令) taskl...

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

Android6.0权限适配及兼容库的实现

从6.0 MarshMallow开始,Android支持动态权限管理,即有些权限需要在使用到的时候动态申请,根据用户的选择需要有不同的处理,具体表现可以看下图:

1472
来自专栏高性能服务器开发

+从零实现一款12306刷票软件1.4

这里还有个注意细节,就是通过POST请求发送的数据需要对一些符号做URL Encode,这个我在上一篇文章《从零实现一个http服务器》也详细做了介绍,还不清楚...

1992
来自专栏Jerry的SAP技术分享

通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

kubectl scale命令用于程序在负载加重或缩小时进行pod扩容或缩小,我们通过一些实际例子来观察scale命令到底能达到什么效果。

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

2018-08-15python通过蓝牙接megpi主板

Equipment Class: DXX - Part 15 Low Power Communication Device Transmitter

2412
来自专栏DeveWork

Mac OS X巧用AppleScript 制作网络位置切换自动化脚本(自动配置PAC 文件)

事情是这样的,自带的Macbook Air 在实习单位入的是办公网,办公网走自动代理(需要配置PAC 文件)。同时回来宿舍或家里需要民用的宽带网络。切换的时候出...

4225

扫码关注云+社区