如何从 Qt Android 使手机振动

Posted

技术标签:

【中文标题】如何从 Qt Android 使手机振动【英文标题】:How to make phone vibrate from 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

【问题讨论】:

【参考方案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。编辑了原始帖子。

以上是关于如何从 Qt Android 使手机振动的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何让手机随着音乐播放而振动

如何让Android手机在摇晃时振动?

delphi 手机振动 IOS Android

如何在Android中设置铃声+震动

如何在配置文件处于振动模式时使手机振动或在配置文件处于静音模式时从不响铃并在响铃模式下响铃

Android Studio手机来指定短信就发出震动和铃声?如何编程?