Ho il seguente problema: Su Android la mia app basata su Qt (Qt 5.4.1 per dispositivi mobili) chiama un'attività esterna avviando un esplicito intento. Funziona molto bene nel caso in cui nessun dato sia collegato all'intento. Ma quando uso putExtra per collegare una stringa, ecc., L'attività di destinazione non trova questi dati.Chiamare attività esterna per intento (esplicito) dall'app Qt su Android - putExtra non funziona
frammento di app 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>());
}
}
}
frammento di destinazione applicazione Java, che cerca di ottenere i dati in allegato:
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
...
}
}
frammento di AndroidManifest.xml (destinazione Java app):
<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>
Ho provato un po 'a farlo funzionare ma non è riuscito. Cosa sto facendo di sbagliato? Potrebbe mancare il permesso o la bandiera?
Per favore aiuto. Molte grazie.