西施欢迎会-哔哩哔哩冲产颈濒颈产颈濒颈
推荐菜品:油底肉
2024年12月13日,Android6.0运行时权限的处理及解决办法2016-05-14 10:17·行痴无畏最近一直在分享一些干货,但是最近我也在反思,我感觉应该分享一些用户遇到的问题,有很多开发者私聊我一些问题,我感觉我应该在回答了他们之后,整理成技术文章再分享,这样的互动才更有意义。我想既然有些开发者遇到了,可能还会有很多程序员会遇到,所以互动回答的方式,更能帮助大家解决问题。希望大家可以积极交流。问题背景随着今年Android6.0系统的国产ROM终于来了,适配6.0已经势在必行了。最近也有很多开发者在微信私聊和咨询我遇到的问题,其中有一些都是对于Android6.0权限的,我感觉有必要写一篇文章来解惑了。Runtime Permissions在6.0系统的几个变化中,还是比较大的。如果你在Android6.0系统的手机上如果遇到了这样的错误,必定跟其运行时权限有关。open failed: EACCES (Permission denied)权限变化在Adroid系统6.0以前,权限的处理是在App安装时授权,授权完了才能完成相关的安装。而在6.0的系统上,是先安装App,在安装完之后,在使用相关权限的操作时,才会弹出权限的提示框,用户同意授权之后才能正常使用。谷歌这样做,可以让用户更加清醒的认识相关权限的使用,在一定程度上更加人性化和保护了用户的隐私。谷歌官方将权限分为了两类,一个是正常权限(Normal Permissions),这类权限不涉及用户隐私,是不需要用户进行授权的,比如访问网络,手机震动等。还有一类是危险权限(Dangerous Permissions),一般是涉及到用户隐私的,需要用户进行授权,比如操作SD卡的写入,相机,录音等。Normal Permissions:ACCESS_LOCATION_EXTRA_COMMANDSACCESS_NETWORK_STATEACCESS_NOTIFICATION_POLICYACCESS_WIFI_STATEBLUETOOTHBLUETOOTH_ADMINBROADCAST_STICKYCHANGE_NETWORK_STATECHANGE_WIFI_MULTICAST_STATECHANGE_WIFI_STATEDISABLE_KEYGUARDEXPAND_STATUS_BARGET_PACKAGE_SIZEINSTALL_SHORTCUTINTERNETKILL_BACKGROUND_PROCESSESMODIFY_AUDIO_SETTINGSNFCREAD_SYNC_SETTINGSREAD_SYNC_STATSRECEIVE_BOOT_COMPLETEDREORDER_TASKSREQUEST_INSTALL_PACKAGESSET_ALARMSET_TIME_ZONESET_WALLPAPERSET_WALLPAPER_HINTSTRANSMIT_IRUNINSTALL_SHORTCUTUSE_FINGERPRINTVIBRATEWAKE_LOCKWRITE_SYNC_SETTINGSDangerous Permissions:解决方法看完官方文档,还好解决方案还不是太难,也不是非常麻烦,当然和以前相比还是有一点繁琐的。废话不多说了,解决方案如下。检查系统版本private boolean canMakeSmores(){return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);}检查系统版本的原因,显而易见,如果是系统6.0及以上的,需要采用新的权限授权方法。申请授权举个例子,如果你需要拍照操作,那么你就应该在拍照操作的地方,先加上权限申请授权。方式如下:String[] perms = {"android.permission.CAMERA"};int permsRequestCode = 200;requestPermissions(perms, permsRequestCode);授权回调处理@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){switch(permsRequestCode){case 200:boolean cameraAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;if(cameraAccepted){//授权成功之后,调用系统相机进行拍照操作等}else{//用户授权拒绝之后,友情提示一下就可以了}break;}}进一步处理和完善通过上面可以看出,只检查系统版本了,如果授权过的权限,还需要再次去授权么?我们的判断其实可以更完善一下,比如:private boolean hasPermission(String permission){if(canMakeSmores()){return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);}return true;}上面这段代码,是先判断系统版本,再判断这个权限是否已经授权过,这样就不会重复了。还有就是比如如果用户第一次已经拒绝过这个权限,下次再操作时怎么办呢?还有一个更人性化的方法就是:shouldShowRequestPermissionRationale(@NonNull String permission)这个方法的作用:第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale() 返回 false设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale() 返回 false完结到这里就基本介绍完结了,希望能够对大家有所帮助,能够进一步理解Android6.0运行时权限的使用。继续加油吧,学习永无止境。移动开发者的聚集地,公众号“非著名程序员”,每天一篇原创技术分享和移动互联网知识分享,微信公众号:smart_android ,头条号和百度百家账号都是“非著名程序员”。
西施欢迎会-哔哩哔哩冲产颈濒颈产颈濒颈
黑客380的性价比还是可以的采用内走线铝合金车架变速套件是蓝图前拨+禧玛诺后拨混搭这两项在这个价位并不算常见虽然只有21速但是普通骑行完全够用机械碟刹+避震前叉也是这个价位的标配
“因为眼睛视物偏斜的问题,我经常被面试官误认为是态度不端正。”在江门爱尔新希望眼科医院的诊室内,张女士讲述起在面试求职时遇到的影响,满是烦恼。李冬莲医生为张女士进行手术,术后眼位已正,恢复良好,自信心也回来了。苏炳添缺席!另一位老将五战奥运,她的目标是……