1.为什么要权限申请

6.0以上就需要了,别问为什么。(不是重点,自行搜索)

2.如何进行权限申请

  1. Android自带的权限申请
  2. EasyPermission权限申请

Ps:EasyPermission还没开始玩,下次玩透了写博客。

3.权限申请的具体写法

3.1 假设有一个需要权限才能运行的方法

    /*** 假设这是一个需要权限才能运行的方法*/private void PermissionTest() {Toast.makeText(this, "这是一个需要权限才能运行的方法!", Toast.LENGTH_SHORT).show();}

3.2 申请单个权限,比如说:打电话

        button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You clicked Button1", Toast.LENGTH_SHORT).show();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {// 不相等 请求授权ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);} else {PermissionTest();}}});

权限申请的时候,需要判断是否已经有权限了,如果有,则直接运行,没有的话在进入权限申请。单个权限比较简单。Activity.requestPermissions的方法需要三个参数,第一个:Context,第二个:传入需要申请的权限(可多个),第三个:请求代码(用于回调处理)

3.2 申请多个权限

        button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this, "You clicked Button2", Toast.LENGTH_SHORT).show();//一次申请两个权限的写法,当然判断的时候有一个权限没有申请的时候无法执行当前方法if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.RECORD_AUDIO)!= PackageManager.PERMISSION_GRANTED  ||ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);}else{PermissionTest();}}});

一次申请两个权限的写法(多个权限类似,多加几个恍恍惚惚),当然,判断的时候有一个权限没有申请的时候无法执行当前方法。

ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);

传入需要申请的权限,这里申请录音和写存储卡的方法。请求代码传入2

3.3 回调处理

    @Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {switch (requestCode) {case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.d(TAG, "onRequestPermissionsResult: " +"电话权限申请成功");for (int i : grantResults) {Log.d(TAG, "onRequestPermissionsResult: " + i);}PermissionTest();}else {Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;case 2:if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){Log.d(TAG, "onRequestPermissionsResult: " +"权限申请成功");PermissionTest();}else{Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();}break;default:break;}}

说明:请求代码的窗口跳出,用户点击之后,每个权限就能够判断是否申请成功了。

分支语句switch(requestCode),每一个case就是之前传入的请求码

case1 说明:
单个权限已经被申请,判断方法,grantResult数组长度大于0,grantResult数组的第一项的值等于PackageManager.PERMISSION_GRANTED (其实就是0,没有被授权的话值等于-1)。然后执行PermissionTest方法。

case2 说明:
和case1一样,先判断grantResult数组长度大于0,grantResult数组的第一二两项是否等于PackageManager.PERMISSION_GRANTED(因为只有两个选项所以我就直接写了),权限申请之完毕之后就能够运行PermissionTest()方法了。

case2的判断语句可改进:定一个isAllGranted,扫一遍grantRsult,就好了

    Boolean isAllGranted = true;for (int permission : grantResults) {if (permission != PackageManager.PERMISSION_GRANTED){isAllGranted = false;}}

Ps:测试了一下,grantResults.length > 0 好像可以不用写。。。汗。。

结束语

权限申请之前一直懵逼,看了书之后还是不怎么会写,真到要用的时候心里一直怕怕的。今天刚好放假,所以花了一些时间来写这篇博客。这应该是我第一篇真正的Android博客了吧。下次更新Easy的使用。

欢迎大家观看,需要帮助可以留言。相遇就是缘分!

转载于:https://www.cnblogs.com/kumaxiong/p/8146339.html

Android权限申请完全解析(一):Android自带的权限申请相关推荐

  1. json在android的应用,JSON解析在android应用程序

    你JSON无效.确保始终在Validating JSON中检查您的JSON.这是如何将其拆分为具有修改的JSON的类别: String jsonString = "[\n" + & ...

  2. android targetapi版本低,Android应用开发之Android @TargetAPI版本兼容性解析

    本文将带你了解Android应用开发Android @TargetAPI版本兼容性解析,希望本文对大家学Android有所帮助. Android   @TargetAPI版本兼容性解析,Android ...

  3. android studio val,导入--Android Studio突然无法解析符号

    导入--Android Studio突然无法解析符号 Android Studio 0.4.2工作正常,今天我打开它,几乎所有东西都是红色,自动完成已停止工作. 我看看导入和AS似乎告诉我它突然找不到 ...

  4. Android 广播实现原理解析

    Android 广播实现原理解析 前言 Android四大组件中的BroadcastReceiver,在我们实际工作中被频繁的使用,我们可以利用系统的开机广播,网络状态改变的广播等等实现我们的业务逻辑 ...

  5. android 动态申请权限_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  6. Android 6.0 运行时权限处理完全解析

    一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...

  7. android 6.0蓝牙服务开启,Android应用开发之Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法...

    本文将带你了解Android应用开发Android 6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法,希望本文对大家学Android有所帮助. 为提供更高的数据保护   Android6.0版本 ...

  8. android权限设置在哪找,Android权限申请与打开权限设置页面

    前言 应用的使用需要申请权限,但是如果用户禁用掉,或者禁用并不再提醒就必须到系统设置中开启. // 权限 implementation 'com.yanzhenjie:permission:2.0.3 ...

  9. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 权限申请原理对话框操作回调接口 | 永久拒绝权限后引导设用户置权限 )

    文章目录 一.权限申请原理对话框操作回调接口 RationaleCallbacks 二.永久拒绝权限后引导设用户置权限 一.权限申请原理对话框操作回调接口 RationaleCallbacks 权限申 ...

最新文章

  1. [JAVA EE] 内联用法
  2. 【运筹学】线性规划 单纯形法 ( 原理 | 约定符号 | 目标系数矩阵 C | 目标函数变量矩阵 X | 约束方程常数矩阵 b | 系数矩阵 A | 向量 | 向量符号 | 向量 Pj )
  3. Xshell代理访问外网或者公司的内网
  4. CSS3与弹性盒布局
  5. npm notice created a lockfile as package-lock.json. You should commit this file.
  6. Spring源码之ApplicationContext(七)获取消息资源
  7. 19. 镜像二叉树(C++版本)
  8. resetlog oracle,用RMAN的全备恢复resetlog之前的数据
  9. 学做衣服论坛 -服装DIY教程,缤纷服装网,裁剪教程,家用缝纫机,买布料
  10. OAException Application ICX Message Name ICX SESSION FAI
  11. Recovering BST
  12. 如何在VSCode设置/取消隐藏文件
  13. 【arcgis 批量将属性表批量导出成excel】
  14. 企业微信有客服热线吗?有问题如何获取帮助?
  15. C#中Math函数简介
  16. html给数字加货币单位,WPS如何批量给数字添加货币符号?
  17. 【无人机学习】Mission Planner(pc端)和QGroundControl(android端)
  18. 科达录播服务器修改ip,科达视讯平台API使用说明
  19. 计算机教师教学日记,计算机教师实习日记30篇.doc
  20. AURIX TC3xx Safety Mannaul

热门文章

  1. 2021-2027年中国市医疗电子场投资分析及前景预测报告
  2. ubuntu 修改时区、时间、同步网络时间、将时间写入硬件
  3. 2022-2028年中国丁二烯橡胶行业市场规模研究及前瞻分析报告
  4. 2022-2028年中国超韧尼龙行业市场调查分析及未来前景分析报告
  5. 在pycharm中无法引入同一目录下的python文件
  6. debian10 raid5+lvm
  7. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效
  8. LeetCode简单题之重新分配字符使所有字符串都相等
  9. 什么是L1/L2/L3 Cache?
  10. 芯片IP,SOC,FPGA智能卡