Android RuntimePermissions运行时权限:单个运行时权限申请简例
Android运行时权限申请的框架结构和步骤比较简单和固定,一般现状代码启动后检查当前的Android SDK版本是否大于等于23,在SDK版本大于等于23时候,才启动运行时权限申请。在过去的版本,直接在AndroidManifest.xml写进去申请即可。
在检查当前代码未获得相应权限时候,进而使用标准方式requestPermissions,然后在回到函数onRequestPermissionsResult里面处理用户授权的结果。
给出一个简单例子,以相机权限为例。在AndroidManifest添加相机权限:
<uses-permission android:name="android.permission.CAMERA"/>
然后在MainActivity.java处理运行时权限申请逻辑:
package zhangphil.permission;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;public class MainActivity extends AppCompatActivity {private final String TAG = "ZHANG PHIL";private final int PERMISSION_REQUEST = 0xa01;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST);}}}@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {if (permissions != null && permissions.length > 0) {for (String s : permissions)Log.d(TAG + "权限列表", s + "");}switch (requestCode) {case PERMISSION_REQUEST:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Log.d(TAG, "授权获得");} else {Log.d(TAG, "授权未获得");}break;}}
}
代码运行在Android SDK高于或等于23时候有效。代码运行后如图:
点击 总是运行 后log日志输出:
09-19 23:11:47.557 31470-31470/zhangphil.permission D/ZHANG PHIL权限列表: android.permission.CAMERA
09-19 23:11:47.557 31470-31470/zhangphil.permission D/ZHANG PHIL: 授权获得
Android RuntimePermissions运行时权限:单个运行时权限申请简例相关推荐
- Android不使用支持库请求运行时权限
Android 6.0后,用户开始在应用运行时向其授予权限,而不是在应用安装时授予.Android官网上也有相关教程:在运行时请求权限.但教程是使用支持库来举例的,用支持库的话,APK的大小也会变得很 ...
- Android 12.0首次开机默认授予app运行时权限(去掉运行时授权弹窗)
目录 1.概述 2.首次开机默认授予app运行时权限(去掉运行时授权弹窗)的解决方案的核心类
- pySpark 运行时出现 Permission denied: (权限问题)
pySpark 运行时出现 Permission denied: (权限问题) 我们在本地测试pyspark代码,远程连接服务器上的HDFS时可能会出现权限问题. 有两种解决方法: 1. 更改DHFS ...
- 抛出运行时异常的目的_「JAVA」运行时异常、编译时异常、自定义异常,通过案例实践转译和异常链...
Java基础之异常处理机制 什么是异常 从事Java开发的小伙伴对于"异常"应该不陌生,因为每天都会遇到不少异常,或捕获,或抛出.那究竟什么是异常?异常即非正常的,不同于平常.一般 ...
- windows 打开exe传参_“以管理员身份运行”,这个打开软件时经常遇到的问题,有何含义...
平时操作电脑,我们会遇到操作系统要求"以管理员身份运行"软件程序,收到这样的的消息时,我们一直很想知道Windows内部发生的事情,以及为什么要进行这个操作过程. 那些从windo ...
- c语言运行时显示内存不足,请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码...
请问:c或c++运行时 遇到虚拟内存不足时咋办,帮优化下代码 [size=4][size=5]我编的一个高精度解hilbert方程组的程序段,用的是GS跌代,但运行时出现"虚拟内存不足&qu ...
- linux下bash脚本常用的十个技巧:显示执行脚本花费的时间,在脚本退出时杀死后台运行的程序,在脚本退出时跳出循环,读取命令行参数来决定循环次数
文章目录 1.显示执行脚本花费的时间 2.在脚本退出时杀死后台运行的程序 3.在脚本退出时跳出循环 4.读取命令行参数来决定循环次数 1.显示执行脚本花费的时间 网址:bash - How to ge ...
- 读取字符串字符时出错_JVM | 运行时常量池和字符串常量池及intern()
本文知识点 这一块的知识点,一直都是最为混乱的,网上很多博客有的都自相矛盾,因此,这一块需要深入学习,本文以JDK11为基础,尽量参考官方文档 静态常量池 运行时常量池及字符串的引用 各种String ...
- java 不退出_Java项目不挂断运行,即当账户退出或终端关闭时,程序仍然运行,并附上执行脚本...
把打包好的jar包上传服务器以后,直接运行java -jar+文件名 命令即可以完成启动. 若需要在公网上如何不挂断开启程序,可以使用nohup java -jar +文件名 &命令,其中no ...
最新文章
- Verilog中生成语句(generate)的用法
- Python之路(第二十篇) subprocess模块
- 独家报道:众说纷纭 云安全究竟为何物?
- distinct过滤掉重复记录并且显示所有字段_MySQL的所有姿势,我都帮你准备好了...
- 80-10-015-原理-Java NIO-ByteBuffer
- 进程和线程不属于标准c语言,经典C语言面试题6:进程与线程的关系和区别
- Python 并口(LPT)打印
- SSIS 左边工具栏消失处理
- 删除微云同步助手计算机快捷访问,腾讯微云同步助手使用说明:设置同步文件,方便随时查看...
- vscode汇编环境配置
- filevault(电子仓库)自动切换文件夹以及文档最大值设置
- 老九学堂数据结构与算法章节1课堂笔记
- WeChat----网站接入微信登录(前端)
- 特斯拉第二季度电动汽车销量下降近 18%
- jquery实时监控屏幕宽度
- spring cloud、gradle、父子项目、微服务框架搭建---搭建Eureka注册中心(一)
- Mac下编译太阳神三国杀源码
- RabbitMQ 学习知识点总结
- 16 个怪异的代码注释,想用的拿走
- 华为鸿蒙系统没有芯片,被低估的鸿蒙系统,未来或将解决华为缺芯的难题
热门文章
- hosts文件_电脑修改hosts文件屏蔽网站方法
- 选择将正确答案的序号填在括号里_小学四年级数学第五单元训练题,答案非常详细,见过的都保存了...
- 数据如何导入oracle数据库,如何用Oracle导入导出工具来实现Oracle数据库移植?
- 一篇带你了解函数指针
- 计算机基础知识教案总结,计算机基础知识教学设计
- android分享的主标题,Android 自定义标题栏(title栏)
- 百练OJ:2965:玛雅历
- 信息系统项目管理师考前冲刺第一天:项目基础知识和立项管理
- vue学习:v-on
- Unknown system variable 'tx_isolation'] with root cause