Android6.0 在权限上有很大改动,它将权限分为普通权限和危险权限
对于普通权限,直接在 Manifest 文件里声明即可使用;而对于危险权限,除了要在Manifest 文件里声明外,还需要在用到权限的地方,检查 APP 是否已经拥有权限,如果没有要进行申请
这里以读取手机中的照片为例
首先在 Manifest 文件中添加如下配置
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
其次要在需要的地方进行权限判断与申请
//CameraDemoActivity 是activity的名字
if (ContextCompat.checkSelfPermission(CameraDemoActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED){
//有权限的情况
}else{
//没有权限,进行权限申请
//REQ是本次请求的辨认编号,即 requestCode
ActivityCompat.requestPermissions(CameraDemoActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQ);
}
注意:上述代码中 CameraDemoActivity 是 Activity 的名字;REQ是本次请求的辨认编号,即 requestCode。这两个要转换成自己项目中的 Activity 和 requestCode
申请权限后,会有一个回调函数进行处理,即在 Activity 中重写 onRequestPermissionsResult 方法
/***
* 申请权限后的回调函数
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQ){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
//申请权限成功
}else{
//申请权限被拒绝
}
}
}
运行效果如下

普通权限列表
| 权限名称 | 权限作用 |
|---|---|
| ACCESS_LOCATION_EXTRA_COMMANDS | 允许应用程序访问额外的位置提供命令 |
| ACCESS_NETWORK_STATE | 允许程序访问有关GSM网络信息 |
| ACCESS_NOTIFICATION_POLICY | 允许app通知显示在状态栏 |
| ACCESS_WIFI_STATE | 允许程序访问Wi-Fi网络状态信息 |
| BLUETOOTH | 允许程序连接到已配对的蓝牙设备 |
| BLUETOOTH_ADMIN | 允许程序发现和配对蓝牙设备 |
| BROADCAST_STICKY | 允许一个程序广播常用intents |
| CHANGE_NETWORK_STATE | 允许程序改变网络连接状态 |
| CHANGE_WIFI_MULTICAST_STATE | 打开组播功能 |
| CHANGE_WIFI_STATE | 允许程序改变Wi-Fi连接状态 |
| DISABLE_KEYGUARD | 允许程序禁用键盘锁 |
| EXPAND_STATUS_BAR | 允许一个程序扩展收缩在状态栏 |
| GET_PACKAGE_SIZE | 允许一个程序获取任何package占用空间容量 |
| INSTALL_SHORTCUT | 允许在手机桌面上添加快捷方式 |
| INTERNET | 允许程序打开网络套接字 |
| KILL_BACKGROUND_PROCESSES | 允许杀掉进程 |
| MODIFY_AUDIO_SETTINGS | 允许程序修改全局音频设置 |
| NFC | 允许使用NFC |
| READ_SYNC_SETTINGS | 允许程序读取同步设置 |
| READ_SYNC_STATS | 允许程序读取同步状态 |
| WRITE_SYNC_SETTINGS | 允许程序写入同步设置 |
| WAKE_LOCK | 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 |
| VIBRATE | 允许访问振动设备 |
| USE_FINGERPRINT | 允许使用指纹识别 |
| UNINSTALL_SHORTCUT | 允许卸载快捷方式 |
| TRANSMIT_IR | 允许使用设备的红外发射器 |
| SET_WALLPAPER_HINTS | 允许程序设置壁纸hits |
| SET_WALLPAPER | 允许程序设置壁纸 |
| SET_TIME_ZONE | 允许程序设置时间区域 |
| SET_ALARM | 允许程序设置闹铃提醒 |
| REQUEST_INSTALL_PACKAGES | 允许未知应用安装权限 |
| REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | 允许加入白名单(休眠和待机状态) |
| REORDER_TASKS | 允许程序改变Z轴排列任务 |
| RECEIVE_BOOT_COMPLETED | 允许程序接收到 |
危险权限列表
| 权限名称 | 分类 | 作用 |
|---|---|---|
| RECORD_AUDIO | MICROPHONE | 麦克风 |
| BODY_SENSORS | SENSORS | 传感器 |
| ACCESS_COARSE_LOCATION | LOCATION | 位置 |
| ACCESS_FINE_LOCATION | ||
| CAMERA | CAMERA | 相机 |
| WRITE_CALENDAR | CALENDAR | 日历 |
| READ_CALENDAR | ||
| PROCESS_OUTGOING_CALLS | PHONE | 手机 |
| USE_SIP | ||
| ADD_VOICEMAIL | ||
| WRITE_CALL_LOG | ||
| READ_CALL_LOG | ||
| CALL_PHONE | ||
| READ_PHONE_STATE | ||
| GET_ACCOUNTS | CONTACTS | 联系人 |
| WRITE_CONTACTS | ||
| READ_CONTACTS | ||
| WRITE_EXTERNAL_STORAGE | STORAGE | 存储卡 |
| READ_EXTERNAL_STORAGE | ||
| RECEIVE_MMS | SMS | 短信 |
| RECEIVE_WAP_PUSH | ||
| READ_SMS | ||
| RECEIVE_SMS | ||
| SEND |
参考文档:
https://www.jianshu.com/p/b4a8b3d4f587
https://www.cnblogs.com/guanmanman/p/6197148.html
https://www.jianshu.com/p/31cf0cd9cbd1
https://www.jianshu.com/p/8e37e9cf20a5
https://www.cnblogs.com/kondoh/archive/2012/04/20/2459784.html
https://blog.youkuaiyun.com/xiaorenwu1206/article/details/49358433
https://blog.youkuaiyun.com/u014133119/article/details/80652188
7790

被折叠的 条评论
为什么被折叠?



