Android 6.0运行时权限处理
来源:互联网 发布:淘宝装修收藏店铺 编辑:程序博客网 时间:2024/04/29 23:40
运行时权限介绍
Android 6.0在原有的AndroidManifest.xml声明权限的基础上增加了动态申请运行时权限。新增的运行时权限有 身体传感器
、日历
、摄像头
、通讯录
、地理位置
、麦克风
、电话
、短信
、SD卡存储
。
运行时权限处理方式
Android targetSdkVersion在23以下(不包括23),不需要动态申请运行时权限,所以可以通过降低targetSdkVersion的方式可以解决运行时权限申请的问题。这种方式不推荐。还有一种方式就是通过动态申请的方式解决。Android 6.0新增了一套关于权限申请的新的API。checkSelfPermission(...)
,requestPermissions(...)
来进行动态申请权限。在onRequestPermissionsResult()
进行回调处理权限申请的结果。
代码示例如下:
package com.syz.example.permission;import android.Manifest;import android.app.Activity;import android.content.pm.PackageManager;import android.os.Build;import android.os.Bundle;import android.support.v4.content.ContextCompat;/** * Created by SYZ on 2016/12/30. */public class BaseActivity extends Activity { /** * 运行时权限 request code */ private static final int RUNTIME_PERMISSION_REQUEST_CODE = 0X0000; /** * SD卡读写权限 request code */ private static final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 0X0001; /** * 摄像头权限 request code */ private static final int CAMERA_PERMISSION_REQUEST_CODE = 0x0002; /** * 麦克风权限 request code */ private static final int AUDIO_PERMISSION_REQUEST_CODE = 0X0003; /** * 日历权限 request code */ private static final int CALENDAR_PERMISSION_REQUEST_CODE = 0x0004; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestPermission(); } /** * 请求运行时权限 * 注意:同一时刻只能发一次权限请求 */ private void requestPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { /**申请WRITE_EXTERNAL_STORAGE权限*/ int hasExternalStoragePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); /** audio 权限*/ int hasAudioPermission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO); /** camera 权限*/ int hasVideoPermission = ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA);// if (hasExternalStoragePermission != PackageManager.PERMISSION_GRANTED) {// //申请WRITE_EXTERNAL_STORAGE权限// ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},// WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);// }////// if (hasAudioPermission != PackageManager.PERMISSION_GRANTED ){// requestPermissions(new String[]{android.Manifest.permission.RECORD_AUDIO},// AUDIO_PERMISSION_REQUEST_CODE);// }//// if (hasVideoPermission != PackageManager.PERMISSION_GRANTED) {// requestPermissions(new String[]{android.Manifest.permission.CAMERA},// CAMERA_PERMISSION_REQUEST_CODE);// } /** 音频麦克风,视频权限*/ if (hasAudioPermission != PackageManager.PERMISSION_GRANTED || hasVideoPermission != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[] { android.Manifest.permission.RECORD_AUDIO, android.Manifest.permission.CAMERA }, RUNTIME_PERMISSION_REQUEST_CODE); } } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); doWithPermissionResult(requestCode,permissions,grantResults); } /** * 运行时权限申请结果处理 * @param requestCode * @param permissions * @param grantResults */ protected void doWithPermissionResult(int requestCode, String[] permissions, int[] grantResults){// if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE){//申请WRITE_EXTERNAL_STORAGE权限是否通过// if (grantResults[0] == PackageManager.PERMISSION_GRANTED){// // Permission Granted// }else {// // Permission Denied// }// }// if (requestCode == AUDIO_PERMISSION_REQUEST_CODE){//音频权限// if (grantResults[0] == PackageManager.PERMISSION_GRANTED){// // Permission Granted// }else {// // Permission Denied// }// }// if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {//摄像头权限// if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// // Permission Granted// } else {// // Permission Denied// }// } if (requestCode == RUNTIME_PERMISSION_REQUEST_CODE) {//音频,摄像头权限 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Permission Granted } else { // Permission Denied } if (grantResults[1] == PackageManager.PERMISSION_GRANTED){ // Permission Granted } else { // Permission Denied } } }}
1 0
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 Marshmallow运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- java SE学习Day 1:标识符,关键字和变量
- Swift基础之侧滑Cell显示操作按钮
- json生成
- Android-GridLibrary
- Java多线程同步辅助类与异常处理简介
- Android 6.0运行时权限处理
- 老板让我做一个socket服务器连接客户端和一个wifi?
- 如果可以,我不想把O盟“王牌计划”推荐给你
- Solr 6.0 学习(十二)SolrParamer实现
- H5视频直播流程
- Android 内存优化-实例
- Hadoop的MapReduce执行过程
- VUE.js的基础知识
- Python tornado上传文件