Я пытаюсь связать два приложения для Android (на базе Qt) с намерением, и оно не работает должным образом.
Это два приложения, настольное приложение и приложение возврата, и здесь у вас есть манифест
Настольный манифест
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Desktop" android:screenOrientation="landscape" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
Обратный манифест
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Return" android:screenOrientation="landscape" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
Я пытаюсь использовать этот код из настольного приложения, пытаюсь вызвать приложение возврата (оба в Qt + Android)
QString packageName="org.qtproject.qt5.android.bindings.QtActivity";
QString className="Return";
qDebug() << "Start app: " <<packageName <<", "<<className;
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 jPackageName = QAndroidJniObject::fromString(packageName);
QAndroidJniObject jClassName = QAndroidJniObject::fromString(className);
if ( jPackageName.isValid() && jClassName.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;",
jPackageName.object<jstring>(),jClassName.object<jstring>());
jint flag = QAndroidJniObject::getStaticField<jint>(
"android/content/Intent",
"FLAG_ACTIVITY_NEW_TASK");
intent.callObjectMethod("setFlags", "(I)V",flag);
// Equivalent to Jave code: 'startActivity(intent);'
QAndroidJniEnvironment env;
activity.callMethod<void>(
"startActivity",
"(Landroid/content/Intent;)V",
intent.object<jobject>());
if (env->ExceptionCheck()) {
qDebug() << "Intent not found!";
env->ExceptionClear(); // TODO: stupid method! Remove this!
}
} else {
qDebug() << "Action is not valid";
}
} else {
qDebug() << "Intent is not valid";
}
} else {
qDebug() << "Activity is not valid";
}
Я всегда получаю "Намерение не найдено!"
Заранее спасибо, Серхио