PermissionDispatcher 运行时权限框架
第一步在app的build.gradle文件中添加:
dependencies {
// PermissionDispatcher 框架的使用
implementation 'com.github.hotchemi:permissionsdispatcher:2.1.3'
annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.1.3'
implementation 'com.android.support:support-v4:28.0.0'
}
在activity中
package com.xiaozhuyisheng.jinjiedemos.activity; import android.Manifest;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.view.View;
import android.widget.Toast; import com.xiaozhuyisheng.jinjiedemos.BaseActivity;
import com.xiaozhuyisheng.jinjiedemos.R; import permissions.dispatcher.NeedsPermission;
import permissions.dispatcher.OnNeverAskAgain;
import permissions.dispatcher.OnPermissionDenied;
import permissions.dispatcher.OnShowRationale;
import permissions.dispatcher.PermissionRequest;
import permissions.dispatcher.RuntimePermissions; // 必须的注解,它用来注册一个Activity或Fragment使他们可以处理权限
@RuntimePermissions
public class PermissionDemoActivity extends BaseActivity { /**
* @RuntimePermissions:必须的注解,它用来注册一个Activity或Fragment使它们可以处理权限
* @NeedsPermission:必须的注解,在需要获取权限的地方注解,用来获取权限
* @OnShowRationale:提示用户为何要开启权限,在用户选择拒绝后,再次需要访问该权限时调用
*@OnPermissionDenied:用户选择拒绝时的提示
* @OnNeverAskAgain:用户选择不再询问后的提示
*/ @Override
protected int initLayoutID() {
return R.layout.activity_permission;
} @Override
protected void initLogic() {
// 拨打电话
findViewById(R.id.btnCall).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PermissionDemoActivityPermissionsDispatcher.callWithCheck(PermissionDemoActivity.this);
}
});
} @NeedsPermission(Manifest.permission.CALL_PHONE)
// 在需要获取权限的地方注释
void call() {
Intent intent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:" + "1337196838");
intent.setData(data);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
startActivity(intent);
} // 提示用户为何要开启权限
@OnShowRationale(Manifest.permission.CALL_PHONE)
void showWhy(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage("拨打电话时需要该权限")
.setPositiveButton("知道了", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 再次执行权限请求
request.proceed();
}
})
.show();
} // 用户选择拒绝时的提示
@OnPermissionDenied(Manifest.permission.CALL_PHONE)
void showDenied() {
Toast.makeText(this,"用户选择拒绝时的提示",Toast.LENGTH_LONG).show();
} // 用户选择不再询问后的提示
@OnNeverAskAgain(Manifest.permission.CALL_PHONE)
void showNotAsk() {
new AlertDialog.Builder(this)
.setMessage("该功能需要拨打电话")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) { }
})
.show();
} @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionDemoActivityPermissionsDispatcher.onRequestPermissionsResult(this,requestCode,grantResults);
}
}
其中:
PermissionDemoActivityPermissionsDispatcher 类重新编译后自动生成
PermissionDispatcher 运行时权限框架的更多相关文章
- 运行时权限请求框架easypermissions
前言 之前使用过AndPermission权限申请库,当开发者执行有权限的代码发生异常时,AndPermission会抓到异常并回调到失败中,这里要注意的是会抓到任何异常,不仅仅是没有权限时的异常. ...
- Android 6.0 运行时权限处理完全解析
一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...
- 谈谈Android 6.0运行时权限理解
前言 谷歌在2015年8月份时候,发布了Android 6.0版本,代号叫做“棉花糖”(Marshmallow ),其中的很大的一部分变化,是在用户权限授权上,或许是感觉之前默认授权的不合理,现在6. ...
- DeviceUuidFactory【获取设备唯一标识码的UUID(加密)】【需要运行时权限的处理的配合】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于An ...
- Android 6.0 运行时权限处理完全解析 (摘抄)
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663: 本文出自:[张鸿洋的博客] 一.概述 随着Android 6. ...
- - Permission 运行时权限 总结 翻译 MD
目录 目录 对运行时权限的一些理解 运行时权限使用案例 开源库:PermissionsDispatcher 注解 使用案例 使用步骤 测试代码 自动生成的类 官方文档:请求权限 Add permiss ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- Android M Permission 运行时权限 学习笔记
Android M Permission 运行时权限 学习笔记 从Android 6.0开始, 用户需要在运行时请求权限, 本文对运行时权限的申请和处理进行介绍, 并讨论了使用运行时权限时新老版本的一 ...
随机推荐
- 深入浅出mybatis之启动详解
深入浅出mybatis之启动详解 MyBatis功能丰富,但使用起来非常简单明了,今天我们来追踪一下它的启动过程. 目录 如何启动MyBatis 如何使用MyBatis MyBatis启动过程 如何启 ...
- Pandas时间处理的一些小方法
一.以下有两种方式可以创建一个Timestamp对象: 1. Timestamp()的构造方法 import pandas as pd from datetime import datetime as ...
- 树链剖分详解(洛谷模板 P3384)
洛谷·[模板]树链剖分 写在前面 首先,在学树链剖分之前最好先把 LCA.树形DP.DFS序 这三个知识点学了 emm还有必备的 链式前向星.线段树 也要先学了. 如果这三个知识点没掌握好的话,树链剖 ...
- JAVA进阶11
间歇性混吃等死,持续性踌躇满志系列-------------第11天 1.ArrayList package cn.intcast.demo11; import java.util.ArrayList ...
- 重新定义Pytorch中的TensorDataset,可实现transforms
class TensorsDataset(torch.utils.data.Dataset): ''' A simple loading dataset - loads the tensor that ...
- CF1119C Ramesses and Corner Inversion
题目地址:CF1119C Ramesses and Corner Inversion 将两个矩阵异或起来,为 \(1\) 的位置就是需要修改的位置 注意到每一次操作都会导致两行和两列上有两个数被修改 ...
- EF6 CodeFirst使用MySql
如何使用EF CodeFirst连接MySql数据库? 环境:VS2015.Win7..NetFramework4.5.2.MySql5.6 一.基本操作 1.创建MVC5项目:ZmsoftsWebM ...
- centos禁止与开启ping设置
禁止ping: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 允许ping: echo 0 > /proc/sys/net/ipv4/i ...
- 推荐一款中国风React组件
最近看这个中国风的组件在掘金也火了一段时间,看了有几天了,也体验了下,感觉还不错,所以准备来安利下 项目地址:https://github.com/zhui-team/zhui 使用手册请参考:htt ...
- 布思算法Java实现
public String multiply(String Q,String M){ char Q0 = '0'; String A = get01(Q.length(),"0") ...