Mam następujący problem: Na Androidzie moja aplikacja oparta na Qt (Qt 5.4.1 dla urządzeń mobilnych) wywołuje aktywność zewnętrzną poprzez uruchomienie jawnego zamiar. Działa to bardzo dobrze w przypadku, gdy żadne dane nie są dołączone do intencji. Ale kiedy używam putExtra do dołączenia ciągu znaków itp. Aktywność docelowa nie znajduje tych danych.Wywołanie aktywności zewnętrznej według (jawnego) zamiaru z aplikacji Qt na Androida - putExtra nie działa
fragment aplikacji Qt:
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>());
}
}
}
fragment docelowej aplikacji Java, która próbuje uzyskać załączony dane:
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
...
}
}
fragment AndroidManifest.xml (destination aplikacji Java):
<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>
Próbowałem chwilę, aby go uruchomić, ale nie udało się. Co robię źle? Czy może brakować pozwolenia lub flagi?
Proszę o pomoc. Wielkie dzięki.