PermissionsDispatcher的使用方法

来源:互联网 发布:各个数据库的优缺点 编辑:程序博客网 时间:2024/05/17 09:23

0.在AndroidManifest.xml文件中声明要用到的所有权限

<uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.READ_CONTACTS"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/>    ...

1.在工程的build.gradle中加入以下内容:

allprojects {    repositories {        jcenter()        mavenCentral()    }}

2.在当前module的build.gradle中加入以下内容:

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

3.使用dispather提供的注解来简化工作:

提供的注解有以下几种:
这里写图片描述

其中@RuntimePermissions和@NeedsPermission是必须要用的,其他可选。注意:被注解的方法不能是private

4.具体使用方法

4.1首先把需要的注解都加上

@RuntimePermissionspublic class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);}@Overridepublic void onRequestPermissionsResult(int requestCode,  String[] permissions, int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);}    @NeedsPermission(Manifest.permission.CAMERA)    void showCamera() {    }    @OnShowRationale(Manifest.permission.CAMERA)    void showRationaleForCamera(final PermissionRequest request) {    }    @OnPermissionDenied(Manifest.permission.CAMERA)    void showDeniedForCamera() {    }    @OnNeverAskAgain(Manifest.permission.CAMERA)    void showNeverAskForCamera() {    }}

4.2编译

Build->Make project或者Ctr+F9

通过上面编译以后,会生成一个[Activity名]+[PermissionsDispatcher]的类,可以在以下目录查看:
这里写图片描述

4.3使用生成的dispatcher类

 @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_camera:                MainActivityPermissionsDispatcher.showCameraWithCheck(this);                break;            case R.id.btn_contact:                MainActivityPermissionsDispatcher.showContactsWithCheck(this);                break;        }    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        MainActivityPermissionsDispatcher.onRequestPermissionsResult(this,requestCode,grantResults);    }

5.总结

其实这个dispather就是对动态权限处理的那些操作进行了封装,通过查看生成的MainActivityPermissionsDispatcher文件就可以验证这一点。这里的权限说的是危险权限,普通权限只用在Manifest中声明就可以了。

0 0
原创粉丝点击