失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Qt for Android 动态申请权限

Qt for Android 动态申请权限

时间:2021-12-13 13:21:12

相关推荐

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 动态申请权限》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。