安卓6.0运行时权限动态获取实战教程
169 浏览量
更新于2024-08-29
收藏 155KB PDF 举报
"安卓Android6.0权限动态获取操作示例"
在安卓开发中,随着Android 6.0(API级别23)的发布,引入了一种新的权限管理系统,即运行时权限(Runtime Permissions)。在此之前,应用程序在安装时会一次性获取所有所需的权限,而在Android 6.0及以上版本,应用必须在运行时向用户请求敏感权限,以提高用户对应用权限使用的控制和透明度。本示例将详细解释如何在Android 6.0上动态获取权限。
首先,我们需要了解Android 6.0中的权限分类。根据敏感程度,权限分为正常权限和危险权限。正常权限不会影响其他应用或用户的数据和隐私,因此在安装时即可授予。而危险权限涉及用户隐私和数据,必须在运行时由用户明确同意。
以下是一个动态获取权限的代码示例:
```java
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import java.util.ArrayList;
import java.util.List;
```
在这个示例中,我们创建了一个名为`CheckPermissionsActivity`的类,它继承自`AppCompatActivity`并实现了`ActivityCompat.OnRequestPermissionsResultCallback`接口。这使得我们可以处理权限请求的结果。
```java
public class CheckPermissionsActivity extends AppCompatActivity implements ActivityCompat.OnRequestPermissionsResultCallback {
// 需要检测的权限数组
protected String[] needPermissions = {
Manifest.permission.ACCESS_COARSE_LOCATION,
// 添加其他你需要检测的权限
};
```
在这里,我们列举了需要检测的权限,例如访问粗略位置的权限。你可以根据项目需求添加更多的权限。
接下来,我们会在适当的地方检查这些权限是否已经被授予:
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 在这里检查权限
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(needPermissions, REQUEST_CODE_ASK_PERMISSIONS);
}
}
```
`checkSelfPermission()`用于检查特定权限是否已经授予,如果没有,则调用`requestPermissions()`来请求权限,同时传入一个请求码`REQUEST_CODE_ASK_PERMISSIONS`以便在回调方法中识别此次请求。
当用户对权限请求做出回应后,系统会调用`onRequestPermissionsResult()`:
```java
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 权限被用户同意,执行相关功能
} else {
// 权限被用户拒绝,可能需要提示用户为什么需要这个权限,或者在必要时引导至设置界面让用户手动开启
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
```
在用户同意权限后,你可以继续执行依赖该权限的功能;如果用户拒绝,你可以选择提示用户或引导他们到设置页面手动开启权限。
此外,为了提供良好的用户体验,你应该在真正需要权限的地方请求,而不是在一开始就请求所有权限。可以使用`ActivityCompat.shouldShowRequestPermissionRationale()`检查用户是否已经在之前拒绝过此权限,并显示一个解释为何需要该权限的对话框,以增加用户理解并重新请求的几率。
Android 6.0及更高版本的运行时权限管理为开发者提供了更精细的权限控制,同时也提高了用户体验。通过正确地实施动态权限获取,你可以确保应用在遵守新权限模型的同时,依然能提供无缝的功能体验。
2018-01-18 上传
2021-01-03 上传
2019-03-19 上传
2021-01-21 上传
2017-06-27 上传
110 浏览量
2017-12-01 上传
2018-03-23 上传
2017-07-18 上传
weixin_38740201
- 粉丝: 7
- 资源: 949
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析