日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Qt for Android 动态申请权限

發布時間:2025/1/21 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 动态申请权限的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。