我正在开发一个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自动执行,但这似乎不是真的。
1条答案
按热度按时间xmakbtuz1#
我发现了一个错误,我没有正确地创建
action
。因为我使用的是QAndroidJniObject::fromString
,我应该将action value 作为字符串传递,而不是action name。因此,根据文档,正确的参数是"android.settings.SETTINGS"
(即变量的值),而不是其名称"android.provider.Settings.ACTION_SETTINGS"
。