在尝试使用这段代码振动设备时,我在Android上遇到了2个QT问题:
1 - 设备开始连续振动,停止它的唯一方法是重启设备!我必须调用vibrator.callMethod(“cancel”)以编程方式停止它。
2 - 如果应用程序没有关注,设备不会振动。然后当它再次聚焦时,设备开始振动很长时间并停止(就像振动请求被堆叠然后一个接一个地执行)
我想即使移动设备闲置或者没有关注应用程序,我也必须处理振动设备的服务。 我没有在QT环境中找到任何示例。 我想从服务器收到警报时振动设备。
void MainWindow::android_vibrate()
{
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
if ( activity.isValid() )
{
// This gets the string value of the VIBRATOR_SERVICE field.
QAndroidJniObject serviceField = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Context", "VIBRATOR_SERVICE");
if ( serviceField.isValid() )
{
QAndroidJniObject vibrator = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceField.object<jobject>());
if ( vibrator.isValid() )
{
// Note that vibrate takes a long and not an int as argument.
long duration = 200;
vibrator.callMethod<void>("vibrate", "(J)V", duration );
}
}
}
}