【问题标题】:How to make phone vibrate from Qt Android如何从 Qt Android 使手机振动
【发布时间】:2015-04-15 07:38:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: android c++ qt


    【解决方案1】:

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

    所以你现在所做的就好像你在 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 的本地引用。

    【讨论】:

    • 感谢您的回复,我无法使用 Qt 5.2.1 编译这段代码。错误是undefined reference to '_jstring* QAndroidJniObject::getStaticField&lt;_jstring*&gt;(char const*, char const*)
    • 糟糕。那应该是getStaticObjectField 而不是getStaticField
    • 顺便说一句,手机不振动 :-( 即使现在到达并执行了振动代码。有什么想法吗?
    • 振动呼叫配置文件必须从 (I)V 更改为 (J)V。编辑了原始帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2023-03-26
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多