谈谈Android6.0运行时的权限处理
之前有人在 Android 6.0 的机型上运行了DragGridView结果出异常奔溃了。想必问题的原因大家都知道,是Android 6.0新引入了在运行时权限申请(Runtime Permissions)的功能。那么这所谓的运行时申请权限究竟是怎么一回事呢,下面跟着小编一起来看看吧! 在Android 6.0(API级别23)中,系统引入了一项重大改变,即运行时权限(Runtime Permissions)。在此之前,应用程序在安装时会一次性获取所有声明的权限,而在Android 6.0及以上版本,部分敏感权限需要在运行时由用户动态授权。这一变化旨在提高用户对应用程序权限控制的透明度,保护用户的隐私。 运行时权限主要针对一些高敏感性的权限,例如访问联系人、短信、位置等。以下是一些关键权限: 1. 身体传感器(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION) 2. 日历(READ_CALENDAR, WRITE_CALENDAR) 3. 摄像头(CAMERA) 4. 通讯录(READ_CONTACTS, WRITE_CONTACTS) 5. 地理位置(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION) 6. 麦克风(RECORD_AUDIO) 7. 电话(READ_PHONE_STATE, CALL_PHONE, READ_CALL_LOG, WRITE_CALL_LOG) 8. 短信(SEND_SMS, READ_SMS, RECEIVE_SMS, RECEIVE_WAP_PUSH, RECEIVE_MMS) 9. 存储空间(READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE) 当应用需要这些权限时,系统会显示一个对话框,请求用户进行批准或拒绝。用户可以选择接受或拒绝每个权限,而不仅仅是接受整个应用。这种机制使得用户可以更加精细化地控制应用对设备资源的访问。 为了检查应用是否已经获得了某个权限,可以使用`Context.checkSelfPermission(String permission)`方法。这个方法会返回`PERMISSION_GRANTED`(已授予)或`PERMISSION_DENIED`(未授予)。如果权限未被授予,应用就需要通过`Activity.requestPermissions(String[] permissions, int requestCode)`来申请权限。此方法的第一个参数是一个权限字符串数组,表示要申请的多个权限,第二个参数是请求码,用于在回调中区分不同的权限请求。 当用户对权限申请做出响应后,系统会调用`onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)`方法。在这个回调中,你可以根据`requestCode`、`permissions`和`grantResults`来处理用户的选择。例如,如果用户授予了读取联系人的权限,可以在`onRequestPermissionsResult`中进行相应的操作。 以下是一个示例代码模板,展示了如何请求读取联系人权限: ```java public static final int READ_CONTACTS_REQUEST_CODE = 101; // 检查权限是否已被授予 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // 申请权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE); } else { // 权限已授予,执行相关操作 } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case READ_CONTACTS_REQUEST_CODE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 用户已授予权限,执行相关操作 } else { // 用户拒绝授予权限,处理拒绝情况 } break; } } ``` 这个模板展示了如何检查、申请以及处理权限请求的回调。在实际开发中,你需要根据应用的需求来适配这些方法,确保在正确的时间和情况下请求必要的权限,并妥善处理用户的响应。对于那些在Android 6.0之前版本运行的应用,需要确保它们在新版本下也能正常工作,这就需要对权限管理系统进行适配。
- 粉丝: 5
- 资源: 1004
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- CDH6.3.2版本hive2.1.1修复HIVE-14706后的jar包
- 鸿蒙项目实战-天气项目(当前城市天气、温度、湿度,24h天气,未来七天天气预报,生活指数,城市选择等)
- Linux环境下oracle数据库服务器配置中文最新版本
- Linux操作系统中Oracle11g数据库安装步骤详细图解中文最新版本
- SMA中心接触件插合力量(插入力及分离力)仿真
- 变色龙记事本,有NPP功能,JSONview功能
- MongoDB如何批量删除集合中文最新版本
- seata-server-1.6.0 没有梯子的可以下载这个
- loadrunner参数化连接mysql中文4.2MB最新版本
- C#从SQL数据库中读取和存入图片中文最新版本