[关闭]
@Tyhj 2019-11-19T13:53:07.000000Z 字数 2162 阅读 953

Android权限管理机制

Android


概述

Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读写用户的私有数据(如联系人或电子邮件等)、读写其他应用的文件、执行网络访问、使设备保持唤醒状态等等。
如果要使用这些受保护的设备功能,首先要在应用的清单文件(Androidmanifest.xml)中添加一个或多个标记:

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="com.hikvision.hikdarkeyes">
  3. <!--网络权限-->
  4. <uses-permission android:name="android.permission.INTERNET" />
  5. <!--文件读写权限-->
  6. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  7. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  8. ...
  9. </manifest>

Android权限分类

Android把权限分为两个级别:

权限请求

如果你的应用在清单中列出普通权限(即不会对用户隐私或设备操作造成很大风险的权限),系统会自动授予这些权限;如果你的应用在清单中列出危险权限(即可能影响用户隐私或设备正常操作的权限),系统会要求用户明确授予这些权限。Android发出权限请求的方式取决于系统版本:

权限组

为了更好的管理权限,Android6.0以后,将权限进行了分组;当同组的任何一个权限被授权了,其他权限也默认被授权。
Android8.0以后,当同组的一个权限被授权后,其他权限不会马上被授权,但是再申请同组其他权限时,系统会立即授予权限,不再提醒用户。

权限组名 权限名
CALENDAR 日历 READ_CALENDAR
WRITE_CALENDER
CAMERA 相机 CAMERA
CONTACTS 联系人 READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION 定位 ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE 麦克风 RECORD_AUDIO
PHONE 电话 READ_PHONE_STATE
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
SENSORS 传感器 BODY_SENSORS
SMS 短信 SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE 数据存储 READ_EXTRAL_STRORAGE
WRITE_EXTERNAL_STORAGE

权限使用场景

对于开发者而言,主要需要考虑的是targetSdkVersion和buildVersion(运行的应用的真机系统版本)
,从以下方面进行考虑:

真机系统版本 targetSdkVersion 申请方式
<23 <23 安装时申请
<23 >=23 安装时申请
>=23 <23 特殊处理
>=23 >=23 动态申请

动态权限申请

  1. 在manifest.xml文件中声明需要的权限
  2. 检查是否拥有权限,通过checkSelfPermission函数,

    1. if (ContextCompat.checkSelfPermission(MainActivity.this,
    2. Manifest.permission.READ_EXTERNAL_STORAGE)
    3. != PackageManager.PERMISSION_GRANTED) {
    4. //没有授权,编写申请权限代码
    5. } else {
    6. //已经授权,执行操作代码
    7. }
  3. 没有权限,申请权限

  1. ActivityCompat.requestPermissions(MainActivity.this,
  2. new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
  3. 1);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注