Extern help required for android vibration
Monkey Targets Forums/Android/Extern help required for android vibration| 
 | ||
| Hey guys, The documentation is cryptic to me and I've also looked at S3nk's QRCode monkey and native .java files to try implement the android vibration functionality in my game. I based it off diddy's android.java file https://code.google.com/p/diddy/source/browse/src/diddy/native/diddy.android.java My java file (game.android.java) is as follows: 
import android.os.Vibrator;
class _game {
	public static Vibrator vibrator;
	public static String inputString = "";
	
	public static void startVibrate(int millisec)
	{
		try {
			vibrator = (Vibrator)BBAndroidGame._androidGame._activity.getSystemService(Context.VIBRATOR_SERVICE);
			if (vibrator!=null)
				vibrator.vibrate(millisec);
		} catch (java.lang.SecurityException e) {
			android.util.Log.e("[Monkey]", "SecurityException: " + android.util.Log.getStackTraceString(e));
		}
	}
	public static void stopVibrate()
	{
		try {
			if (vibrator!=null)
				vibrator.cancel();
		} catch (java.lang.SecurityException e) {
			android.util.Log.e("[Monkey]", "SecurityException: " + android.util.Log.getStackTraceString(e));
		}
	}
}
And my monkey source is as follows: 
Strict
Import mojo
Import "native/game.${TARGET}.${LANG}"
Extern
	'Class game = "_game"
	'	Function startVibrate:game(mill:Int)
	'	Function stopVibrate:game()
	'End
	Function startVibrate:Int(mill:Int) = "_game.startVibrate"
	Function stopVibrate:Int() = "_game.stopVibrate"
Public ' Back to monkey code
As can be seen above, I've tried the extern code in two ways. In the first commented out way, I tried calling it in my monkey source like so: 
If Enemy.DetectHit(x, y)
  #If TARGET = "android"
    game.startVibrate(1000)
   #End
End
And in the latter implementation above, the same, but just using "startVibrate(1000)" without the game. preceding it. I've tried it on my tablet and I get no vibration at all. Anyone know what I am doing wrong? | 
| 
 | ||
| You need to a permission to the AndroidManifest to make vibrate work: <uses-permission android:name="android.permission.VIBRATE" /> (Also remember to add the MIT license when using Diddy code) | 
| 
 | ||
| Thanks Steve! I'll give it a go tonight. Don't worry, I'll include the licence 😀 | 
| 
 | ||
| Good luck :) Also if you want to add the AndroidManifest stuff via code, in your MonkeyX code you can do something like this: #ANDROID_MANIFEST_APPLICATION+="<activity android:name=~qcom.google.ads.AdActivity~q android:configChanges=~qkeyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize~q />" So for the vibrate you could try: #ANDROID_MANIFEST_MAIN+="<uses-permission android:name=~qandroid.permission.VIBRATE~q />" As you need to add it to the "main" part of the manifest. | 
| 
 | ||
| Thanks a lot Steve. That worked a treat. I added it in the source as in your last example. Now to try get the Xbox 360 desktop controller to vibrate and the Ouya :) | 
| 
 | ||
| Well I was stupid enough to think that vibration is supported on other platforms. No vibration on Ouya, Vita or desktop. Not sure if I can get it to work for Xna builds yet but still looking into it. If only there was a universal vibration option for all platforms :) |