PermissionsDispatcher的使用

PermissionsDispatcher的使用

Android6.0以上的权限问题,通过简单的注释就能获取权限,非常方便快捷。

PermissionsDispatcher库的GitHub地址 https://github.com/hotchemi/PermissionsDispatcher

1. 添加库
compile('com.github.hotchemi:permissionsdispatcher:2.4.0') {
    // if you don't use android.app.Fragment you can exclude support for them
    exclude module: "support-v13"
}
annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:2.4.0"
2. @RuntimePermissions 注释在需要权限的Activity或Fragment 开头
@RuntimePermissions
public class MainActivity extends AppCompatActivity{}
3. @NeedsPermission 注释在需要权限的方法上后面,需要传入所需的权限,多个权限用逗号隔开
@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE})
public void saveBitmap() {
   final Bitmap bitmap = Bitmap.createBitmap(currentImageView.getDrawingCache());
    if (bitmap == null) {
        return;
    }
}
4. @OnShowRationale 注释在向用户解释为什么需要这个权限的方法上。会弹出权限对话框
/**
 * @OnShowRationale 注释在向用户解释为什么需要这个权限的方法上。
 * @param request 调用系统的权限管理AlertDialog
 *  request.proceed(); 调出系统申请权限的弹窗会执行@NeedsPermission对应的方法
    request.cancel(); 会执行@OnPermissionDenied对应的方法
 */
@OnShowRationale({Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE})
void showRationaleForRecord(final PermissionRequest request){

    new AlertDialog.Builder(this)
            .setPositiveButton("好的", new DialogInterface.OnClickListener() {
                @Override public void onClick(DialogInterface dialog, int which) {
                    request.proceed();
            .setNegativeButton("不给", new DialogInterface.OnClickListener() {
                @Override public void onClick(DialogInterface dialog, int which) {
                    request.cancel();
                }
            }) .setCancelable(false)
            .setMessage("保存文件需读取本地存取权限")
            .show();
}
5. @OnPermissionDenied 被拒绝后调用的方法
@OnPermissionDenied({Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE})
void showRecordDenied(){
    Toast.makeText(this,"拒绝读写本地存取权限将无法保存",Toast.LENGTH_SHORT).show();
}
6. @OnNeverAskAgain 勾选了不再提示禁止后调用的方法
@OnNeverAskAgain({Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE})
void onSaveBitmapAskAgain() {
    Toast.makeText(this,"您已经禁止了读写本地SD权限,是否现在去开启",Toast.LENGTH_SHORT).show();
}
7. Build -MakeProject 会生成 ImageSelectActivityPermissionsDispatcher 的一个类。

当需要权限的时候,调用 xxWithCheck(this);

case R.id.tv_click_01://保存
ImageSelectActivityPermissionsDispatcher.saveBitmapWithCheck(this);
8. 最后还要复写下onRequestPermissionsResult这个方法,里面写上生成类的onRequestPermissionsResult,如:
 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);        ImageSelectActivityPermissionsDispatcher.onRequestPermissionsResult(this,requestCode,grantResults);
}
by: 爱自由

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值