android: Fix vibrate
This commit is contained in:
parent
009e69c456
commit
8f6ed7c8a0
@ -145,7 +145,7 @@ QString PlatformHelperAndroid::deviceManufacturer() const
|
|||||||
|
|
||||||
void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType)
|
void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType)
|
||||||
{
|
{
|
||||||
int duration;
|
jlong duration;
|
||||||
switch (feedbackType) {
|
switch (feedbackType) {
|
||||||
case HapticsFeedbackSelection:
|
case HapticsFeedbackSelection:
|
||||||
duration = 10;
|
duration = 10;
|
||||||
@ -164,13 +164,28 @@ void PlatformHelperAndroid::vibrate(PlatformHelper::HapticsFeedback feedbackType
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJniObject vibrator = context.callMethod<jobject>("getSystemService", "Landroid/content/Context;Ljava/lang/String;", QJniObject::fromString("vibrator").object());
|
QJniObject vibrator = context.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;", QJniObject::fromString("vibrator").object());
|
||||||
if (!vibrator.isValid()) {
|
if (!vibrator.isValid()) {
|
||||||
qDebug() << "Could not get vibrator service.";
|
qDebug() << "Could not get vibrator service.";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the vibrate method
|
const jint sdkInt = QJniObject::getStaticField<jint>("android/os/Build$VERSION", "SDK_INT");
|
||||||
|
if (sdkInt >= 26) {
|
||||||
|
const jint defaultAmplitude = QJniObject::getStaticField<jint>("android/os/VibrationEffect", "DEFAULT_AMPLITUDE");
|
||||||
|
QJniObject vibrationEffect = QJniObject::callStaticObjectMethod("android/os/VibrationEffect",
|
||||||
|
"createOneShot",
|
||||||
|
"(JI)Landroid/os/VibrationEffect;",
|
||||||
|
duration,
|
||||||
|
defaultAmplitude);
|
||||||
|
if (vibrationEffect.isValid()) {
|
||||||
|
vibrator.callMethod<void>("vibrate", "(Landroid/os/VibrationEffect;)V", vibrationEffect.object());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
qDebug() << "Falling back to legacy vibrate API, vibration effect invalid.";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback for pre-API 26 or if creating the vibration effect failed
|
||||||
vibrator.callMethod<void>("vibrate", "(J)V", duration);
|
vibrator.callMethod<void>("vibrate", "(J)V", duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user