为了让我的应用为Android6.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;
}我将SDK路径中的ContextCompat复制到我的ResourceFolder中。我没有为我的应用程序创建额外的java文件,这会不会是个问题?
无论是否授予权限,'res‘的返回值始终为0 (0 =已授予权限)。因此,我的方法似乎在某种程度上是有效的,但不是以它应该采用的方式。
我猜,checkSelfPermission没有链接到我的Qt应用程序,即使它是从那里调用的。
可能是Java文件,也可能是我的Qt代码,我不确定。
那么,什么才是正确的方法呢?
发布于 2017-06-24 19:10:37
尝试以下操作:
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";https://stackoverflow.com/questions/38715452
复制相似问题