一:在AndroidManifest.xml文件中赋予相关权限

二:

package ckdz.Appproject;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;

import java.util.ArrayList;
import java.util.List;
import android.util.Log;

/**
 * Created by long
 */

public class PermissionManager {
    public final static int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
    public final static int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 2;
    public final static int MY_PERMISSIONS_REQUEST_CAMERA = 3;
    public final static int MY_PERMISSIONS_RECORD_AUDIO = 4;
    public final static int MY_PERMISSIONS_SYSTEM_ALERT_WINDOW = 5;

    //log TAG
    private String MYTAG = "XHLIVE";//MainActivity.xhlogtag;

    //data
    private static Context mContext;
    private boolean mWritePermission = false;   //写权限
    private boolean mReadPermission = false;    //读权限
    private boolean mCameraPermission = false;  //摄像头权限
    private boolean mRecordAudioPermission = false;       //麦克风权限
    private boolean mRecordSystemWindow = false;       //悬浮窗

    String[] permissions = new String[]{
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.SYSTEM_ALERT_WINDOW
    };

    List<String> mPermissionList = new ArrayList<String>();

    //检查所有权限(摄像头相关)
    public void checkAllPermission() {
        mPermissionList.clear();
        //Log.d("GetPermission" , "the result mPermissionList is NUll "+mPermissionList.length );
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(mContext, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                mPermissionList.add(permissions[i]);
            }
        }
    }

    //获取所有权限(摄像头相关)
    public void getAllPermission() {
        if (mPermissionList.isEmpty()) {
            //未授予的权限为空,表示都授予了

        } else {
            //请求权限方法
            String[] permissions = mPermissionList.toArray(new String[mPermissionList.size()]);//将List转为数组
            //Log.d("GetPermission" , "the result requestPermissions "+permissions.size());
            ActivityCompat.requestPermissions((Activity) mContext, permissions, 1);

        }
    }

    private static class SingletonHolder{
        public static PermissionManager instance = new PermissionManager();
    }

    private PermissionManager(){}

    public static PermissionManager getInstance(Context context){
        mContext = context;
        return SingletonHolder.instance;
    }


    //检查: 写 权限
    public  boolean checkWritePermission() {
        int permission = ActivityCompat.checkSelfPermission(mContext,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            Log.e(MYTAG, "No, we do not have WRITE permission");
            mWritePermission = false;
        } else{
            Log.e(MYTAG, "Yes, we have WRITE permission");
            mWritePermission = true;
        }
        return mWritePermission;
    }

    //检查: 读 权限
    public  boolean checkReadPermission() {
        int permission = ActivityCompat.checkSelfPermission(mContext,
                Manifest.permission.READ_EXTERNAL_STORAGE);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            Log.e(MYTAG, "No, we do not have READ permission");
            mReadPermission = false;
        } else{
            Log.e(MYTAG, "Yes, we have READ permission");
            mReadPermission = true;
        }

        return mReadPermission;
    }

    //检查: 摄像头 权限
    public boolean checkCameraPermission() {
        int permission = ActivityCompat.checkSelfPermission(mContext,
                Manifest.permission.CAMERA);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            Log.e(MYTAG, "No, we do not have CAMERA permission");
            mCameraPermission = false;
        } else{
            Log.e(MYTAG, "Yes, we have CAMERA permission");
            mCameraPermission = true;
        }

        return mCameraPermission;
    }

  //检查 悬浮窗权限
    public  boolean checkWindowPermission() {
        int permission = ActivityCompat.checkSelfPermission(mContext,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);

        return mWritePermission;
    }

    //获取 存储 权限
    public void getWritePermission() {
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions((Activity) mContext,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }

    }

    //获取 读 权限
    public void getReadPermission() {
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext,
                Manifest.permission.READ_EXTERNAL_STORAGE)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions((Activity) mContext,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }

    //获取 摄像头 权限
    public void getCameraPermission() {
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext,
                Manifest.permission.CAMERA)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.

        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions((Activity) mContext,
                    new String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }

    //获取悬浮窗 权限
    public void getWindowPermission() {
    // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext,
                Manifest.permission.SYSTEM_ALERT_WINDOW)) {

        } else {
            ActivityCompat.requestPermissions((Activity) mContext,
                new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW},
                MY_PERMISSIONS_SYSTEM_ALERT_WINDOW);

        }
    }


    public void setWritPermissionStatus(boolean status) {
        mWritePermission = status;
    }

    public void setReadPermissionStatus(boolean status) {
        mReadPermission = status;
    }

    public void setCameraPermissionStatus(boolean status) {
        mCameraPermission = status;
    }
    public boolean isWritePermissionOK() {
        return mWritePermission;
    }

    public boolean isReadPermissionOK() {
        return mReadPermission;
    }

    public boolean isCameraPermissionOK() {
        return mCameraPermission;
    }
}

