# Android Permissions


## Permissions(还在写)

> 对于`Permission`, 我们做`Android`开发用的很频繁, 但是我写这篇文章之前我其实一直对什么情况下究竟应该请求什么权限只能靠猜, 我需要系统总结! 于是有了这篇文章

### 权限简介

建议: [Manifest.permission  |  Android Developers (google.cn)](https://developer.android.google.cn/reference/kotlin/android/Manifest.permission)

毕竟我下面写的肯定是有时效性的, 建议去看看官网

权限作为应用开发者我们只需要了解正常权限和危险权限, 正常权限只需要我们在`debug`时遇到错误或者`IDE`标黄提示的时候添加进去就完事了(但往往国内各种定制ROM还会有自己的特殊限制, 如`MIUI`中对剪切板读写权限的限制), 而我们重点需要了解下方的主要的危险权限:

| 危险权限组        | 权限                                                         |
| ----------------- | ------------------------------------------------------------ |
| CALENDAR 日历     | READ_CALENDAR<br />WRITE_CALENDAR                            |
| CAMERA 摄像头     | CAMERA                                                       |
| CONTACTS 联系人   | READ_CONTACTS<br />WRITE_CONTACTS<br />GET_ACCOUNTS          |
| LOCATION 位置     | ACCESS_FINE_LOCATION<br />ACCESS_COARSE_LOCATION             |
| MICROPHONE 麦克风 | RECORD_AUDIO                                                 |
| PHONE 手机状态    | READ_PHONE_STATE<br />CALL_PHONE<br />READ_CALL_LOG<br />WRITE_CALL_LOG |
| SENSORS 传感器    | BODY_SENSORS                                                 |
| SMS 短信          | SEND_SMS<br />RECEIVE_SMS<br />READ_SMS<br />RECEIVE_WAP_PUSH<br />RECEIVE_MMS |
| STORAGE 储存      | READ_EXTERNAL_STORAGE<br />WRITE_EXTERNAL_STORAGE            |

在`Android 6.0`(SDK23)及之后的`Android`版本, 开发者需要手动请求这些权限, 且只要权限组中任意一个权限取得, 则整个权限组的权限均会获得.

### 合理使用

**事实上在很多情况下, 我们都不应该请求任何危险权限.** 而应该使用`intent`唤醒具有权限的应用(如系统自带应用)来执行操作

| 功能                     | Intent                                                       |
| ------------------------ | ------------------------------------------------------------ |
| 拍摄照片                 | `ACTION_IMAGE_CAPTURE`                                       |
| 录制视频                 | `ACTION_VIDEO_CAPTURE`                                       |
| 打开其他应用的媒体或文档 | `ACTION_CREATE_DOCUMENT`<br />`ACTION_OPEN_DOCUMENT`<br />`ACTION_OPEN_DOCUMENT_TREE` |

而上面的这些其实也是不必要的, `Activity Results API`可以帮助我们高效简单的完成这些操作. 详见:[Activity Results 总结和封装 - 可爱怪的窝](https://bytedance.host/activityresults/)

