#include "vibration.h" #include Vibration::Vibration(QObject *parent) : QObject(parent) { #ifdef ANDROID activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;"); QAndroidJniObject vibroString = QAndroidJniObject::fromString("vibrator"); QAndroidJniObject appctx = activity.callObjectMethod("getApplicationContext","()Landroid/content/Context;"); vibratorService = appctx.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;", vibroString.object()); #endif } void Vibration::vibrate(int milliseconds) { #ifdef ANDROID if (vibratorService.isValid()) { jlong ms = milliseconds; jboolean hasvibro = vibratorService.callMethod("hasVibrator", "()Z"); if (hasvibro) { vibratorService.callMethod("vibrate", "(J)V", ms); } } else { qDebug() << "No vibrator service available"; } jint notifcationType = QAndroidJniObject::getStaticField("android/media/RingtoneManager", "TYPE_NOTIFICATION"); QAndroidJniObject notification = QAndroidJniObject::callStaticObjectMethod("android/media/RingtoneManager", "getDefaultUri", "(I)Landroid/net/Uri;", notifcationType); if ( notification.isValid() ) { // Note that package and class names needs to be separated with '/' and not '.' QAndroidJniObject ring = QAndroidJniObject::callStaticObjectMethod("android/media/RingtoneManager", "getRingtone", "(Landroid/content/Context;Landroid/net/Uri;)Landroid/media/Ringtone;", activity.object(), notification.object()); if ( ring.isValid() ) { ring.callMethod("play", "()V"); } } #else Q_UNUSED(milliseconds); #endif }