Qt for Android 动态申请权限
前言
Qt 随着版本的不断更新,提供了越来越多的接口用于移动端的开发,这里要说的是关于 Android 上权限动态申请的问题,直接在 C++端调用 Qt 的接口即可以实现。
正文
Qt 申请Android 权限的类是在 QtAndroid 中,要使用该类,首先需要在工程文件中声明该模块
QT += androidextras
接下来看看动态获取权限的接口。
接口
void QtAndroid::requestPermissions(const QStringList &permissions, const QtAndroid::PermissionResultCallback &callbackFunc)
Asynchronously requests permissions to be granted to this application, callbackFunc will be called with the results.
This function was introduced in Qt 5.10.
QtAndroid::PermissionResultMap QtAndroid::requestPermissionsSync(const QStringList &permissions, int timeoutMs = INT_MAX)
Synchronously requests permissions to be granted to this application, waits timeoutMs to complete.
This function was introduced in Qt 5.10.
这两个接口,一个是异步一个是同步,使用方法有些不一样。需要注意的是,这个接口是从 Qt5.10才开始支持的,所以 Qt 版本必须要在5.10以上才能用。
使用方法
这里举例申请摄像头权限的方法:
bool Manager::requestPermission() {QtAndroid::PermissionResult r = QtAndroid::checkPermission("android.permission.CAMERA");if(r == QtAndroid::PermissionResult::Denied) {QtAndroid::requestPermissionsSync( QStringList() << "android.permission.CAMERA" );r = QtAndroid::checkPermission("android.permission.CAMERA");if(r == QtAndroid::PermissionResult::Denied) {return false;}}return true;
}
申请其他权限大同小异,只需要修改权限名就可以了。
为什么要手动申请权限?
可能有人会觉得奇怪,为什么会有这个问题?因为通常做 android 开发我们都知道,要使用这种敏感权限必须要先申请才能用,那么在 android 原生开发里面,需要在 AndroidMenifest.xml中添加相应的权限才行。早期的Qt 版本开发 Android 应用时也需要这样做才行,要不然功能无法实现。
但是,最近在调试权限的问题时发现一个非常奇怪的事情,我使用 Qt5.11.0版本进行开发,在 QML 中直接调用 Camera 打开摄像头,根本无需像以前那样需要先在AndroidMenifest.xml添加相机权限,直接用就可以了,貌似在调用 Camera 的时候,底层已经默认会去自动申请了,无需手动再申请。
那可能有人会说,既然底层会自动申请了为啥还要动态去申请权限呢?
我测试过程中发现,如果不手动去申请权限,在我的 Android8.0手机上,,直接调用 Camera 时,会自动弹出权限申请框,点击权限允许过后,进入到 Camera 发现摄像头预览页面并没有画面,完全是空白。我猜测这里是跟系统调用的顺序有关,申请权限比打开页面慢 所以导致摄像头预览没有加载出来。所以这时候就需要先手动去申请权限,然后在打开摄像头页面即可解决问题。
关于这部分的解释,后期会单独写篇文章介绍,Android权限的申请其实还有好多很奇怪的现象,相比以前 Qt 老版本,新版的更新确实带来了不少改进,为开发者减少了很多工作量。
参考文章:https://bugreports.qt.io/browse/QTBUG-50759
Qt for Android 动态申请权限相关推荐
- Unity2019中的android动态申请权限(Permissions)
请使用最新文章: Unity2022中的android权限处理(Permissions) 动态权限,权限弹窗 注意事项: 1.因为新规等因素需要提前弹出游戏自己的权限描述界面 2.玩家连续多次拒绝权限 ...
- android 动态申请权限_你真的了解Android权限机制吗?
码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...
- android动态申请权限第三方库,Android 关于动态申请权限
第一种方式:引入三方库,利用第三方申请权限 1.引入三方库: api'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar' 2.调用(当然你需要什 ...
- Android动态申请权限(拨打电话)
Android权限大全: https://www.cnblogs.com/diyishijian/p/5629545.html Android权限有上百个,那么我们如何在调用权限的时候,判断app是否 ...
- android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...
通过自定义插件方式实现Android平台的动态申请权限功能 在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题).虽然说完成了功能,但是在使用上并不是 ...
- Android如何动态申请权限(打电话)
Android动态申请权限(打电话) android 高版本有些权限除了在manifest文件中静态添加,还需要动态请求 具体请求方法如下(以拨打电话为例): 方法1: 这种方法是直接呼出电话 在ma ...
- Android 6.0及以上版本动态申请权限,11权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//安卓11文件权限// 先判断有没有权限if (Environment.isExter ...
- android动态申请悬浮框权限,Android创建悬浮窗的完整步骤
在Android中想要创建悬浮窗分为三步 1.申请权限 2.使用服务启动悬浮窗 3.设置悬浮窗参数并添加进WindowManager 下面话不多说了,来一起看看详细的实现过程 申请权限 首先需要申请悬 ...
- Android 动态申请应用权限
一.概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运 ...
最新文章
- 不擅长物理科学计算机吗,物理难学否?答案因人而异,高二同学3 + 3选科莫要太随意...
- Python按键精灵自动化_安装Python
- mysql asp.net core_基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入...
- 最良心不过AMD AM4接口下一代可继续用
- 发现一个HTML Form提交的小问题,不知道大家是不是都注意到了
- eeupdate 更新MAC地址
- Apache JMeter使用教程
- 未能加载文件或程序集问题
- 15天助你掌握问卷统计与Spss实战
- 苹果开发者账号注册、管理注意事项
- UPnP和DLNA协议
- 【评测】照胶的仪器选购
- 苹果手机怎么更换微信视频铃声
- 数据结构学习(考研408)
- 2022应届校招面试总结
- 【DBA】 Oracle 学习路线
- 【博客566】Linux内核系统日志查看方式汇总
- 【Codeforces Round #466】E. Cashback DP+ST表
- geoserver SLD 面状图斑填充样式
- java完成经典坦克大战项目源码