权限相关工具类
来源:互联网 发布:35位网络作家排名 编辑:程序博客网 时间:2024/06/05 04:24
import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.os.Build;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import java.util.ArrayList;import java.util.List;
public final class PermissionUtils { private static int mRequestCode = -1; private static OnPermissionListener mOnPermissionListener; public interface OnPermissionListener { void onPermissionGranted(); void onPermissionDenied(String[] deniedPermissions); } public abstract static class RationaleHandler { private Context context; private int requestCode; private String[] permissions; protected abstract void showRationale(); void showRationale(Context context, int requestCode, String[] permissions) { this.context = context; this.requestCode = requestCode; this.permissions = permissions; showRationale(); } @TargetApi(Build.VERSION_CODES.M) public void requestPermissionsAgain() { ((Activity) context).requestPermissions(permissions, requestCode); } } @TargetApi(Build.VERSION_CODES.M) public static void requestPermissions(Context context, int requestCode , String[] permissions, OnPermissionListener listener) { requestPermissions(context, requestCode, permissions, listener, null); } @TargetApi(Build.VERSION_CODES.M) public static void requestPermissions(Context context, int requestCode , String[] permissions, OnPermissionListener listener, RationaleHandler handler) { if (context instanceof Activity) { mRequestCode = requestCode; mOnPermissionListener = listener; String[] deniedPermissions = getDeniedPermissions(context, permissions); if (deniedPermissions.length > 0) { boolean rationale = shouldShowRequestPermissionRationale(context, deniedPermissions); if (rationale && handler != null) { handler.showRationale(context, requestCode, deniedPermissions); } else { ((Activity) context).requestPermissions(deniedPermissions, requestCode); } } else { if (mOnPermissionListener != null) mOnPermissionListener.onPermissionGranted(); } } else { throw new RuntimeException("Context must be an Activity"); } } /** * 请求权限结果,对应Activity中onRequestPermissionsResult()方法。 */ public static void onRequestPermissionsResult(Activity context, int requestCode, String[] permissions, int[] grantResults) { if (mRequestCode != -1 && requestCode == mRequestCode) { if (mOnPermissionListener != null) { String[] deniedPermissions = getDeniedPermissions(context, permissions); if (deniedPermissions.length > 0) { mOnPermissionListener.onPermissionDenied(deniedPermissions); } else { mOnPermissionListener.onPermissionGranted(); } } } } /** * 获取请求权限中需要授权的权限 */ private static String[] getDeniedPermissions(Context context, String[] permissions) { List<String> deniedPermissions = new ArrayList<>(); for (String permission : permissions) { if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_DENIED) { deniedPermissions.add(permission); } } return deniedPermissions.toArray(new String[deniedPermissions.size()]); } /** * 是否彻底拒绝了某项权限 */ public static boolean hasAlwaysDeniedPermission(Context context, String... deniedPermissions) { for (String deniedPermission : deniedPermissions) { if (!shouldShowRequestPermissionRationale(context, deniedPermission)) { return true; } } return false; } /** * 是否有权限需要说明提示 */ private static boolean shouldShowRequestPermissionRationale(Context context, String... deniedPermissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return false; boolean rationale; for (String permission : deniedPermissions) { rationale = ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, permission); if (rationale) return true; } return false; }}
阅读全文
0 0
- 权限相关工具类
- android开发 系统信息相关工具类 权限管理页面
- Spring 相关工具类
- Web相关工具类
- 文件相关工具类
- 安全相关工具类
- Math工具类相关
- 尺寸相关工具类
- 文件相关工具类
- Json相关工具类
- 屏幕相关工具类
- 字符串相关工具类
- 阴历相关工具类
- Log相关工具类
- 定位相关工具类
- 键盘相关工具类
- 意图相关工具类
- 图片相关工具类
- SPI、I2C、UART三种串行总线的原理、区别及应用
- 《阳光下》 ——【传递正反馈】
- UE破解方法
- session 原理
- Python中subprocess学习
- 权限相关工具类
- Unity MD5 图片校验
- 线段树 延迟标记
- abap dec和curr的区别
- 美团推荐算法实践
- Python学习笔记【四】——《python基础教程》:: 字典:当索引不好用时
- javaAES加密解密32位密钥
- AT&T衰落的原因
- vue常见问题解决办法(二)|warning:component lists rendered with v-for should have explicit keys