首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Qt for runtimePermissions中调用java函数

在Qt for runtimePermissions中调用java函数
EN

Stack Overflow用户
提问于 2016-08-02 16:31:29
回答 1查看 360关注 0票数 0

为了让我的应用为Android6.0做好准备,我需要使用新的runtimePermission特性。Qt目前还不支持这一点。

我想我必须显式地使用一些原生java代码:

代码语言:javascript
复制
checkSelfPermission and requestPermissions

分别从ContextCompat.java和ActivityCompat.java

实现这一点的方法似乎是通过

代码语言:javascript
复制
#include <QtAndroidExtras> and QAndroidJniObject::callStaticMethod

以下是我迄今为止从我的简单测试程序中获得的内容:

代码语言:javascript
复制
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代码,我不确定。

那么,什么才是正确的方法呢?

EN

回答 1

Stack Overflow用户

发布于 2017-06-24 19:10:37

尝试以下操作:

代码语言:javascript
复制
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";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38715452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档