在Qt中为runtimePermissions调用java函数

时间:2016-08-02 08:31:29

标签: java android qt permissions

为Android 6.0准备好我的应用程序我需要使用新的runtimePermission功能。 Qt,目前还不支持这个。

我认为我必须明确地使用一些本机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文件,这可能是个问题吗?

&#39; res&#39;无论是否授予权限,始终为0(0 =授予permissen)。所以我的方法似乎有点奏效,但不是它应该的方式。

我猜,checkSelfPermission没有链接到我的Qt-App,即使是从那里调用它。

可能是Java文件,也可能是我的Qt代码,我不确定。

那么这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

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";