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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