@Tyhj
        
        2019-11-19T13:53:07.000000Z
        字数 2162
        阅读 1277
    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);
