沾益住房和城乡建设局网站,网站建设亿玛酷技术,做商城网站哪个好,清远专业网页设计培训报价描述 当需要访问到设备硬件时#xff0c; 涉及到Android权限#xff0c;所以需要进行权限申请#xff0c; 申请完之后访问常常发现权限不足#xff0c; 为什么呢#xff1f; 1. 从Qt库角度看问题#xff1a;
无论是 QCoreApplication::requestPermission [since 6.5] te…描述 当需要访问到设备硬件时 涉及到Android权限所以需要进行权限申请 申请完之后访问常常发现权限不足 为什么呢 1. 从Qt库角度看问题
无论是 QCoreApplication::requestPermission [since 6.5] template void QCoreApplication::requestPermission(const QPermission permission, Functor functor)
还是 QtAndroidPrivate::requestPermission QFutureQtAndroidPrivate::PermissionResult QtAndroidPrivate::requestPermission(const QString permission)
从官方库接口定义来说 权限请求都是异步的或者QFuture或者设置槽函数。
2. Android 开发文档
requestPremission
提供了onRequestPermissionsResult 用于当用户同意权限或者拒绝权限之后的调用 其实可以想象得到当申请权限时需要等待用户点击 所以这是需要一个过程的。
3. 参考Qt示例中的方式
举例如下, 请求权限 请求完毕之后再回调init初始化 下面是一个camera的请求权限示例当checkPremission函数检查权限完毕之后 没有权限则调用requestPremission申请权限申请完毕之后槽函数还是init再执行checkPremission… , 直到用户同意权限申请。
#include mainwindow.h
#include ui_mainwindow.h
#ifdef Q_OS_ANDROID
#include QPermissions
#endif#include QCameraDevice
#include QCamera
#include QImageCapture
#include QMediaCaptureSession
#include QMediaDevices
#include QMediaMetaData
#include QMediaRecorderMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);init();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::init()
{
#ifdef Q_OS_ANDROIDQCameraPermission cameraPermission;switch (qApp-checkPermission(cameraPermission)){case Qt::PermissionStatus::Undetermined:qApp-requestPermission(cameraPermission, this, MainWindow::init);qDebug() requestPermission...;return;case Qt::PermissionStatus::Denied:qWarning(Camera permission is not granted!);return;case Qt::PermissionStatus::Granted:break;}
#endifsetCamera(QMediaDevices::defaultVideoInput());
}void MainWindow::setCamera(const QCameraDevice cameraDevice)
{m_camera.reset(new QCamera(cameraDevice));m_captureSession.setCamera(m_camera.data());connect(m_camera.data(), QCamera::activeChanged,this, [](){qDebug().noquote() [camera] activeChanged;});connect(m_camera.data(), QCamera::errorOccurred,this, [](){qDebug().noquote() [camera] errorOccurred: m_camera-errorString();});if (!m_imageCapture) {m_imageCapture.reset(new QImageCapture);m_captureSession.setImageCapture(m_imageCapture.get());connect(m_imageCapture.get(), QImageCapture::readyForCaptureChanged,this, [](){qDebug().noquote() [imageCapture] readyForCaptureChanged;});connect(m_imageCapture.get(), QImageCapture::imageCaptured,this, [](){qDebug().noquote() [imageCapture] imageCaptured;});connect(m_imageCapture.get(), QImageCapture::imageSaved,this, [](){qDebug().noquote() [imageCapture] imageSaved;});connect(m_imageCapture.get(), QImageCapture::errorOccurred,this, [](){qDebug().noquote() [imageCapture] errorOccurred: m_imageCapture-errorString() ;});}m_captureSession.setVideoOutput(ui-videoWidget);m_camera-start();
}