gpt4 book ai didi

android - 如何让手机从 Qt Android 振动

转载 作者:行者123 更新时间:2023-11-30 05:44:44 26 4
gpt4 key购买 nike

我正在使用 Qt 部署 Android 应用。

我想让手机振动。所以我尝试执行 this code使用 QAndroidJniObject

Java代码:

import android.os.Vibrator;
Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(500);

C++ Qt代码:

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

if ( activity.isValid() )
{
QAndroidJniObject serviceName = QAndroidJniObject::fromString("android.content.Context.VIBRATOR_SERVICE");
if ( serviceName.isValid() )
{
QAndroidJniObject vibrator = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceName.object<jobject>());
if ( vibrator.isValid() )
{
vibrator.callMethod<void>("vibrate", "(J)V", 1000);
}
// vibrator is actually not valid!
}
}

vibrator.isValid() 返回 false,我不知道为什么....这不是我第一次尝试做这种事情,但在这里,我无法让它工作.

注意:我的应用设置了android.permission.VIBRATE

最佳答案

从我可以收集到的信息 the documentation , QAndroidJniObject::fromString 返回一个包含 Java 字符串的对象,其中包含您提供给 fromString 的内容。

所以您现在所做的就好像您在 Java 中完成了以下操作:

Object vibrator = getSystemService("Context.VIBRATOR_SERVICE");

当你真正想要的是:

Object vibrator = getSystemService(Context.VIBRATOR_SERVICE);

因此,与其使用 QAndroidJniObject::fromString,您可能应该这样做:

QAndroidJniObject serviceName = 
QAndroidJniObject::getStaticObjectField<jstring>(
"android/content/Context",
"VIBRATOR_SERVICE");

之后您可能需要删除对 serviceName 的本地引用。

关于android - 如何让手机从 Qt Android 振动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29644280/

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