android許可權請求框架
阿新 • • 發佈:2018-12-19
封裝的許可權請求框架,自己練手使用這一個中有兩套框架使用方法不同,可按需使用。
此文主要說明如何引用及使用方法
How to
To get a Git project into your build:
Step 1. Add the JitPack repository to your build file
gradle maven sbt leiningen Add it in your root build.gradle at the end of repositories:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
Step 2. Add the dependency
dependencies {
implementation 'com.github.gaof5:GfPermission:v1.0'
}
方法一:運用註解、實現PermissionCallback方式配合使用,用於某activity進行請求,步驟2、3可寫在基類中方便使用
1.在需要請求許可權的操作中新增此方法
//註解用於申請許可權後再重複執行此方法,CAMERA_CODE為請求標識碼 @IPermission(CAMERA_CODE) private void cameraTask() { //先判斷是否已申請此許可權 if(PermissionManager.hasPermission(this, Manifest.permission.CAMERA)){ //如果已申請許可權則執行操作 Toast.makeText(this,"相機許可權拿到拍照",Toast.LENGTH_SHORT).show(); }else {//沒有許可權申請 PermissionManager.requestPermissions(this,"需要相機許可權拍照",CAMERA_CODE,Manifest.permission.CAMERA); } }
2.在activity中重新onRequestPermissionsResult方法,呼叫 PermissionManager.onRequestPermissionResult 方法
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); PermissionManager.onRequestPermissionResult(requestCode,permissions,grantResults,this); }
3.進行完1、2步驟完後直接通過許可權申請會直接執行cameraTask()方法即執行此段程式碼:
Toast.makeText(this,"相機許可權拿到拍照",Toast.LENGTH_SHORT).show();
如使用者拒絕許可權,並且勾選了不再詢問,則需要Activity實現PermissionCallback
@Override
public void onPermissionGranted(int requestCode, List<String> perms) {
//已同意權限
}
@Override
public void onPermissionDenied(int requestCode, List<String> perms) {
//檢查使用者是否拒絕過許可權,並且點選了 不再詢問
if(PermissionManager.somePermissionPermanentlyDenied(this,perms)){
//顯示一個對話方塊告訴開啟 此操作可自行處理
new AppSettingDialog.Builder(this).setTitle("許可權申請")
.setRationale("需要請求")
.setNegativeButton("取消")
.setPositiveButton("設定")
.setCancelListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).build().show();
}
}
方法二:方法二接入流程有些肯覺得複雜,雖然寫入基類後使用還好。因此重做了一套框架使用直接呼叫,最終操作在回撥中進行
此方法無需先判斷是否已申請了許可權,許可權請求成功都會回撥setPermissionCallback onPermissionGranted方法
String[] perms=new String[]{Permission.ACCESS_FINE_LOCATION,Permission.READ_CONTACTS};
GfPermission.with(this)
.setPermissions("需要定位、聯絡人許可權傳送位置",LOCATION_CONTACTS_CODE,perms)
//如已設定.rationale()拒絕許可權並勾選了不再詢問,則會執行rationale中回撥,不設定.rationale()會預設彈框引導設定
// .rationale(new RationaleCallback() {
// @Override
// public void onPermissionDenied(int requestCode, List<String> perms) {
// Toast.makeText(MainActivity.this,"不再詢問處理",Toast.LENGTH_SHORT).show();
// }
// })
.setPermissionCallback(new PermissionCallback() {
@Override
public void onPermissionGranted(int requestCode, List<String> perms) {
//拿到許可權進行自己的操作
Toast.makeText(MainActivity.this,"定位、聯絡人許可權拿到傳送位置",Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionDenied(int requestCode, List<String> perms) {
//使用者拒絕許可權後的回撥
//1.如使用者勾選了不再詢問,如未設定.rationale()則會預設彈框引導設定,不用在此回撥操作
//如已設定.rationale()則會執行rationale中回撥
//2.使用者未勾選了不再詢問,框架只會回撥此方法,不會進行其他操作
Toast.makeText(MainActivity.this,"拒絕許可權",Toast.LENGTH_SHORT).show();
}
}).request();//request()發起請求在最後呼叫
Ps:練手框架不喜勿噴