QT 安卓动态获取权限
一:在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 安卓动态获取权限的更多相关文章
- Android6.0以上系统动态获取权限
动态权限的申请方法: 1.首先,需要在AndroidManifest.xml静态申请权限,否则无法动态申请权限: <uses-permission android:name="andr ...
- android 6.0之后动态获取权限
Android 6.0 动态权限申请 1. 概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限 ...
- Android6.0动态获取权限
Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...
- Android动态获取权限
android权限的变化 在Android6.0以前的版本的时候,Android的权限都是在安装的时候全部的配置完成的.然而这往往会造成一些安全的问题. Google的解决办法: 将Android中的 ...
- QT 安卓 悬浮窗权限动态申请
一:申请方式: String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMI ...
- Android 6.0以上动态获取权限
首先在清单文件中注册 然后在MainActivity.java中将权限封装到一个String数组中 static final String[] PERMISSION = new String[]{ M ...
- 动态获取Android权限
@TargetApi(23)private void showPhotoDialog() { if (dialog != null && dialog.isShowing()) { d ...
- Spring Security3实现,权限动态获取
Spring Security3实现,权限动态获取 原文 http://blog.csdn.net/yangwei19680827/article/details/9359113 主题 网络安全Sp ...
- Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题
Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可以在设置中的应用信息中看到:XX应 ...
随机推荐
- 解决spring-boot 各版本包冲突兼容的方法
思路 在微服务盛行的当下,spring boot 流行程度已经家喻户晓.但同时,随着spring boot 快速迭代,出现了很多版本,比如当前已经推出了2.2.x-SNAPSHOT/ , ...
- mysql zip方式安装
下载zip文件解压到安装目录,此时是没有data文件夹和my.ini文件的. 1.首先自己新建my.ini,内容如下: [client] port=3306 default-character-set ...
- arcgis python 判断是数据库或是文件夹
import arcpy # Create a Describe object # desc = arcpy.Describe("C:/Data/chesapeake.gdb") ...
- git send-email时报错:Client host rejected: cannot find your hostname 如何处理?
1. 先找出ip对应的域名 dig +short -x <your ip> 2. 如果第1步没有输出,那么需要将hostname与ip绑定,如:hostname为jello,那么是往/et ...
- LC 970. Powerful Integers
Given two non-negative integers x and y, an integer is powerful if it is equal to x^i + y^j for some ...
- python设计模式-命令模式
命令模式就是对命令的封装.所谓封装命令,就是将一系列操作封装到命令类中,并且命令类只需要对外公开一个执行方法execute,调用此命令的对象只需要执行命令的execute方法就可以完成所有的操作.这样 ...
- 什么是APJ与使用Spring Data JPA 基于Hibernate
目录结构 首先在Maven项目中添加依赖包 <!-- https://mvnrepository.com/artifact/org.springframework.data/ spring-da ...
- [转]SQL server 2008R2 中 C#Winfoirm 使用 SqlDependency 机制实现 数据库中某一张表的监视
转自:https://blog.csdn.net/u012183487/article/details/77776930 System.Data.SqlClient命名空间下的 sqlDependen ...
- 使用python装饰器计算函数运行时间的实例
使用python装饰器计算函数运行时间的实例 装饰器在python里面有很重要的作用, 如果能够熟练使用,将会大大的提高工作效率 今天就来见识一下 python 装饰器,到底是怎么工作的. 本文主要是 ...
- 手写web框架之开发一个类加载器
ackage io.renren.common; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUti ...