2016-08-02 3 views
0

私のアプリケーションをAndroid 6.0に対応させる新しいruntimePermission機能を使用する必要があります。現在、Qtはこれをサポートしていません。runtimePermissionsのQtでjava-functionsを呼び出す

は私が明示的に、私はいくつかのネイティブJavaコードを使用する必要がありますと思う:ContextCompat.javaとそれぞれ

ActivityCompat.javaから

checkSelfPermission and requestPermissions 

これを行う方法を経由しているようですここ

#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-Appにリンクされていないと思います。

Javaファイルであるか、私のQtコードである可能性がありますが、わかりません。

これを行う正しい方法は何ですか?

答えて

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"; 
関連する問題