Android 6.0权限问题
生活随笔
收集整理的這篇文章主要介紹了
Android 6.0权限问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android 6.0 open failed: EACCES (Permission denied)
?
對于6.0+權限問題,報錯如上:
?
解決方案:
Android 6.0 (Marshmallow).?添加新的權限模型,需要在運行時動態獲取所需要的權限。
首先判斷手機系統版本是否在6.0+然后才是支持運行時動態獲取權限:
?
private boolean canMakeSmores(){return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1);}?
然后是運行時獲取權限的操作:
?
String[] perms = {"android.permission.RECORD_AUDIO", "android.permission.CAMERA"};int permsRequestCode = 200; requestPermissions(perms, permsRequestCode);requestPermissions這個方法是Activity的方法,然后在onRequestPermissionResult里面拿到權限授予的回調結果:@Overridepublic void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){switch(permsRequestCode){case 200:boolean audioAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED;boolean cameraAccepted = grantResults[1]==PackageManager.PERMISSION_GRANTED;break;}}?
?
下面這個方法可以獲取用戶是不是已經授予某些特殊的權限:
?
?
private boolean hasPermission(String permission){if(canMakeSmores()){return(checkSelfPermission(permission)==PackageManager.PERMISSION_GRANTED);}return true;}?
如果用戶已經授權過了這些權限,系統不會記住的,需要我們自己記住這些。
private boolean shouldWeAsk(String permission){return (sharedPreferences.getBoolean(permission, true));}private void markAsAsked(String permission){sharedPreferences.edit().putBoolean(permission, false).apply;}?
?
同一個頁面,可能多次需要某些權限,切記不要重復讓用戶授權
?
private ArrayList findUnAskedPermissions(ArrayList wanted){ArrayList result = new ArrayList<~>();for(String perm : wanted){if(!hasPermission(perm) && shouldWeAsk(perm)){result.add(perm);}}return result;}?
?
轉自:http://www.captechconsulting.com/blogs/runtime-permissions-best-practices-and-how-to-gracefully-handle-permission-removal
總結
以上是生活随笔為你收集整理的Android 6.0权限问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么会做梦梦到做羞羞的事
- 下一篇: 孕妇梦到头上长虱子是胎梦吗