Android 6.0(API 级别 23)引入了权限请求系统的重大变化,旨在提高用户对应用程序权限的控制。在此之前,应用程序在安装时会一次性获取所有所需权限,但在 Android 6.0 及更高版本中,部分权限(称为“危险权限”)需要在运行时动态请求。这一改动使得应用程序更加透明,增强了用户的隐私保护。 权限分为三类: 1. Normal 权限:这类权限通常不会对用户隐私造成直接威胁,如访问网络。在安装时会自动授予,无需用户交互。 2. Dangerous 权限:包括访问联系人、相机、位置等敏感信息,需要在运行时向用户请求。如果用户拒绝,应用可能需要调整功能以适应这种情况。 3. 特殊权限:这类权限特别敏感,如悬浮窗(SYSTEM_ALERT_WINDOW)和修改系统设置(WRITE_SETTINGS)。即使应用的目标 SDK 版本低于 23,系统也会要求明确的用户授权。 危险权限被分组管理,便于用户理解为何应用需要这些权限: - CALENDAR:访问日历数据 - CAMERA:使用相机 - CONTACTS:访问联系人信息 - LOCATION:获取地理位置信息 - MICROPHONE:使用麦克风录音 - PHONE:拨打电话和读取通话记录 - SENSORS:访问传感器数据,如加速度计 - SMS:发送和接收短信 - STORAGE:读写外部存储 当应用需要请求危险权限时,可以使用 ` ActivityCompat.requestPermissions()` 方法,并通过 `onRequestPermissionsResult()` 回调处理结果。例如,请求相机权限的示例代码如下: ```java // 请求相机权限 private void requestCameraPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CAMERA: { // 如果请求被取消,那么 result 数组长度将为 0 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限已获准,可以使用相机功能 } else { // 权限被拒绝,可能需要向用户解释为何需要该权限 } return; } // 其他 'case' 行来检查其他权限请求 } } ``` 对于特殊权限,如悬浮窗权限(SYSTEM_ALERT_WINDOW),不能直接通过 `requestPermissions()` 请求,而需要引导用户到系统设置界面手动授权。如上文所示,可以使用 `ACTION_MANAGE_OVERLAY_PERMISSION` 动作启动一个隐式 Intent,并在 `onActivityResult()` 中检查是否已经获得授权。 ```java private void requestAlertWindowPermission() { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (Settings.canDrawOverlays(this)) { Log.i(LOGTAG, "onActivityResult granted"); } else { // 用户未授权,可能需要提示或提供其他操作 } } } ``` 同样,请求修改系统设置(WRITE_SETTINGS)权限也需要类似的方法,启动 `ACTION_MANAGE_WRITE_SETTINGS` 意图。 Android 6.0 的权限管理变化要求开发者更加关注用户隐私,并在设计应用程序时考虑到权限请求的用户体验。通过恰当的请求和解释,开发者可以确保用户理解并愿意提供必要的权限,从而维持应用的功能和用户体验。
- 粉丝: 3
- 资源: 888
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#ASP.NET小型OA办公管理系统源码带文档数据库 SQL2008源码类型 WebForm
- rabbitmq-server-3.13.3-windows安装包
- 办公必备小工具+【筛选符合条件的文件】+【根据文件名和文件格式】
- rabbitmq-server-3.13.4-windows安装包
- rabbitmq-server-3.13.5-windows安装包
- rabbitmq-server-3.13.6-windows安装包
- 理光Ricoh 7502打印机驱动下载
- python爬虫bs4的基本使用、代理IP和bs4解析【实战讲解-爬取斗鱼颜值主播数据】.zip
- 科目一,扣分法规的的的的
- 科目一易错题,整理的的的的