Ich habe folgendes Problem: Auf Android ruft meine Qt-basierte App (Qt 5.4.1 für mobile) eine externe Aktivität durch einen expliziten starten Absicht. Dies funktioniert sehr gut, wenn keine Daten an die Absicht angehängt werden. Aber wenn ich putExtra zum Anhängen eines Strings usw. verwende, findet die Zielaktivität diese Daten nicht.Aufruf von externen Aktivitäten durch (explizite) Absicht von Qt App auf Android - putExtra funktioniert nicht
Ausschnitt aus dem Qt-App:
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
if (activity.isValid())
{
QAndroidJniObject intent("android/content/Intent", "()V");
if (intent.isValid())
{
QAndroidJniObject action = QAndroidJniObject::fromString("test.app.DO_SOMETHING");
if (action.isValid())
{
intent.callObjectMethod("setAction",
"(Ljava/lang/String;)Landroid/content/Intent;",
action.object<jobject>());
QAndroidJniObject subject = QAndroidJniObject::fromString("test_subject");
QAndroidJniObject text = QAndroidJniObject::fromString("test_text");
jint flag = QAndroidJniObject::getStaticField<jint>("android/content/Intent",
"FLAG_GRANT_READ_URI_PERMISSION");
intent.callObjectMethod("addFlags", "(I)V", flag);
intent.callObjectMethod("putExtra",
"(Ljava/lang/String;Ljava/lang/string;)Landroid/content/Intent;",
subject.object<jstring>(),
text.object<jstring>());
if (intent.isValid())
activity.callObjectMethod("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>());
}
}
}
Ausschnitt aus dem Java-Ziel-App, die die beigefügten Daten zu erhalten versucht:
public class Test_Activity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
...
Intent intent = getIntent();
String text = intent.getStringExtra("test_subject");//is null
Bundle bundle = intent.getExtras();//is null
...
}
}
Snippet AndroidManifest.xml (Ziel Java-Anwendung):
<intent-filter>
<action android:name="test.app.DO_SOMETHING" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Ich habe eine Weile versucht, es zu laufen, aber es ist fehlgeschlagen. Was mache ich falsch? Könnte es Erlaubnis oder Flagge fehlen?
Bitte helfen. Danke vielmals.