简介
- permissionsdispatcher是一个开源项目,用来简化权限申请,Github地址
- 很多教程有点老,拿来使用会发现有很多问题
使用情景
- 多个Activity涉及申请权限,感觉原生权限申请方法十分费劲
- 使用该框架重构代码,增加灵活性和可读性
前期准备工作
- AndroidX简介:Google 2018开发者大会上发布了androidx,其整理了android.support.xxx和google的其他包。
- 自support v7:28开始,大部分support包都会迁移到androidx下,官方建议开发者们尽早将项目转移到androidx下。
- Android Studio提供了从support包迁移至androidx的方法。
- permissionsdispatcher也提供了androidx支持的版本,但是由于笔者略懒,还没有做support到androidx的迁移,所以本文的例子是使用’com.android.support:appcompat-v7:28.0.0’的。
开始使用
第一步:添加依赖
添加依赖也是有坑的,首先我们要考虑版本问题:
- 如果你仍然使用support包的话,那么请使用3.x版本的
- 如果你使用的是androidx的话,那么可以使用4.x版本的,最新版本号可前往github上查看
- 本文使用3.2.0版本
添加完成后Sync,发现报错如下:
遇到报错,那么要做的就是先读懂报错信息,选取一行来看其大概的意思:
Duplicate class android.support.v13.view.DragStartHelper found in modules classes.jar (com.android.support:support-compat:28.0.0) and classes.jar (com.android.support:support-v13:27.0.2)
其大概的意思是:有一个类重复了,在com.android.support:support-compat:28.0.0包中有一个,在com.android.support:support-v13:27.0.2包中也有一个,这样导致了错误。
所以怎么办呢?首先描述问题,将你的描述输入到百度搜索框中即可。
问题描述:android com.android.support包冲突导致的问题,找到这篇博客
刚好这篇博客遇到的问题和我遇到的类似,做如下修改:
重新Sync,错误消除!
第二步:使用方式介绍
主要是几个注解,本文不详细介绍,推荐一篇博文
第三步:代码
首先在AndroidManifest.xml中加入相机权限:<uses-permission android:name="android.permission.CAMERA" />
然后看如下代码:
package com.example.permissiondispatherdemo;
import android.Manifest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
<