android 許可權庫EasyPermissions
眾所周知,在android 6.0之後,如果應用程式需要危險許可權,則使用者必須明確嚮應用授予該許可權。今天推薦一個許可權相關的庫EasyPermissions。
以相機許可權來看,先看下不使用庫的情況下的授權方式。
透過ContextCompat.checkSelfPermission()
去判斷有沒有許可權的,沒有ActivityCompat.requestPermissions()
去請求許可權,有的話則直接呼叫拍照的
private void requestPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //許可權判斷,沒有就去請求所需許可權,傳參 需要申請的許可權(可以多個), requestCode請求碼用於結果回撥裡判斷 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE); }else { //有許可權直接拍照,6.0以下的手機拍照走這裡 takePhoto(); } }private void takePhoto(){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent); }
呼叫requestPermissions()
方法後需要在Activity中重寫onRequestPermissionsResult()
來獲取回撥結果。
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (PERMISSIONS_REQUEST_CODE == requestCode) { for (int x : grantResults) { if (x == PackageManager.PERMISSION_DENIED) { //許可權拒絕了 return; } } takePhoto(); } }
使用EasyPermissions 來請求許可權
依舊以拍照舉例
同樣需要在重寫onRequestPermissionsResult()
,這裡就直接將請求結果傳遞EasyPermission 來處理。
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); }
EasyPermissions.hasPermissions(Context context,String... perms)
用於檢查許可權是否授權,第二個引數可傳多個許可權值。
EasyPermissions.requestPermissions(context,String rationale,int requestCode,String... perms)
用於請求許可權,rationale 是提示文字,requestCode 請求碼,最後是多個許可權值。
這裡使用了@AfterPermissionGranted
註解。
@AfterPermissionGranted(PERMISSIONS_REQUEST_CODE)private void requestPermission(){ String[] perms = {Manifest.permission.CAMERA}; //許可權判斷,第一次彈出系統的授權提示框 if (EasyPermissions.hasPermissions(this, perms)) { //@AfterPermissionGranted 有許可權直接執行 todo... }else { //沒有許可權的話,先提示,點確定後彈出系統的授權提示框 EasyPermissions.requestPermissions(this, "拍照過程需要用到相機許可權", PERMISSIONS_REQUEST_CODE, perms); } }
EasyPermissions 庫提供了許可權請求的回撥,activity實現 EasyPermissions.PermissionCallbacks
重寫兩個方法回撥。
/** * 允許許可權成功後觸發 */@Overridepublic void onPermissionsGranted(int requestCode, List<String> perms) { }/** * 禁止許可權後觸發 */@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) { if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { //在許可權彈窗中,使用者勾選了'不在提示'且拒絕許可權的情況觸發,可以進行相關提示。 } }
使用@AfterPermissionGranted
註解,當許可權請求被使用者允許後,會根據requestCode來直接執行許可權允許後的程式碼。
...if (EasyPermissions.hasPermissions(this, perms)) { //加了@AfterPermissionGranted,授權成功後偶直接執行裡面程式碼} ...
作者:程式猿tx
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2821644/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- EasyAndroid基礎整合元件庫之:EasyPermissions 動態許可權申請庫Android元件
- Android系統許可權和root許可權Android
- android許可權大全Android
- Android permission許可權Android
- android動態許可權到自定義許可權框架Android框架
- Android6.0動態許可權管理庫Android
- Android許可權管理之Permission許可權機制及使用Android
- Android許可權適配Android
- Android安全—許可權模型Android模型
- Android系統許可權Android
- android 許可權問題Android
- Android SELinux許可權AndroidLinux
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 許可權之選單許可權
- android 許可權元件設計Android元件
- Xamarin Android許可權請求Android
- Android之SharedPreferences許可權Android
- Android 許可權清單大全Android
- Android許可權最佳實踐Android
- MySQL資料庫許可權體系入門(5)---管理資料庫許可權MySql資料庫
- Android許可權管理之Android 6.0執行時許可權及解決辦法Android
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 資料庫的許可權管理資料庫
- 許可權系統:一文搞懂功能許可權、資料許可權
- Android動態許可權總結Android
- Android許可權處理分類Android
- Android 中的危險許可權Android
- android強制申請許可權Android
- Android 6.0許可權管理筆記Android筆記
- Android 廣播許可權保護Android
- Android property屬性許可權新增Android
- ylbtech-許可權管理-資料庫設計-功能許可權管理技術資料庫
- MySQL資料庫許可權體系入門(4)---管理全域性許可權MySql資料庫
- Linux-許可權管理(ACL許可權)Linux
- AIX 的許可許可權(轉)AI
- android 6.0許可權機制的簡單封裝(支援批量申請許可權)Android封裝