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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 师资情况表格模板.docx
- 实物出入库管理台账.docx
- 实物出入库管理台账.xls
- 市级专业应急救援队伍统计表.doc
- 海鸥优化算法SOA结合GRU做时间序列单输入单输出预测模型,要求数据是单列的时间序列数据,直接替数据就可以用 程序语言是matlab,需求最低版本为2018及以上 程序可以出真实值和预测值对比图
- Android原生开发同一局域网内利用socket通信进行数据传输
- 工业ai试题及答案选题
- PPT模板、PPT培训模板、PPT月总结模板
- 物理实验操作技能考查试题及等级评定标准.doc
- 物品发放领用表.docx
- 物品发放领用表.xls
- 校外实习用车记录.doc
- 校外实习用车申请表.doc
- 新生退学审批表.doc
- 新引进高级人才购房补贴申请表.doc
- 学生退学审批表.docx