PermissionUtils
- 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.content.ContextCompat;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * DESC 6.0 权限工具类
- * Created by douhaoqiang on 2017/2/27.
- */
- public class PermissionUtils {
- private static final String TAG = "PermissionUtils";
- private static int mRequestCode = -1;
- private static OnPermissionListener mOnPermissionListener;
- /**
- * 权限请求回调
- */
- public interface OnPermissionListener {
- //权限通过
- void onPermissionGranted();
- //权限拒绝
- void onPermissionDenied();
- }
- /**
- * 调用请求响应的权限
- * @param context 上下文菜单 必须为Activity
- * @param requestCode 请求码
- * @param permissions 请求权限
- * @param listener 权限请求监听
- */
- @TargetApi(Build.VERSION_CODES.M)
- public static void requestPermissions(Context context, int requestCode
- , String[] permissions, OnPermissionListener listener) {
- if (context instanceof Activity) {
- mOnPermissionListener = listener;
- List<String> deniedPermissions = getDeniedPermissions(context, permissions);
- if (deniedPermissions.size() > 0) {
- mRequestCode = requestCode;
- ((Activity) context).requestPermissions(deniedPermissions
- .toArray(new String[deniedPermissions.size()]), requestCode);
- } else {
- if (mOnPermissionListener != null)
- mOnPermissionListener.onPermissionGranted();
- }
- } else {
- throw new RuntimeException("Context must be an Activity");
- }
- }
- /**
- * 获取请求权限中需要授权的权限
- */
- private static List<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;
- }
- /**
- * 请求权限结果,对应Activity中onRequestPermissionsResult()方法。
- */
- public static void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- if (mRequestCode != -1 && requestCode == mRequestCode) {
- if (mOnPermissionListener != null) {
- if (verifyPermissions(grantResults)) {
- mOnPermissionListener.onPermissionGranted();
- } else {
- mOnPermissionListener.onPermissionDenied();
- }
- }
- }
- }
- /**
- * 验证所有权限是否都已经授权
- */
- private static boolean verifyPermissions(int[] grantResults) {
- for (int grantResult : grantResults) {
- if (grantResult != PackageManager.PERMISSION_GRANTED) {
- return false;
- }
- }
- return true;
- }
- }
使用:
- public class SplashActivity extends Activity {
- String[] permissions = {
- Manifest.permission.WRITE_EXTERNAL_STORAGE,
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.CAMERA,
- Manifest.permission.RECORD_AUDIO
- };
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏
- setContentView(R.layout.activity_splash);
- requestPermissions();
- }
- public void requestPermissions() {
- PermissionUtil.requestPermissions(this, 1, permissions, new PermissionUtil.OnPermissionListener() {
- @Override
- public void onPermissionGranted() {
- startActivity(new Intent(SplashActivity.this, MainActivity.class));
- finish();
- }
- @Override
- public void onPermissionDenied() {
- finish();
- }
- });
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- PermissionUtil.onRequestPermissionsResult(requestCode, permissions, grantResults);
- }
- //隐藏虚拟导航栏按键
- @Override
- public void onWindowFocusChanged(boolean hasFocus) {
- super.onWindowFocusChanged(hasFocus);
- if (hasFocus) {
- getWindow().getDecorView().setSystemUiVisibility(
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN
- );
- }
- }
- }
PermissionUtils的更多相关文章
- Android PermissionUtils:运行时权限工具类及申请权限的正确姿势
Android PermissionUtils:运行时权限工具类及申请权限的正确姿势 ifadai 关注 2017.06.16 16:22* 字数 318 阅读 3637评论 1喜欢 6 Permis ...
- Android6.0动态权限申请
goggle在Android6.0要求部分权限需要动态申请,直接下载AndroidManifest.xml中无效 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组, 每组只要有一个权限申请成 ...
- Shiro源码分析-初始化-Realm
在上一篇介绍SecurityManager的初始化过程中,也有realm的粗略介绍. realm的概念在安全领域随处可见: 各种中间件的realm.spring security的realm.shir ...
- Android6.0动态权限申请步骤以及需要注意的一些坑
因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo.算是自己的笔记吧,可能会比较混乱,主要是方便以后查看.后期有别的问题,随时更 ...
- android 6.0获取权限
Android版本升到6.0后最坑的就是权限问题,以下是我参考大神一个权限管理工具类,希望对大家有用 PermissionUtils.java import android.Manifest; imp ...
- 数据权限管理中心 - 基于mybatis拦截器实现
数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...
- Android 6.0 运行时权限处理问题
序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK=23的App时就会报权限错误.我们知道 ...
- Shiro源码分析之SecurityManager对象获取
目录 SecurityManager获取过程 1.SecurityManager接口介绍 2.SecurityManager实例化时序图 3.源码分析 4.总结 @ 上篇文章Shiro源码分析之获 ...
- Android--解决图片保存到相册显示1970年1月1日 8:00的问题
import android.content.Context; import android.content.Intent; import android.database.Cursor; impor ...
随机推荐
- 用python编写一个合格的ftp程序,思路是怎样的?
经验1.一般在比较正规的类中的构造函数.都会有一个verify_args函数,用于验证传入参数.尤其是对于系统传参.2.并且系统传参,其实后面大概都是一个函数名 例如:python server. ...
- Mybatis分页-利用Mybatis Generator插件生成基于数据库方言的分页语句,统计记录总数 (转)
众所周知,Mybatis本身没有提供基于数据库方言的分页功能,而是基于JDBC的游标分页,很容易出现性能问题.网上有很多分页的解决方案,不外乎是基于Mybatis本机的插件机制,通过拦截Sql做分页. ...
- Hive入门指南
转自:http://blog.csdn.net/zhoudaxia/article/details/8842576 1.安装与配置 Hive是建立在Hadoop上的数据仓库软件,用于查询和管理存放在分 ...
- shell 实用脚本
功能 将当前目录下文件拷贝至另一目录下,且拷贝前先备份 #!/bin/sh #脚本功能 #覆盖文件前先备份 cfsuffix=$(date +%Y%m%d); #备份文件后缀 ]; then #输入参 ...
- python爬虫练习之批量下载zabbix文档
# -*- coding: UTF-8 -*- import requests,re,time url = 'https://www.zabbix.com/documentation/3.4/zh/m ...
- 使用Spring Mail发送QQ邮件
一.邮箱设置 QQ邮箱设置:http://service.mail.qq.com/cgi-bin/help?id=28, 下面这些服务需要开启(需要设置邮箱独立密码): 二.applicationCo ...
- 接口开发(login、reg)
接口开发: import flask,json,pymysql,hashlib server = flask.Flask(__name__)# 把当前这个python文件当做一个服务 def my_d ...
- plsql之导入数据乱码
问题现象: 首先是使用了plsql 8.0版本客户端导入 ANSI as UTF-8 的字符集 格式sql 文件进行数据的导入, 然后检查了所有的系统环境的字符集和plsql 的字符集 都OK 的但 ...
- LCA-tarjan understand 2
下面是一个最基础的LCA题目 http://poj.org/problem?id=1330 赤裸裸的 题意 输入cas 后 有cas组数据 输入 n 再输入n-1 条边 之后输入x ...
- JS 深拷贝/合并
var mix = function(r, s, ov) { if (!s || !r) return r; if (ov === undefined) ov = true; for (var p i ...