yanzhenjie:permission:1.0.5 使用
权限流程图:
第一次弹出 选择拒绝-》弹出提醒对话框改权限功能-》 确定拒绝是 关闭当前页面
-》 确定拒绝否 --》继续申请该权限
第二次弹出 选择绝对不允许-》 弹出设置告诉用户需要在设置中打开权限-》 点击确定跳入设置中
第三次: 弹出跳入设置对话框,用户手动在设置中打开
compile 'com.yanzhenjie:permission:1.0.5'
========================================================================
package com.denganzhi.permission;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;
public class PermissionActivity extends AppCompatActivity {
ImageView permission_bitmap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
permission_bitmap = (ImageView)findViewById(R.id.permission_bitmap);
// 开始
sendPermeission();
}
// 权限测试使用
private String iMei="";
public void readImg(View view){
if (ActivityCompat.checkSelfPermission(PermissionActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
//没有权限
Toast.makeText(PermissionActivity.this,"imei:没有权限",Toast.LENGTH_SHORT).show();
}else {
//有权限
iMei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
Toast.makeText(PermissionActivity.this,"imei:"+iMei,Toast.LENGTH_SHORT).show();
}
}
// 1.第一次弹出
private void sendPermeission(){
AndPermission.with(this).requestCode(100).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .send();
}
// 2.第一次弹出选择允许,继续申请其他权限
// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionYes(100)
private void getLocationYes(List<String> grantedPermissions) {
// TODO 申请权限成功。
AndPermission.with(this).requestCode(101).permission(Manifest.permission.READ_PHONE_STATE) .send();
}
// 申请第二个权限
@PermissionYes(101)
private void gePhoneStatYes(List<String> grantedPermissions) {
// TODO 申请权限成功。
Toast.makeText(PermissionActivity.this,"读取手机卡状态!!!",Toast.LENGTH_SHORT).show();
// AndPermission.with(this).requestCode(102).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE).send();
} // 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
// 第一个权限申请选择拒绝,或者第二次弹出选择永久拒绝处理
// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@PermissionNo(100)
private void getLocationNo(List<String> deniedPermissions) {
// 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
Log.e("getLocationNo: ","1111" );
// 第二次 用户否勾选复选框了不再提示并且永久拒绝了权限,那么弹出对话框提示用户到设置中授权,用户点击确定跳入设置中
if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
// 第一种:用默认的提示语。如果用户选择了绝对不允许,那么对话框不会弹出来了,只能拿到设置中打开
AndPermission.defaultSettingDialog(this, 100).show();
}else {
// finish();
// 3.第一次 弹出权限,用户选择拒绝, 弹出权限解释对话框
sendAgain(100,Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
} // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
// 第二次选择拒绝
@PermissionNo(101)
private void getPhoneStateNo(List<String> deniedPermissions) {
// 用户否勾选了不再提示并且拒绝了权限,那么弹出只能到设置中打开权限对话框,用户点击,跳入设置中
if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
// 第一种:用默认的提示语。
AndPermission.defaultSettingDialog(this, 101).show();
}else {
// finish();
sendAgain(101,Manifest.permission.READ_PHONE_STATE);
}
} // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
// 4. 权限解释对话框,如果用户选择 确定,那么继续申请当前权限
// 用户选择否,不申请,失败对话框
private void sendAgain(final int code,final String permission){
AlertDialog.build(PermissionActivity.this)
.setCancelable(false)
.setTitle("友好提醒")
.setMessage("您拒绝该该权限可能会导致应用无法正常使用,您确定要拒绝么?")
.setPositiveButton("否",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
AndPermission.with(PermissionActivity.this).requestCode(code).permission(permission) .send();
}
})
.setNegativeButton("是", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PermissionActivity.this.finish();
}
}).show();
}
}
========================================================================
yanzhenjie:permission:1.0.5 使用相关推荐
- Error: listen EACCES: permission denied 0.0.0.0:80
Error: listen EACCES: permission denied 0.0.0.0:80 一.报错如下 二.报错的原因? 端口被系统模块占用 三.解决办法? 端口号已经被占用了,换其他端口 ...
- Android踩坑日记:android7.0动态相机权限
前提: 项目中使用的动态权限开源库github:https://github.com/yanzhenjie/AndPermission. 转载必须注明本文转自严振杰的博客:http://blog.cs ...
- android 6.0 数据库权限,Android超清晰6.0权限申请AndPermission
Android超清晰6.0权限申请AndPermission的具体实现代码,供大家参考,具体内容如下 前言 这是我经常使用的框架,原因: 1.思路清晰 2.实现方便 开始 准备工作 导包 compil ...
- android10无法获取ssid,解决Android 8.0和9.0无法获取SSID (unknow ssid)
一直都在做wifi相关的东西 今天遇到一个问题是8.0的机型无法获取到ssid 然后就查询了一番 终于找到解决方案 wifi名称获取代码 WifiManager my_wifiManager = (( ...
- 解决Android 8.0和9.0无法获取SSID (unknow ssid)
一直都在做wifi相关的东西 今天遇到一个问题是8.0的机型无法获取到ssid 然后就查询了一番 终于找到解决方案 wifi名称获取代码 WifiManager my_wifiManager = (( ...
- Android踩坑日记:Android动态权限分析和解决方案
关于运行时权限 在旧的权限管理系统中,权限仅仅在APP安装时询问一次,用户同意了这些权限App才能安装,APP一旦安装后就可以偷偷做很多不为人知的事情. 我们知道从Android6.0开始,App可以 ...
- android动态权限封装,Android 动态权限申请的封装
此模块基于AndPermission进行二次封装 为AndPermission加入依赖 implementation 'com.yanzhenjie:permission:2.0.3' //添加依赖 ...
- android studio 导入项目卡死,AndroidStudio导入新项目一直卡在Building gradle project info...
对于新手配置Gradle是一件很痛苦的事,记住二句话绝对搞定 1.在Gradle-->gradle-wrapper.properties中配置distributionUrl=https\://s ...
- Android之提示Could not find com.android.support:appcompat-v7:25.3.1.
1 问题 编译第三方项目,错误提示如下 Could not find com.android.support:appcompat-v7:25.3.1. Required by:project :sam ...
最新文章
- 圈复杂度本质上就是——分支覆盖率达到100%需要的测试用例数
- java学习笔记7--抽象类与抽象方法
- Spring的HelloWorld
- 浏览器兼容性导致网址显示不完整
- 输入输出系统 2--- 中断(未完)
- windows下python安装Numpy、Scipy、matplotlib模块
- TCP/IP分析(一) 协议概述
- python数据结构 树_Python数据结构——AVL树的实现
- luci L大_智慧城市大讲堂 l 大咖说5G智慧大交通
- java mockserver搭建_mockjs,json-server一起搭建前端通用的数据模拟框架教程
- CUDA C编程权威指南 第四章 全局内存
- zabbix 自定义监控 排除带报错提示
- 职场中相信“付出总有回报”的人,后来都怎么样了?
- 基于 CODING 的 Spring Boot 持续集成项目 1
- 后期强ps画意大师完美破解版一键打造中国风
- java velocity 语法_Velocity初探小结--velocity使用语法详解
- 11种免费获取SSL证书的方式
- VS Code设置缩进两个字符
- 辛东方重组百花园传媒 人员大调整
- 基于 Django 使用 qrcode 模块生成二维码
热门文章
- UnrealEngine4蓝图功能_关卡切换后的玩家出身点定位功能实现
- Opencv c++从影像分帧开始,制作数据集
- 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事
- 新手自主创业需要注意哪些误区?
- 在前互联网时代,宜家就有这些“互联网思维”
- 《怪诞行为学--丹.艾瑞里》知识点总结
- 2021年10个最美的边框效果,CSS实现,可以直接使用
- windows php java_Windows下配置 php-java-bridge
- 【论文】Mask R-CNN
- 孙子兵法与36计(一)