通过QAndroidJniObject打开Android设置



我正在开发一个Qt应用程序,并依靠QAndroidJniObject类与底层java层进行交互。我想要一个按钮在我的应用程序打开android设置管理器。我暂时的解决方案是创建一个意图,设置它的动作,并启动一个活动与该意图:

const QAndroidJniObject action = QAndroidJniObject::fromString("android.provider.Settings.ACTION_SETTINGS");
QAndroidJniObject intent = QAndroidJniObject("android.content.Intent");
intent.callObjectMethod("setAction", "(Ljava/lang/String;)Landroid/content/Intent;", action.object<jstring>());
QtAndroid::startActivity(intent.object<jobject>(), requestType, this);

然而,当我从qml按钮调用该函数时,应用程序崩溃了

JNI DETECTED ERROR IN APPLICATION: JNI NewString called with pending exception android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.provider.Settings.ACTION_SETTINGS }

此外,对于其他活动,例如打开文档,通过将前面代码中的第1行替换为:

const QAndroidJniObject action = QAndroidJniObject::fromString("android.content.Intent.ACTION_OPEN_DOCUMENT");

我的理解是操作系统正在寻找一个能够执行指定操作的活动,并且这两个操作都可以由操作系统本身的基本活动自动执行,但这似乎不是真的。我错过了什么?

我发现了错误,我没有正确创建action。因为我使用QAndroidJniObject::fromString,我应该把动作作为字符串传递,而不是动作名称。因此,根据文档,正确的参数是"android.settings.SETTINGS"(即变量的值),而不是它的名称"android.provider.Settings.ACTION_SETTINGS"

最新更新