Open Android settings from QT application (com.android.settings)

I have an Android app in QT. I would like to call with Android settings from a single button.

I used this code in Java:

public void usb(View v){ Intent intent = new Intent(); intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings"); startActivity(intent); } 

Is there a way to invoke android settings using QT C ++?

+6
source share
2 answers

QAndroidJniObject allows you to create JNI objects from Qt C ++ code.

For example: to get activity:

 QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); 

For example: to create a new intent:

 QAndroidJniObject intent("android/content/Intent","()V"); 

Then you can phase the Java executable code from C ++ ....

To answer your specific question, just copy / paste this code:

 QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid if ( activity.isValid() ) { // Equivalent to Jave code: 'Intent intent = new Intent();' QAndroidJniObject intent("android/content/Intent","()V"); if ( intent.isValid() ) { QAndroidJniObject param1 = QAndroidJniObject::fromString("com.android.settings"); QAndroidJniObject param2 = QAndroidJniObject::fromString("com.android.settings.DevelopmentSettings"); if ( param1.isValid() && param2.isValid() ) { // Equivalent to Jave code: 'intent.setClassName("com.android.settings", "com.android.settings.DevelopmentSettings");' intent.callObjectMethod("setClassName","(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",param1.object<jobject>(),param2.object<jobject>()); // Equivalent to Jave code: 'startActivity(intent);' activity.callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object<jobject>()); } } } 

... and then vote !; -)

+17
source

Here's how you can open the details of a specific application (by package ID) in Application Manager using Qt:

 QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); //activity is valid if (activity.isValid()) { QAndroidJniObject param = QAndroidJniObject::fromString("package:com.example.mycoolapp"); // Equivalent to Jave code: 'Uri uri = Uri::parse("...");' QAndroidJniObject uri = QAndroidJniObject::callStaticObjectMethod("android/net/Uri", "parse", "(Ljava/lang/String;)Landroid/net/Uri;", param.object<jstring>()); if (!uri.isValid()) { qWarning("Unable to create Uri object"); return; } QAndroidJniObject packageName = QAndroidJniObject::fromString("android.settings.APPLICATION_DETAILS_SETTINGS"); QAndroidJniObject intent("android/content/Intent","(Ljava/lang/String;)V", packageName.object<jstring>()); if (!intent.isValid()) { qWarning("Unable to create Intent object"); return; } intent.callObjectMethod("addCategory", "(Ljava/lang/String;)Landroid/content/Intent;", QAndroidJniObject::fromString("android.intent.category.DEFAULT").object<jstring>()); intent.callObjectMethod("setData", "(Landroid/net/Uri;)Landroid/content/Intent;", uri.object<jobject>()); activity.callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object<jobject>()); } 
0
source

Source: https://habr.com/ru/post/973065/


All Articles