美文网首页
用Permissions Dispatcher开源库处理权限

用Permissions Dispatcher开源库处理权限

作者: 刘应强 | 来源:发表于2018-01-18 00:28 被阅读0次

1.配置

在app层的build.gradle中

dependencies {

    // Permissions Dispatcher    compile 'com.github.hotchemi:permissionsdispatcher:2.3.1'    annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.1'

}

这种配置需要有个条件:Android Gradle Plugin >= 2.2

2.举例

这个库用到了5个注解:

注解是否必须描述

@RuntimePermissions是注册在Acttivity或者Fragment上

@NeedsPermission是再需要权限的方法上注册

@OnShowRationale否被注解的方法可以提示为什么需要这个权限

@OnPermissionDenied否如果用户拒绝了权限申请那么调用该方法

@OnNeverAskAgain否如果用户选择了不再询问,调用该方法

这个库用到了Annotion Processor,需要用到一个应用编译期间产生的类,这个类的命名是:类名+PermissionsDispatcher。

@RuntimePermissionspublicclassThirdActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);        setContentView(R.layout.activity_third);        findViewById(R.id.button).setOnClickListener(newView.OnClickListener() {@OverridepublicvoidonClick(View v) {                ThirdActivityPermissionsDispatcher.showContactsWithCheck(ThirdActivity.this);            }        });    }@OverridepublicvoidonRequestPermissionsResult(intrequestCode, @NonNull String[] permissions, @NonNullint[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);        ThirdActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);    }@NeedsPermission({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})publicvoidshowContacts() {        Toast.makeText(this,"读取通讯录", Toast.LENGTH_SHORT).show();    }@OnPermissionDenied({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})publicvoidonContactsDenied() {        Toast.makeText(this,"onContactsDenied", Toast.LENGTH_SHORT).show();    }@OnNeverAskAgain({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})publicvoidonContactsNeverAskAgain() {        Toast.makeText(this,"onContactsNeverAskAgain", Toast.LENGTH_SHORT).show();newAppSettingsDialog.Builder(this)                .setTitle("请求权限")                .setRationale("需要开启启用相机的权限才能继续下去!")                .build()                .show();    }@OnShowRationale({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})publicvoidshowRationaleContacts(finalPermissionRequest request) {//        Toast.makeText(this, "showRationaleContacts", Toast.LENGTH_SHORT).show();newAlertDialog.Builder(this)                .setPositiveButton("继续",newDialogInterface.OnClickListener() {@OverridepublicvoidonClick(@NonNull DialogInterface dialog,intwhich) {                        request.proceed();                    }                })                .setNegativeButton("取消",newDialogInterface.OnClickListener() {@OverridepublicvoidonClick(@NonNull DialogInterface dialog,intwhich) {                        request.cancel();                    }                })                .setCancelable(false)                .setMessage("需要通讯录权限")                .show();    }}

Demo: https://download.csdn.net/download/android2me/9810618

相关文章

网友评论

      本文标题:用Permissions Dispatcher开源库处理权限

      本文链接:https://www.haomeiwen.com/subject/uwvpoxtx.html