为了让我的应用程序为 Android 6.0 做好准备,我需要使用新的 runtimePermission 功能。 Qt 目前还不支持此功能。
我想我必须明确地使用一些 native java代码:
checkSelfPermission and requestPermissions
分别来自ContextCompat.java和ActivityCompat.java
执行此操作的方法似乎是通过
#include <QtAndroidExtras> and QAndroidJniObject::callStaticMethod
这是迄今为止我从简单的测试程序中得到的:
void MainWindow::on_pushButton_clicked()
{
jint res = 9999;
QAndroidJniObject javaCall = QAndroidJniObject::fromString("android.permission.CAMERA");
res = QAndroidJniObject::callStaticMethod<jint>("JavaSrc/ContextCompat",
"checkSelfPermission",
"(Ljava/lang/String;)V",
javaCall.object<jstring>());
ui->label->setText(QString::number(res));
qDebug() << Res;
}
我将 ContextCompat 从 SDK 路径复制到我的 ResourceFolder 中。我没有为我的应用程序制作额外的 java 文件,这可能是一个问题吗?
无论是否授予权限,“res”的返回始终为 0(0 = 已授予权限)。所以我的方法似乎有些作用,但不是以它应该的方式。
我猜想, checkSelfPermission 没有链接到我的 Qt 应用程序,即使它是从那里调用的。
可能是 Java 文件,也可能是我的 Qt 代码,我不确定。
那么正确的方法是什么?
最佳答案
尝试以下操作:
QAndroidJniObject javaCall = QAndroidJniObject::fromString("android.permission.READ_PHONE_STATE");
res = QAndroidJniObject::callStaticMethod<jint>("android/support/v4/content/ContextCompat",
"checkSelfPermission",
"(Landroid/content/Context;Ljava/lang/String;)I",
QtAndroid::androidActivity().object(),
javaCall.object<jstring>());
if(res == 0)
qDebug()<<"you have permission";
else
qDebug()<<"you do not have permission";
关于java - 在 Qt 中调用 java 函数以获得运行时权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715452/