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应 ...
随机推荐
- python之ActionChains方法列表
使用方法: 方法列表: click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_cli ...
- macos npm + node 环境启动问题排查
MacOS安装npm全局包的权限问题 解决办法:修改npm包所安装目录的权限:sudo chown -R $USER /usr/local 然后输入密码就可以了 deMBP:~ $ sudo ch ...
- Flutter移动电商实战 --(10)使用FlutterSwiper制作轮播效果
1.引入flutter_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. 好牛X得介绍,一般敢用“最”的一般都是神级大神,看到这个介绍 ...
- 数据结构之栈(stack)
1,栈的定义 栈:先进后出的数据结构,如下图所示,先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出. 栈常用操作: s=Stack() 创建栈 s.push(item) 将数据item放在 ...
- 用PHP自带函数对二维数组进行排序
经常会面临这样的需求,虽然有时候我们可以在数据库查询的时候,直接对数据进行排序,但还是无法满足日益复杂的业务需求. 这里边会用到两个函数 一个是array_column()函数,这个函数接受三个参数. ...
- LC 873. Length of Longest Fibonacci Subsequence
A sequence X_1, X_2, ..., X_n is fibonacci-like if: n >= 3 X_i + X_{i+1} = X_{i+2} for all i + 2 ...
- easyUI之numberspinner数字微调框
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- iOS tableHeaderView有默认高度?
在给tableView设置tableHeaderView的时候发现,如果设置tableView.tableHeaderView = [UIView new] , 这里未设置tableView的高度,但 ...
- rpm -qa|grep jdk
转:http://blog.csdn.net/u012110719/article/details/42002221 RPM是RedHat Package Manager(RedHat软件包管理工具) ...
- 九十:CMS系统之项目结构
目录结构 cms模块 from flask import Blueprint bp = Blueprint('cms', __name__, url_prefix='/cms') @bp.route( ...