Android 6.0 运行时权限问题 open failed: EACCES (Permission denied)

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_AUDIOMICROPHONE麦克风
BODY_SENSORSSENSORS传感器
ACCESS_COARSE_LOCATIONLOCATION位置
ACCESS_FINE_LOCATION
CAMERACAMERA相机
WRITE_CALENDARCALENDAR日历
READ_CALENDAR
PROCESS_OUTGOING_CALLSPHONE手机
USE_SIP

ADD_VOICEMAIL

WRITE_CALL_LOG

READ_CALL_LOG
CALL_PHONE

READ_PHONE_STATE

GET_ACCOUNTSCONTACTS联系人
WRITE_CONTACTS
READ_CONTACTS
WRITE_EXTERNAL_STORAGESTORAGE存储卡
READ_EXTERNAL_STORAGE
RECEIVE_MMSSMS短信
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

https://blog.csdn.net/u014133119/article/details/80652188

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世君子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值