我正在尝试将Qt 5应用程序转换为Qt 6。在Qt 5中,我们可以如下请求Android权限:
QStringList permissions;
//...
QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(permissions);
for (const auto &perm : permissions)
{
if(resultHash[perm] == QtAndroid::PermissionResult::Denied)
{
qDebug() << "Permission denied:" << perm;
return false;
}
}
Qt 6中的等价物是什么?还是使用JNI手动实现这一点的唯一方法?
问候
这是新的Qt6权限API(仍在开发中,但可以使用(:QtAndroidPrivate命名空间
示例:
#include <QtCore/private/qandroidextras_p.h>
bool checkPermission()
{
auto r = QtAndroidPrivate::checkPermission(QtAndroidPrivate::Storage).result();
if (r == QtAndroidPrivate::Denied)
{
r = QtAndroidPrivate::requestPermission(QtAndroidPrivate::Storage).result();
if (r == QtAndroidPrivate::Denied)
return false;
}
return true;
}
Qt6
中还没有权限处理API。然而,它正在制作中。您可以从QTBUG-90498了解情况。看起来它计划在2022年秋季的某个时候发布Qt6.4
。您可以从错误报告中找到一个代码审查链接,这可能有助于您编写自己的实现。
我建议您查看QNativeInterface::QAndroidApplication::runOnAndroidMainThread,您可以使用它在Android UI线程上进行异步调用。