открыть настройки Android из приложения QT (com.android.settings)

У меня есть приложение для Android в QT.
Я хотел бы вызвать настройки Android с помощью кнопки.

Я использовал этот код в Java:

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

Есть ли способ вызвать настройки Android с помощью QT C ++?

6

Решение

QAndroidJniObject позволяет создавать объекты JNI из кода Qt C ++.

Например: чтобы получить активность:

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

Например: чтобы создать новое намерение:

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

Затем вы можете пошагово выполнить перевод Java-кода из C ++ ….

Чтобы ответить на ваш конкретный вопрос, просто скопируйте / вставьте этот код:

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

…а потом голосуй! 😉

17

Другие решения

Вот как вы можете открыть детали конкретного приложения (по идентификатору пакета) в Application Manager, используя 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