封裝的權限請求框架,自己練手使用這一個中有兩套框架使用方法不同,可按需使用。
此文主要說明如何引用及使用方法
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:練手框架不喜勿噴