gpt4 book ai didi

android - 从 Android 上的 Qt 应用程序通过(显式) Intent 调用外部 Activity - putExtra 不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:35 24 4
gpt4 key购买 nike

我有以下问题:在 Android 上,我基于 Qt 的应用程序(Qt 5.4.1 for mobile)通过启动显式 Intent 调用外部 Activity 。这在没有数据附加到 Intent 的情况下非常有效。但是当我使用 putExtra 附加字符串等时,目标 Activity 找不到此数据。

Qt 应用程序 fragment :

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

尝试获取附加数据的 Java 目标应用程序 fragment :

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

...
}
}

AndroidManifest.xml 的 fragment (目标 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>

我试了一段时间让它运行但失败了。我做错了什么?它可能缺少权限或标记吗?

请帮忙。非常感谢。

最佳答案

可能我回答这个问题已经很晚了,但对于正在寻找相同功能的人来说,我的想法可能会有所帮助。这段代码对我来说工作得很好,我能够使用 Intent 接收数据。

#include<QtAndroidExtras/QtAndroid>
#include<QtAndroidExtras/QAndroidJniObject>
#include<QtAndroidExtras/QAndroidIntent>
#include<QtAndroidExtras>

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("url");
QAndroidJniObject text = QAndroidJniObject::fromString("http://www.google.com");


intent.callObjectMethod("putExtra",
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
subject.object(),
text.object());

if (intent.isValid())
activity.callMethod<void>("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>());
}
}
}

我对您的代码进行了一些更改使用此有用 QT Android Blog

关于android - 从 Android 上的 Qt 应用程序通过(显式) Intent 调用外部 Activity - putExtra 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com