特性
支持鏈式調用,一句話申請權限,為你省去復雜的邏輯判斷
支持注解回調權限申請成功、失敗
支持Listener方式回調權限申請成功,失敗
支持Rationale,支持權限申請失敗后,用戶勾選了不再提示后提示用戶
引用方法
AndroidStudio使用方法,gradle一句話遠程依賴
compile 'com.yanzhenjie:permission:1.0.3'
Or Maven:
<dependency>
<groupId>com.yanzhenjie</groupId>
<artifactId>permission</artifactId>
<version>1.0.3</version>
<type>pom</type>
</dependency>
Eclipse 下載jar包,或者自行下載源碼。 Eclipse需要自行依賴Support的AppCompat項目。
申請權限就是這么簡單
AndPermission.with(this)
.requestCode(101)
.permission(Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_SMS,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
.send();
只需要在Activity中或者Fragment中直接調用即可,AndPermission自動為你打理好后宮。
方式一:利用Listener方式回調
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// 只需要調用這一句,剩下的AndPermission自動完成。
AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults, listener);
}
private PermissionListener listener = new PermissionListener() {
@Override public void onSucceed(int requestCode) {
if(requeust == 100) { ... }
else if(requestCode == 101) { ... }
}
@Override public void onFailed(int requestCode) {
if(requeust == 100) { ... }
else if(requestCode == 101) { ... }
}
};
方式二:利用注解回調** 只需要重寫Activity/Fragment的一個方法,然后提供一個授權時回調的方法即可:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// 只需要調用這一句,剩下的AndPermission自動完成。
AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);}
// 成功回調的方法,用注解即可,里面的數字是請求時的requestCode。
@PermissionYes(100)
private void getLocationYes() { // 申請權限成功,可以去做點什么了。
Toast.makeText(this, "獲取定位權限成功", Toast.LENGTH_SHORT).show();
}
// 失敗回調的方法,用注解即可,里面的數字是請求時的requestCode。
@PermissionNo(100)
private void getLocationNo() { // 申請權限失敗,可以提醒一下用戶。
Toast.makeText(this, "獲取定位權限失敗", Toast.LENGTH_SHORT).show();
}
只需要上面這么幾句話即可,你就可以大刀闊斧的干了,在總結中提到的各種判斷、復雜的情況AndPermission自動完成。
如果你需要在用戶多次拒絕權限后提示用戶**
AndPermission.with(this)
.requestCode(101)
.permission(Manifest.permission.WRITE_CONTACTS,
Manifest.permission.READ_SMS,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
.rationale(mRationaleListener)
.send();
private RationaleListener mRationaleListener = new RationaleListener() {
@Override
public void showRequestPermissionRationale(int requestCode, final Rationale rationale) {
new AlertDialog.Builder(RationalePermissionActivity.this)
.setTitle("友好提醒")
.setMessage("沒有定位權限將不能為您推薦附近妹子,請把定位權限賜給我吧!")
.setPositiveButton("好,給你", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
rationale.resume();// 用戶同意繼續申請。 }
}) .setNegativeButton("我拒絕", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel(); rationale.cancel(); // 用戶拒絕申請。
} }).show(); }};