-
Star
(132)
You must be signed in to star a gist -
Fork
(29)
You must be signed in to fork a gist
-
-
Save aVolpe/707c8cf46b1bb8dfb363 to your computer and use it in GitHub Desktop.
using UnityEngine; | |
using System.Collections; | |
public static class Vibration | |
{ | |
#if UNITY_ANDROID && !UNITY_EDITOR | |
public static AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); | |
public static AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); | |
public static AndroidJavaObject vibrator = currentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator"); | |
#else | |
public static AndroidJavaClass unityPlayer; | |
public static AndroidJavaObject currentActivity; | |
public static AndroidJavaObject vibrator; | |
#endif | |
public static void Vibrate() | |
{ | |
if (isAndroid()) | |
vibrator.Call("vibrate"); | |
else | |
Handheld.Vibrate(); | |
} | |
public static void Vibrate(long milliseconds) | |
{ | |
if (isAndroid()) | |
vibrator.Call("vibrate", milliseconds); | |
else | |
Handheld.Vibrate(); | |
} | |
public static void Vibrate(long[] pattern, int repeat) | |
{ | |
if (isAndroid()) | |
vibrator.Call("vibrate", pattern, repeat); | |
else | |
Handheld.Vibrate(); | |
} | |
public static bool HasVibrator() | |
{ | |
return isAndroid(); | |
} | |
public static void Cancel() | |
{ | |
if (isAndroid()) | |
vibrator.Call("cancel"); | |
} | |
private static bool isAndroid() | |
{ | |
#if UNITY_ANDROID && !UNITY_EDITOR | |
return true; | |
#else | |
return false; | |
#endif | |
} | |
} |
Vibration.Vibrate ( ͡° ͜ʖ ͡°));
Thank you for this, works great!
Works perfect, but i see that the calls are deprecated from API level 26. Any idea how to switch this for using VibrationEffect
object?
I tried doing something like this, but its crashing on the first line:
var jo = new AndroidJavaClass("android.os.VibrationEffect"); // "core.java.android.os.VibrationEffect" is crashing too
var effect = jo.CallStatic<object>("createOneShot", milliseconds, 255);
vibrator.Call("vibrate", effect);
would also like to know the above!
(I would also like to note that this code won't run without the Vibrate permission, which Unity adds automatically when you have Handheld.Vibrate(); somewhere in your code, even when you don't use it.)
(I would ALSO like to note that simply entering plain numbers in the 'duration' field will cast them to INT while the vibration functions require them to be LONG values!)
THANK YOUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU!!!!!!!!!!!!!!!!!!!
I got VibrationEffect working like this:
AndroidJavaObject vibrationEffect = vibrationEffectClass.CallStatic<AndroidJavaObject>(function, args);
vibrator.Call("vibrate", vibrationEffect);
Some license? Or free use?
App crashes for Unity 2017.1.1f1. Someone can confirm?
Handheld.Vibrate();
still working.
The implementation of HasVibrator is wrong. The best way to do that would probably be this:
return vibrator.Call<bool>("hasVibrator");
Thanks a Lot! (y)
Thanks it's working
This doesn't seem to be working for me. I get the following error when running:
Vibration' is missing the class attribute 'ExtensionOfNativeClass'!
I changed the class name from Vibration
-->Vibration1
and that got rid of the error. But when calling Vibration1.Vibrate() the console prints iPhoneUtils.Vibrate()
implying it's using Handheld.Vibrate()
which isn't working for Android.
(I'm using Unity 2018.3.0 and testing w/ UnityRemote 5)
Edit: found out that debugging in UnityRemote does not support vibrations... that's probably the crux of it. When building, Handheld.Vibrate()
worked
This doesn't seem to be working for me either. My application crashes on start, but no notable logs reveal the cause of the crash in logcat.
I'm using Unity 2019.2.9f1, with my minumum API level set to 25, and Mono and .NET 2.0.
Has anyone figured out why this causes it to crash?
Thank you! Works great on Unity 2019.2.8f1, Android 9.
Vibration.Vibrate(100) works like a charm.
Hi all! I've made a drastically improved version.
Script automatically detects Api Level. Checks if Amplitude control (API >= 26) is available. Also supports Predefined Effects (API >= 29).
If API is < 26, legacy functions are used (old api).
Code is available here: github gist link
it worked from the first try
<3<3<3<3<3<3<3<3<3
thank you @aVolpe
Hi. Here made an app based on the script created by ruzrobert above. For dev out there who want to test and tweak how vibration should feel on devices. Available only Android. Can download via Play Store: https://play.google.com/store/apps/details?id=com.maplerr.TestVibration .
Appreciate the code!
Vibration' is missing the class attribute 'ExtensionOfNativeClass'!
I deleted the "static" from "public static class" and added after "class" ": MonoBehaviour"
from
public static class Vibration
to
public class Vibration : MonoBehaviour
Thanks for good class.
in unity2019.4.10f1,
get error c# exception:UnityEngine.AndroidJavaException: java.lang.NoSuchMethodError: no non-static method with name='vibrate' signature='()V' in class Landroid.os.SystemVibrator;
change vibrator.Call("vibrate");
to vibrator.Call("vibrate" ,100);
may fix it
didn't work with Vibration.vibrate(x) but it does with Vibration1.vibrate(x). didn't change the script Vibration.cs. The mystery of informatics ...
Other than that works perfect! thank you!!!
This doesn't seem to be working for me. I get the following error when running:
Vibration' is missing the class attribute 'ExtensionOfNativeClass'!
I changed the class name from
Vibration
-->Vibration1
and that got rid of the error. But when calling Vibration1.Vibrate() the console printsiPhoneUtils.Vibrate()
implying it's usingHandheld.Vibrate()
which isn't working for Android.(I'm using Unity 2018.3.0 and testing w/ UnityRemote 5)
Edit: found out that debugging in UnityRemote does not support vibrations... that's probably the crux of it. When building,
Handheld.Vibrate()
worked
Great code. Worrks well in Unity 2020.1.17f1. Thanks! Be blessed!
Thank you for this, everything works great!
Unity 2020.3.2f1 Personal
Vibration.Vibrate(100);
'Vibration' is missing the class attribute 'ExtensionOfNativeClass'!
how to Solve this error.......
Unity 2020.3.17f1
Thank you😊
Doesn't expect this still work in 2022.
You're a hero
@SamKyada , read the reply by @agustinaA-Lopez
meanwhile 2023, Android14, copy, paste, works like a charm.
Thanks @aVolpe , you're the man...
Thanks so much!