Как заставить телефон вибрировать от Qt Android
Я развертываю приложение Android с помощью Qt.
Я бы хотел, чтобы телефон вибрировал. Поэтому я пытаюсь выполнить этот код с помощью 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
задавать
1 ответ
Из того, что я мог почерпнуть из документации, 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
после этого.