为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代码,我不确定。
那么这样做的正确方法是什么?
答案 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";