c++ 通过QAndroidJniObject打开Android设置

vuktfyat  于 2023-04-08  发布在  Android
关注(0)|答案(1)|浏览(154)

我正在开发一个Qt应用程序,并依赖QAndroidJniObject类与底层java层进行交互。我希望在我的应用程序中有一个按钮来打开Android设置管理器。我的初步解决方案是创建一个Intent,设置其action并使用该Intent启动一个Activity:

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");

这很有效。
我的理解是,操作系统正在寻找一个能够执行指定操作的Activity,并且这两个操作都可以由操作系统本身的基本Activity自动执行,但这似乎不是真的。

xmakbtuz

xmakbtuz1#

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

相关问题