QT 安卓动态获取权限的更多相关文章

  1. Android6.0以上系统动态获取权限

    动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...

  2. android 6.0之后动态获取权限

    Android 6.0 动态权限申请   1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...

  3. Android6.0动态获取权限

    Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...

  4. Android动态获取权限

    android权限的变化 在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的.然而这往往会造成一些安全的问题. Google的解决办法: 将Android中的 ...

  5. QT 安卓 悬浮窗权限动态申请

    一:申请方式: String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMI ...

  6. Android 6.0以上动态获取权限

    首先在清单文件中注册 然后在MainActivity.java中将权限封装到一个String数组中 static final String[] PERMISSION = new String[]{ M ...

  7. 动态获取Android权限

    @TargetApi(23)private void showPhotoDialog() { if (dialog != null && dialog.isShowing()) { d ...

  8. Spring Security3实现,权限动态获取

    Spring Security3实现,权限动态获取 原文  http://blog.csdn.net/yangwei19680827/article/details/9359113 主题 网络安全Sp ...

  9. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

    Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...

随机推荐

  1. Python中调用shell

    1 简单调用shell命令 os.system(command) 在一个子shell中运行command命令, 并返回command命令执行完毕后的退出状态. 这实际上是使用C标准库函数system( ...

  2. centos7 下设置 mongodb 开机启动 (重点)

    centos 7的开机启动跟之前版本的centos有很大不同.现在用 systemctl命令代替了之前的chkconfig 和 service 命令 注册到开机启动的方法如下: 在系统服务目录下新建m ...

  3. 在AndroidStudio中使用单元测试

    1. 前言     在Android开发中,如果对一个简单的功能,每次修改代码都重新运行到设备中进行测试,会浪费大量时间,降低开发工作效率.如果使用单元测试,编写单元测试类,执行测试单元测试类就可以对 ...

  4. smb服务问题解析,区别红帽6和CentOS7

    最近在学习smb服务,哇!简直问题多的不要不要的.因为以前是学习的红帽6的系统,现在用的是CentOs7,所以还是改不了以前的一些配置方式,造成了很多问题.快成地中海了! 我们准备环境: 系统: 服务 ...

  5. 在react项目中启用mobx的配置方法

    1.安装插件 npm install --save-dev babel-preset-mobx mobx mobx-react 2.package.json配置 "dependencies& ...

  6. MySql workbeach 更改侧边栏大小

    1.定位到workbench的样式目录下 cd /usr/share/mysql-workbench/ 2.更改其样式文件 GtkStatusbar GtkLabel { font-size: 12p ...

  7. 图片滚动js代码

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  8. React Native细节知识点总结<一>

    1.propTypes: static propTypes = { name:PropTypes.string, ID:PropTypes.number.isRequired, } 'isRequir ...

  9. python多进程——multiprocessing.Process

    简介 multiprocessing是一个使用类似于threading模块的API支持生成进程的包.该multiprocessing软件包提供本地和远程并发.因此,该multiprocessing模块 ...

  10. iptables基本命令到深入

    1.关闭firewalld,安装iptables-server并启动服务 systemctl stop firewalld systemctl disable firewalld yun -y ins ...