前言

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 动态申请权限相关推荐

  1. Unity2019中的android动态申请权限(Permissions)

    请使用最新文章: Unity2022中的android权限处理(Permissions) 动态权限,权限弹窗 注意事项: 1.因为新规等因素需要提前弹出游戏自己的权限描述界面 2.玩家连续多次拒绝权限 ...

  2. android 动态申请权限_你真的了解Android权限机制吗?

    码个蛋(codeegg)第 610 次推文 作者:FeelsChaotic 原文:https://www.jianshu.com/p/a17c8bed79d9 前言 Android将安全设计贯穿系统架 ...

  3. android动态申请权限第三方库,Android 关于动态申请权限

    第一种方式:引入三方库,利用第三方申请权限 1.引入三方库: api'com.tbruyelle.rxpermissions2:rxpermissions:0.9.3@aar' 2.调用(当然你需要什 ...

  4. Android动态申请权限(拨打电话)

    Android权限大全: https://www.cnblogs.com/diyishijian/p/5629545.html Android权限有上百个,那么我们如何在调用权限的时候,判断app是否 ...

  5. android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...

    通过自定义插件方式实现Android平台的动态申请权限功能 在上一章中完成了在Mui中调用Android原生的动态权限请求功能(Android动态申请权限的问题).虽然说完成了功能,但是在使用上并不是 ...

  6. Android如何动态申请权限(打电话)

    Android动态申请权限(打电话) android 高版本有些权限除了在manifest文件中静态添加,还需要动态请求 具体请求方法如下(以拨打电话为例): 方法1: 这种方法是直接呼出电话 在ma ...

  7. Android 6.0及以上版本动态申请权限,11权限

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//安卓11文件权限// 先判断有没有权限if (Environment.isExter ...

  8. android动态申请悬浮框权限,Android创建悬浮窗的完整步骤

    在Android中想要创建悬浮窗分为三步 1.申请权限 2.使用服务启动悬浮窗 3.设置悬浮窗参数并添加进WindowManager 下面话不多说了,来一起看看详细的实现过程 申请权限 首先需要申请悬 ...

  9. Android 动态申请应用权限

    一.概述 Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户.在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运 ...

最新文章

  1. 不擅长物理科学计算机吗,物理难学否?答案因人而异,高二同学3 + 3选科莫要太随意...
  2. Python按键精灵自动化_安装Python
  3. mysql asp.net core_基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入...
  4. 最良心不过AMD AM4接口下一代可继续用
  5. 发现一个HTML Form提交的小问题,不知道大家是不是都注意到了
  6. eeupdate 更新MAC地址
  7. Apache JMeter使用教程
  8. 未能加载文件或程序集问题
  9. 15天助你掌握问卷统计与Spss实战
  10. 苹果开发者账号注册、管理注意事项
  11. UPnP和DLNA协议
  12. 【评测】照胶的仪器选购
  13. 苹果手机怎么更换微信视频铃声
  14. 数据结构学习(考研408)
  15. 2022应届校招面试总结
  16. 【DBA】 Oracle 学习路线
  17. 【博客566】Linux内核系统日志查看方式汇总
  18. 【Codeforces Round #466】E. Cashback DP+ST表
  19. geoserver SLD 面状图斑填充样式
  20. java完成经典坦克大战项目源码

热门文章

  1. 一文弄懂各种loss function
  2. ceil与intval区别
  3. Redis主从同步和持久化
  4. CentOS 7.0安装Nvidia驱动
  5. Windows Server 2012改造成Windows8的方法(转载)
  6. 我爱你,与你无关——登录系统的逻辑与结构
  7. 再谈 查询长期未登录AD的用户
  8. 编写完html文件怎么输出,怎么编写一个html文件?在线等!!
  9. 和功率的计算公式_电机电流的计算公式是什么,具体怎么计算?
  10. 10 个 GitHub 上超火和超好看的管理后台模版,后台管理项目有着落了