gpt4 book ai didi

android - Qt 上的 startActivity,没有任何显示

转载 作者:行者123 更新时间:2023-11-29 01:25:28 27 4
gpt4 key购买 nike

我的编码如下。似乎显示了 Android 设置菜单,但什么也没有出来。而且我没有看到任何错误或有关它的日志。我不知道调用 startActivity() 后会发生什么。

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod
("org/qtproject/qt5/android/QtNative",
"activity",
"()Landroid/app/Activity;");

if(activity.isValid()){
QAndroidJniObject p1 = QAndroidJniObject::fromString("com.android.settings");
QAndroidJniObject p2 = QAndroidJniObject::fromString("com.android.settings.DevelopmentSettings");

QAndroidJniObject intent("android/content/Intent", "()V");

if(p1.isValid() && p2.isValid() && intent.isValid()){

qDebug() << "intent create OK and startActivity";

intent.callObjectMethod("setClassName",
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
p1.object<jobject>(),
p2.object<jobject>());
intent.callObjectMethod("startActivity",
"(Landroid/content/Intent;)V",
intent.object<jobject>());
}
}

最佳答案

startActivityActivity 的一个方法类,而不是 Intent .所以它需要在 activity 对象上调用,而不是在 intent 上调用。

intent.callObjectMethod("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>());

必须替换为:

activity.callObjectMethod("startActivity", "(Landroid/content/Intent;)V", intent.object<jobject>());

这是打开 Android 设置菜单的工作代码:

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 param1 = QAndroidJniObject::fromString("com.android.settings");
QAndroidJniObject param2 = QAndroidJniObject::fromString("com.android.settings.DevelopmentSettings");

if ( param1.isValid() && param2.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;",param1.object<jobject>(),param2.object<jobject>());

// Equivalent to Jave code: 'startActivity(intent);'
activity.callObjectMethod("startActivity","(Landroid/content/Intent;)V",intent.object<jobject>());
}
}
}

关于android - Qt 上的 startActivity,没有任何显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34351644/

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