在app的build.gradle文件的dependencies中,添加依赖:

implementation 'pub.devrel:easypermissions:1.3.0'
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast; import java.util.List; import pub.devrel.easypermissions.AfterPermissionGranted;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions; public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks{ private static final int RC_LOCATION = 100; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//进来之后,手动调用申请权限的方法,
//建议在用到相关功能的时候,才去请求相关权限,提高用户体验
RequestLocationAndCallPermission();
} //带有这个注释的方法,会在某一次请求的所有权限都通过后,才回调
@AfterPermissionGranted(RC_LOCATION)
private void RequestLocationAndCallPermission() {
// Toast.makeText(this, "RequestLocationAndCallPermission,out", Toast.LENGTH_SHORT).show();
String[] perms = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.CALL_PHONE};
if (EasyPermissions.hasPermissions(this, perms)) {
//用户同意了权限
//进行后面的操作
} else {
//用户拒绝了权限
//正常情况(没有勾选《拒绝后不再询问》)会先弹下面这个框一,点击确定会出现系统的框二
//非正常情况(有勾选《拒绝后不再询问》)框一和系统的框二都不会出现
//无论哪种情况,最终,都会根据用户的选择同意还是拒绝,而回调对应的方法;(勾选过《拒绝后不再询问》,这种情况也是属于拒绝,所以他也会走拒绝的回调)
EasyPermissions.requestPermissions(this, "请求定位权限和拨打电话权限",RC_LOCATION, perms);
}
} @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// Forward results to EasyPermissions
// 把请求权限的操作转交给EasyPermissions
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
} //一次请求中,只要有一个权限允许了,就会走这个方法
@Override
public void onPermissionsGranted(int requestCode, List<String> perms) {
//用户同意了部分权限,你可以对权限做判断,根据通过的权限,开放相应功能
} //一次请求中,只要有一个权限拒绝了,就会走这个方法
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
//如果曾经有勾选《拒绝后不再询问》,则会进入下面这个条件
//建议做一个判断,判断用户是不是刚刚勾选的《拒绝后不再询问》,如果是,就不做下面这个判断,而只进行相应提示,这样就可以避免再一次弹框,影响用户体验
//否则就是用户可能在之前曾经勾选过《拒绝后不再询问》,那就可以用下面这个判断,强制弹出一个对话框
if(EasyPermissions.somePermissionPermanentlyDenied(this,perms)){
//但是这个api有个问题,他会显示一个对话框,但是这个对话框,点空白区域是可以取消的,如果用户点了空白区域,你就没办法进行后续操作了
new AppSettingsDialog.Builder(this).build().show();
} } @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//EasyPermissions会有一个默认的请求码,根据这个请求码,就可以判断是不是从APP的设置界面过来的
if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) {
// Do something after user returned from app settings screen, like showing a Toast.
//在这儿,你可以再对权限进行检查,从而给出提示,或进行下一步操作
Toast.makeText(this,"从设置中返回", Toast.LENGTH_SHORT).show();
}
}
}
注意,要在清单文件中,添加权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>

官方网站: https://github.com/googlesamples/easypermissions

												

EasyPermissions的流程的更多相关文章

  1. android 权限库EasyPermissions

    文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA 众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予 ...

  2. Android框架式编程之EasyPermissions

    EasyPermission库是一个谷歌官方提供的简化基本的系统权限逻辑的库,可用于在Android M或者更高版本上. 官方项目地址:https://github.com/googlesamples ...

  3. 【Android开发】EasyPermissions 请求权限

    安卓6.0以后,开发应用的时候,仅在AndroidManifest.xml中申请权限已经不可以了,需要在代码中动态申请. 现在看一个google推出的机制:EasyPermissions 引入步骤: ...

  4. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

  5. 基于netty http协议栈的轻量级流程控制组件的实现

    今儿个是冬至,所谓“冬大过年”,公司也应景五点钟就放大伙儿回家吃饺子喝羊肉汤了,而我本着极高的职业素养依然坚持留在公司(实则因为没饺子吃没羊肉汤喝,只能呆公司吃食堂……).趁着这一个多小时的时间,想跟 ...

  6. 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[下]:管道是如何构建起来的?

    在<中篇>中,我们对管道的构成以及它对请求的处理流程进行了详细介绍,接下来我们需要了解的是这样一个管道是如何被构建起来的.总的来说,管道由一个服务器和一个HttpApplication构成 ...

  7. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  8. 8、Struts2 运行流程分析

    1.流程分析: 请求发送给 StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 ...

  9. Hawk 6. 高级话题:子流程系统

    子流程的定义 当流程设计的越来越复杂,越来越长时,就难以进行管理了.因此,采用模块化的设计才会更加合理.本节我们介绍子流程的原理和使用. 所谓子流程,就是能先构造出一个流程,然后被其他流程调用.被调用 ...

随机推荐

  1. python网络编程(七)

    应用:模拟QQ聊天 客户端参考代码 #coding=utf-8 from socket import * # 创建socket tcpClientSocket = socket(AF_INET, SO ...

  2. Shuffle 洗牌 [AHOI 2005]

    Description 为了表彰小联为 Samuel 星球的探险所做出的贡献,小联被邀请参加 Samuel 星球近距离载人探险活动. 由于 Samuel 星球相当遥远,科学家们要在飞船中度过相当长的一 ...

  3. Java 多线程 同步和异步

    同步和异步通常用来描述一次方法调用.一旦开始调用同步方法,调用者必须等到方法调用返回后,才能执行后续操作.一旦开始调用异步方法,方法调用会立即返回,调用者可以执行后续操作.异步方法会在另外一个线程中真 ...

  4. NodeJS Stream流

    NodeJS Stream流 流数据在网络通信中至关重要,nodeJS用Stream提供了一个抽象接口,node中有很多对象实现了这个接口,提供统一的操作体验 基本流类型 NodeJS中,Stream ...

  5. Stack的源码分析和应用实例

    1.Stack介绍 Stack是栈.它的特性是:先进后出(FILO:First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实 ...

  6. java中 Java.lang.Long.parseLong()方法

    这是在刷杭电一道水题中遇到的,当时用java没思路,便查了查题解,用到了Java.lang.Long.parseLong()方法 题目链接:http://acm.hdu.edu.cn/showprob ...

  7. java解决手机上传竖拍照片旋转90\180\270度问题

    <dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extracto ...

  8. mysql [索引优化] -- in or替换为union all

    一个文章库,里面有两个表:category和article.category里面有10条分类数据.article里面有 20万条.article里面有一个"article_category& ...

  9. /debug/requests is already registered. You may have two independent copies of golang.org/x/net/trace in your binary, trying to maintain separate state. This may involve a vendored copy of golang.org/x

    找到问题就很好解决了,直接百度  go依赖管理-govendor go get -u github.com/kardianos/govendor 先获取这个,然后将govendor.exe放入path ...

  10. git操作中出现Unlink of file '......' failed. Should I try again?

    在操作git中有时候会提示 Unlink of file '......' failed. Should I try again? 原因是你工作目录有某些文件正在被程序使用,这个程序多半是Idea,V ...