安卓权限处理 PermissionDog
PermissionDog
简介
权限狗 权限申请
最近在一家公司实习,项目中需要用到适配安卓6.0以上的系统,我本来是想用其他人已经写好的权限申请框架来实现的,但是发现跟我的需求有点小区别,所以就自己写了一个
这个权限申请的帮助类很小,只有一个java文件,复制到你的项目中就可以直接使用
没想到什么好名字 既然有权限,那就叫权限狗吧
#使用截图
请求单个权限
请求多个权限
请求多个权限失败
请求多个权限是勾选了不再显示
特性
1:支持单个和多个权限的申请
2:单个支持三个回调:允许,拒绝,勾中不再显示框并拒绝
3:多个权限回调时返回允许,拒绝,勾中不再显示框并拒绝的权限列表
使用
1.在你需要申请权限的Activity中重写onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
PermissionDog.getInstance().notifyPermissionsChanged(MainActivity.this, requestCode, permissions, grantResults);
}
2.在你需要申请权限的地方添加以下代码
请求单个权限
private void requestSinglePermission() {
PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() {
@Override
public void never() {
super.never();
//已经勾选了不再提醒
Toast.makeText(MainActivity.this, "已经拒绝权限,请前往设置开启", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
}
@Override
public void denied() {
super.denied();
//未获取到权限
Toast.makeText(MainActivity.this, "未获取到了单个权限", Toast.LENGTH_SHORT).show();
}
@Override
public void grant() {
super.grant();
//获取到了权限
Toast.makeText(MainActivity.this, "获取到了单个权限", Toast.LENGTH_SHORT).show();
}
});
PermissionDog.getInstance().requestSinglePermissions(MainActivity.this, singlePermission);
}
请求多个权限
private void requestMultiPermission() {
PermissionDog.getInstance().SetAction(new PermissionDog.PermissionDogAction() {
@Override
public void allallow() {
super.allallow();
//在此设置权限全部被允许后的操作
Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show();
}
@Override
public void multi(String[] granteds, String[] denieds, String[] nevershows) {
if (nevershows.length != 0) {
new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission")
.setMessage("PermissionDog需要摄像头和拨打电话的权限")
.setPositiveButton("前往设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//有权限被勾选了不再提醒
Toast.makeText(MainActivity.this, "有权限被勾选了不再提醒", Toast.LENGTH_SHORT).show();
}
}).create().show();
} else {
if (denieds.length != 0) {
new AlertDialog.Builder(MainActivity.this, R.style.DialogTheme).setTitle("Permission")
.setMessage("PermissionDog需要读写空间和拨打电话的权限")
.setPositiveButton("获取", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission);
}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "未获取到必要的权限", Toast.LENGTH_SHORT).show();
}
}).create().show();
} else {
//在此设置权限全部被允许后的操作
Toast.makeText(MainActivity.this, "多个权限全部被允许", Toast.LENGTH_SHORT).show();
}
}
}
});
PermissionDog.getInstance().requestMultiPermissions(MainActivity.this, multiPermission);
}
3.运行
##解释:
申请单个权限时重写never,denied,grant三个方法
申请多个权限时重写allallow,multi两个方法
你可以在我的github上找到你需要的PermissionDog源文件
地址:https://github.com/hei12138/PermissionDog
有任何问题可以随时联系我:1329698854@qq.com
安卓权限处理 PermissionDog的更多相关文章
- 安卓权限申请处理框架Android-UsesPermission
安卓权限申请封装处理框架.测试支持4.0+.项目源于正式处理Android权限问题时,没找到简单.能满足被拒绝权限自动会到系统设置处理的框架,按自己的编程习惯造一个熟悉的轮子还是蛮好的.第一次使用An ...
- 关于安卓6.0权限申请 PermissionDog
最近在一家公司实习,项目中需要用到适配安卓6.0以上的系统,我本来是想用其他人已经写好的权限申请框架来实现的,但是发现跟我的需求有点小区别,所以就自己写了一个 这个权限申请的帮助类很小,只有一个jav ...
- 德尔福 XE5 安卓权限设置
http://delphi.org/2013/10/delphi-xe5-android-uses-permissions/ The permissions required by a Delphi ...
- 转:Android随笔之——使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
本文转载自CSDN的jzj1993,原文连接:http://blog.csdn.net/jzj1993/article/details/39158865 有时我们需要使用安卓实现在后台模拟系统按键,比 ...
- Cordova项目config.xml添加android权限
最近在开发cordova项目,安卓APP需要调用照相机和系统相册,在添加安卓权限的时候,总是报错. 以下是部分config.xml代码 <platform name="android& ...
- Android Studio 0.4 + PhoneGap 3.3 开发环境的搭建
最近在尝试HTML5移动平台下的开发 由于安卓的方便性,首先开始了安卓的试验 现在安卓下的开发工具首选 Android Studio (写这文章的时候,是0.4) 而跨平台的HTML5 App比较出名 ...
- BAT Android工程师面试流程解析+还原最真实最完整的一线公司面试题
尊重原创,转载请写明原文出处:http://blog.csdn.net/sk719887916/article/details/47040931 (skay) 求职和我们每个人息息相关,而求职也有门道 ...
- h5端呼起摄像头扫描二维码并解析
2016年6月29日补充: 最近做了一些与表单相关的项目,使用了h5的input控件,在使用过程中遇到了很多的坑.也包括与这篇文章相关的. 首先我们应该知道使用h5新提供的属性getUserMedia ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十三)
对我们项目中的关键技术实现进行总结: 一.3DMax关键技术实现 1.一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. 2. 骨骼架设:首先对导入到3DM ...
随机推荐
- HTML, CSS. JS的各种奇葩bug
1. block包含inline-block的时候, inline-block 没有内容的时候,会根据 font 产生一个 line-height 来产生一个空白块. 解决方法: <div cl ...
- c++多线程编程:实现标准库accumulate函数的并行计算版本
今天使用c++实现了标准库头文件<numeric>中的accumulate函数的并行计算版本,代码如下,注释写的比较详细,仅对其中几点进行描述: ①该实现假定不发生任何异常,故没有对可能产 ...
- Kotlin Reference (五) Packages
most from reference 包 源文件可以从包声明开始: package foo.bar fun baz() {} class Goo {} // ... 源文件的所有内容(如类和函数)都 ...
- Ubuntu16.04 --> 14.04
从16到14 自认为14是比较稳定的.从安装依赖上说. 14安装应用 更多参见[请直接拉到"华丽丽的分割线"下面] Java9 注意,添加源的时候先把lantern打开!!! 添加 ...
- Python IDE in Sublime
(最近换了电脑,然后忘了把 ST 的配置搬过来,所以重新折腾了一遍 Sublime 中的 Python 环境配置) 以下插件均通过 Package Control 安装. SublimeREPL 快捷 ...
- Codeforces 620E New Year Tree【线段树傻逼题】
LINK 题目大意 给你一棵树 让你支持子树染色,子树查询颜色个数,颜色数<=60, 节点数<=4e5 思路 因为颜色数很少,考虑状态压缩变成二进制 然后直接在dfs序上用线段树维护就可以 ...
- BZOJ4033 HAOI2015 树上染色 【树上背包】
BZOJ4033 HAOI2015 树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白 ...
- 使用python处理selenium中的css_selector定位元素的模糊匹配问题
# 匹配id,先指定一个html标签,然后加上“#”符号,再加上id的属性值 self.driver.find_element_by_css_selector('div#ID').click() # ...
- [BZOJ5361][Lydsy1805月赛]对称数
bzoj Description 给你一棵树,每个点有一个编号\(a_i\).\(Q\)组询问,每次问一条路径上最小的出现了偶数次的编号是多少(包括零次). 多组数据,\(T\le10,n,Q,a_i ...
- 图像对比度调整的simulink仿真总结
图像对比度调整可以由一个模块contrast adjustment 完成,参数有输入范围和输出范围,计算过程由以下公式决定 解释一下,当input<=low_in的时候输出的值是low_out+ ...