Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让手机在Qt Android上振动_Android_C++_Qt - Fatal编程技术网

如何让手机在Qt Android上振动

如何让手机在Qt Android上振动,android,c++,qt,Android,C++,Qt,我正在使用Qt部署Android应用程序 我想让电话震动一下。所以我尝试使用QAndroidJniObject执行 Java代码: import android.os.Vibrator; Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE); v.vibrate(500); C++Qt代码: QAndroidJniObject activity = QAndroidJniObject::c

我正在使用Qt部署Android应用程序

我想让电话震动一下。所以我尝试使用
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!
    }
}
QAndroidJniObject activity=QAndroidJniObject::callStaticObjectMethod(“org/qtproject/qt5/android/qtnotive”,“activity”,“Landroid/app/activity;”);
if(activity.isValid())
{
QAndroidJniObject serviceName=QAndroidJniObject::fromString(“android.content.Context.可控震源_服务”);
if(serviceName.isValid())
{
QAndroidJniObject可控震源=activity.callObjectMethod(“getSystemService”,“Ljava/lang/String;”)Ljava/lang/Object;“,serviceName.Object());
if(可控震源.isValid())
{
振捣器.振捣法(“振捣”,J)V“,1000);
}
//振动器实际上是无效的!
}
}
可控震源.isValid()
返回false,我不知道为什么……这不是我第一次尝试做这种事情,但在这里,我无法让它工作


注意:我的应用程序具有android.permission.Vibrationset

根据我可以从中收集到的信息,
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");
QAndroidJniObject服务名称=
QAndroidJniObject::getStaticObjectField(
“安卓/内容/上下文”,
“振动器服务”);

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

感谢您的回复,我无法使用Qt 5.2.1编译这段代码。错误是未定义对“\u jstring*QAndroidJniObject::getStaticField(char const*,char const*)”的引用。Oops。这可能是
getStaticObjectField
而不是
getStaticField
。顺便说一下,手机不会振动:-(即使现在达到并执行了振动代码。有什么想法吗?振动通话模式必须从
(I)V
更改为
(J)V
。编辑了原始帖子。