2016-08-02 7 views
0

, um meine App für Android 6.0 bereit zu machen Ich brauche die neue runtimePermission-Funktion. Qt unterstützt dies derzeit noch nicht.Aufruf von Java-Funktionen in Qt für runtimePermissions

Ich glaube, ich werde einige native Java-Code verwenden müssen, ausdrücklich:

checkSelfPermission and requestPermissions 

vom ContextCompat.java und ActivityCompat.java bzw.

die Art und Weise, dies zu tun scheint über zu sein

#include <QtAndroidExtras> and QAndroidJniObject::callStaticMethod 

hier ist das, was ich von meinem einfachen Testprogramm bisher haben:

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

Ich habe das ContextCompat aus dem SDK-Pfad in meinen ResourceFolder kopiert. Ich habe keine extra Java-Datei für meine App erstellt, möglicherweise ein Problem?

Die Rückgabe von 'res' ist immer 0 (0 = erlaubt), unabhängig davon, ob die Berechtigung erteilt wurde oder nicht. Mein Ansatz scheint also etwas zu funktionieren, aber nicht so, wie es sein sollte.

Ich würde vermuten, dass die checkSelfPermission nicht mit meiner Qt-App verknüpft ist, obwohl sie von dort aufgerufen wird.

Könnte die Java-Datei sein oder mein Qt-Code, bin ich mir nicht sicher.

Also, was ist der richtige Weg, dies zu tun?

Antwort

1

Versuchen Sie Folgendes:

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