android 6.0动态添加权限
来源:互联网 发布:linux samba 端口修改 编辑:程序博客网 时间:2024/05/08 00:05
一、这些在父类中添加
private PermissionListener mlistener;
/**
* Created by pangzhenzhong on 2017/9/20.
* 权限回调接口(可以自己命名)
*/
public interface PermissionListener {
//授权成功进入的方法
void onGranted();
//授权部分(集合授权成功进入的方法)
void onGranted(List<String> grantedPermission);
//拒绝授权
void onDenied(List<String> deniedPermission);
}
/**
* 权限申请
* @param permissions 待申请的权限集合
* @param listener 申请结果监听事件
*/
protected void requestRunTimePermission(String[] permissions,PermissionListener listener){
this.mlistener = listener;
//存放授权的权限
List<String> permissionList = new ArrayList<>();
//遍历权限集合
for (String permission : permissions) {
//判断是否已经授权
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){
//未授权,则加入待授权的权限集合中
permissionList.add(permission);
}
}
//判断集合
if (!permissionList.isEmpty()){ //如果集合不为空,则需要去授权
ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1);
}else{ //为空,则已经全部授权
listener.onGranted();
}
}
/**
* 权限申请结果
* @param requestCode 请求码
* @param permissions 所有的权限集合
* @param grantResults 授权结果集合
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
if (grantResults.length > 0){
//被用户拒绝的权限集合
List<String> deniedPermissions = new ArrayList<>();
//用户通过的权限集合
List<String> grantedPermissions = new ArrayList<>();
for (int i = 0; i < grantResults.length; i++) {
//获取授权结果,这是一个int类型的值
int grantResult = grantResults[i];
if (grantResult != PackageManager.PERMISSION_GRANTED){ //用户拒绝授权的权限
String permission = permissions[i];
deniedPermissions.add(permission);
}else{ //用户同意的权限
String permission = permissions[i];
grantedPermissions.add(permission);
}
}
if (deniedPermissions.isEmpty()){ //用户拒绝权限为空
mlistener.onGranted();
}else { //不为空
//回调授权成功的接口
mlistener.onDenied(deniedPermissions);
//回调授权失败的接口
mlistener.onGranted(grantedPermissions);
}
}
break;
default:
break;
}
}
二、在需要用到授权的activity中使用:
//获取权限
private void requestPermission() {
requestRunTimePermission(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}
, new PermissionListener() {
@Override
public void onGranted() { //所有权限授权成功
do someting....(调用你自己需要的处理代码,也就是你授权成功后,需要处理的事情)
}
@Override
public void onGranted(List<String> grantedPermission) { //授权失败权限集合
Toast.makeText(getActivity(), "授权失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(List<String> deniedPermission) { //授权成功权限集合
showSelector();
}
});
}
- android 6.0动态权限添加
- android 6.0动态权限添加
- android 6.0动态添加权限
- 解决Android 6.0动态添加权限问题
- 6.0权限动态添加
- Android动态广播添加权限
- android动态添加权限6.0+--权限操作jar简化添加权限步骤。
- android 动态权限添加 ,你不得不学
- Android 6.0动态权限
- android 6.0动态权限
- android 6.0 动态权限
- Android 6.0 动态权限
- android 6.0动态权限
- Android-6.0动态权限
- android 6.0 动态权限
- Android 6.0动态权限
- Android 6.0动态权限
- android 6.0动态权限
- 简析单例设计模式
- jsp根据浏览器语言实现展示不同语言页面的做法
- erlang hackney的HTTP客户端库(未学习)
- 文章标题
- IoT技术架构与安全威胁
- android 6.0动态添加权限
- (2) Hadoop-集群搭建 HDFS入门
- Ubuntu 美化
- windows下安装php使用的imagick
- 怎么样做系统
- PL/SQL cursor 游标 where条件接收形参为VARCHAR 不能正常执行的问题 SELECT ContactNameC FROM MTContact WHERE objectno
- 23种设计模式之单例模式(java 实现)
- Ubuntu安装YouCompleteMe源码
- 初学python:输入某年某月某日,判断这一天是这一年的第几天