java - 在 Qt 中调用 java 函数以获得运行时权限

标签 java android qt permissions

为了让我的应用程序为 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/

相关文章:

java - 在 Azure DevOps 管道中为测试用例创建特定工作项(Bug)--Selenium

java - 如何从头到尾读取一个文件?

Java Swing + 线程

android - 无法设法 requestFocus 微调器

c++ - Qt/C++ - 跟踪所有 QList<QProcess>

c++ - 我如何将 Octave (matlab 克隆)与 qt creator 集成

java - Java 按键对 HashMap 进行排序

java - 避免点击完整布局

Android - 将用户拍摄的照片添加到 ListView 中

c++ - 需要帮助使用 QThread 的多线程应用程序