@Tyhj
2019-11-19T21:53:07.000000Z
字数 2162
阅读 994
Android
Android安全架构规定:默认情况下,任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读写用户的私有数据(如联系人或电子邮件等)、读写其他应用的文件、执行网络访问、使设备保持唤醒状态等等。
如果要使用这些受保护的设备功能,首先要在应用的清单文件(Androidmanifest.xml)中添加一个或多个标记:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hikvision.hikdarkeyes">
<!--网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--文件读写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...
</manifest>
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 | 动态申请 |
检查是否拥有权限,通过checkSelfPermission函数,
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//没有授权,编写申请权限代码
} else {
//已经授权,执行操作代码
}
没有权限,申请权限
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
1);