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.csdn.net/xiaorenwu1206/article/details/49358433