Qt for Android 动态申请权限

版权声明: https://blog.csdn.net/luoyayun361/article/details/81659984

前言

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

猜你喜欢

转载自blog.csdn.net/luoyayun361/article/details/81659984
今日推荐