From ac1620137f2bb804159afcee90f0dddffdcbf095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Thu, 10 Oct 2013 14:24:33 +0200 Subject: [PATCH] Android: Add simple haptic feedback support --- android/app-android.cpp | 4 ++- .../libnative/NativeActivity.java | 30 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/android/app-android.cpp b/android/app-android.cpp index 27ce230a6e..ef858beed9 100644 --- a/android/app-android.cpp +++ b/android/app-android.cpp @@ -64,7 +64,9 @@ void ShowKeyboard() { void Vibrate(int length_ms) { frameCommand = "vibrate"; - frameCommandParam = "100"; + char temp[32]; + sprintf(temp, "%i", length_ms); + frameCommandParam = temp; } void LaunchBrowser(const char *url) { diff --git a/android/src/com/henrikrydgard/libnative/NativeActivity.java b/android/src/com/henrikrydgard/libnative/NativeActivity.java index b25e816435..30e922fa18 100644 --- a/android/src/com/henrikrydgard/libnative/NativeActivity.java +++ b/android/src/com/henrikrydgard/libnative/NativeActivity.java @@ -29,6 +29,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.os.Vibrator; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; @@ -107,6 +108,8 @@ public class NativeActivity extends Activity { // audioFocusChangeListener to listen to changes in audio state private AudioFocusChangeListener audioFocusChangeListener; private AudioManager audioManager; + + private Vibrator vibrator; public static boolean inputBoxCancelled; @@ -237,7 +240,10 @@ public class NativeActivity extends Activity { } } - + vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); + if (Build.VERSION.SDK_INT >= 11) { + checkForVibrator(); + } /* editText = new EditText(this); editText.setText("Hello world"); @@ -246,6 +252,16 @@ public class NativeActivity extends Activity { */ // inputBox("Please ener a s", "", "Save"); } + + // Need API 11 to check for existence of a vibrator? Zany. + @TargetApi(11) + public void checkForVibrator() { + if (Build.VERSION.SDK_INT >= 11) { + if (!vibrator.hasVibrator()) { + vibrator = null; + } + } + } @Override public void onCreate(Bundle savedInstanceState) { @@ -626,6 +642,18 @@ public class NativeActivity extends Activity { inputMethodManager.toggleSoftInputFromWindow(mGLSurfaceView.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0); } else if (command.equals("inputBox")) { inputBox(params, "", "OK"); + } else if (command.equals("vibrate")) { + if (vibrator != null) { + int milliseconds = 50; + if (params != "") { + try { + milliseconds = Integer.parseInt(params); + } catch (NumberFormatException e) { + milliseconds = 50; + } + } + vibrator.vibrate(milliseconds); + } } else { Log.e(TAG, "Unsupported command " + command + " , param: " + params); }