¿Cómo hacer vibrar un dispositivo Android?

Escribí una aplicación de Android. Ahora, quiero hacer que el dispositivo vibre cuando se produce una determinada acción. ¿Cómo puedo hacer esto?

Tratar:

import android.os.Vibrator; ... Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 500 milliseconds v.vibrate(500); 

Nota:

No olvide incluir el permiso en el archivo AndroidManifest.xml:

 <uses-permission android:name="android.permission.VIBRATE"/> 

Permiso de vibración de Grant

Antes de empezar a implementar cualquier código de vibración, tiene que darle a su aplicación el permiso para vibrar:

 <uses-permission android:name="android.permission.VIBRATE"/> 

Asegúrese de incluir esta línea en su archivo AndroidManifest.xml.

Importar la biblioteca de vibraciones

La mayoría de los IDEs harán esto por usted, pero aquí está la declaración de importación si la suya no:

  import android.os.Vibrator; 

Asegúrese de esto en la actividad donde desea que ocurra la vibración.

Cómo vibrar durante un tiempo determinado

En la mayoría de las circunstancias, usted querrá vibrar el dispositivo durante un corto período de tiempo predeterminado. Puede lograr esto utilizando el método de vibrate(long milliseconds) . Aquí está un ejemplo rápido:

 // Get instance of Vibrator from current Context Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 400 milliseconds v.vibrate(400); 

¡Eso es simple!

Cómo vibrar indefinidamente

Es posible que el dispositivo continúe vibrando indefinidamente. Para ello, utilizamos el método vibrate(long[] pattern, int repeat) método vibrate(long[] pattern, int repeat) :

 // Get instance of Vibrator from current Context Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Start without a delay // Vibrate for 100 milliseconds // Sleep for 1000 milliseconds long[] pattern = {0, 100, 1000}; // The '0' here means to repeat indefinitely // '0' is actually the index at which the pattern keeps repeating from (the start) // To repeat the pattern from any other point, you could increase the index, eg '1' v.vibrate(pattern, 0); 

Cuando esté listo para detener la vibración, simplemente llame al método cancel() :

 v.cancel(); 

Cómo utilizar patrones de vibración

Si desea una vibración más a medida, puede intentar crear sus propios patrones de vibración:

 // Get instance of Vibrator from current Context Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Start without a delay // Each element then alternates between vibrate, sleep, vibrate, sleep... long[] pattern = {0, 100, 1000, 300, 200, 100, 500, 200, 100}; // The '-1' here means to vibrate once, as '-1' is out of bounds in the pattern array v.vibrate(pattern, -1); 

Vibraciones más complejas

Hay varios SDK que ofrecen una gama más completa de retroalimentación háptica. Uno que utilizo para efectos especiales es la plataforma de desarrollo Haptic de Immersion para Android .

Solución de problemas

Si su dispositivo no vibra, primero asegúrese de que puede vibrar:

 // Get instance of Vibrator from current Context Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Output yes if can vibrate, no otherwise if (v.hasVibrator()) { Log.v("Can Vibrate", "YES"); } else { Log.v("Can Vibrate", "NO"); } 

En segundo lugar, asegúrese de haber dado a su solicitud el permiso para vibrar! Vuelva al primer punto.

Me costó entender cómo hacer esto en mi primera aplicación – asegúrese de que tiene lo siguiente:

1) Su dispositivo soporta la vibración (mi tablet Samsung no funcionó, así que me mantuve revisando el código – el código original funcionaba perfectamente en mi CM Touchpad

2) Usted ha declarado por encima del nivel de la aplicación en su archivo AndroidManifest.xml para darle permiso al código para ejecutarse.

3) Ha importado los dos siguientes en su MainActivity.java con las otras importaciones: import android.content.Context; Import android.os.Vibrator;

4) Llamar a su vibración (discutido ampliamente en este hilo ya) – lo hice en una función separada y llamar a esto en el código en otros puntos – en función de lo que desea utilizar para llamar a la vibración puede necesitar una imagen ( Android: Haga clic en un botón -> ejecutar acciones ) o escuchar un botón, o un objeto clicable como se define en XML ( Clickable image – android ):

  public void vibrate(int duration) { Vibrator vibs = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); vibs.vibrate(duration); } 

Las respuestas anteriores son perfectas. Sin embargo, quería vibrar mi aplicación exactamente dos veces en el botón de clic y esta pequeña información que falta aquí, por lo tanto, la publicación de futuros lectores como yo. 🙂

Tenemos que seguir como se mencionó anteriormente y el único cambio será en el patrón de vibración como a continuación,

 long[] pattern = {0, 100, 1000, 300}; v.vibrate(pattern, -1); //-1 is important 

Esto vibrará exactamente dos veces. Como ya sabemos 0 es por retraso, 100 dice vibrar por 100MS por primera vez, luego viene el retraso de 1000MS y post que vibran de nuevo por 300MS.

Uno puede seguir adelante mencionando el retraso y la vibración alternativamente (por ejemplo, 0, 100, 1000, 300, 1000, 300 para 3 vibraciones y así sucesivamente ..), pero recuerda la palabra @ Dave utilizarlo responsablemente. 🙂

También tenga en cuenta que el parámetro de repetición se establece en -1, lo que significa que la vibración ocurrirá exactamente como se menciona en el patrón. 🙂

 <uses-permission android:name="android.permission.VIBRATE"/> 

Debe agregarse dentro de la etiqueta <manifest> y fuera de la etiqueta <application> .

El método de actualización de 2017 (intervalo) está obsoleto con Android-O (API 8.0)

Para admitir todas las versiones de Android, utilice este método.

 // Vibrate for 300 milliseconds private void shakeItBaby() { if (Build.VERSION.SDK_INT >= 26) { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(VibrationEffect.createOneShot(150, VibrationEffect.DEFAULT_AMPLITUDE)); } else { ((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(150); } } 

Nota: – Necesitas solicitar permiso antes de llamar a este método en Android Marshmallow y más alto de lo contrario la aplicación se bloqueará.

La respuesta anterior es muy correcta, pero estoy dando un paso fácil para hacerlo:

  private static final long[] THREE_CYCLES = new long[] { 100, 1000, 1000, 1000, 1000, 1000 }; public void longVibrate(View v) { vibrateMulti(THREE_CYCLES); } 

Y luego en su archivo xml:

 <button android:layout_height="wrap_content" android:layout_width ="wrap_content" android:onclick ="longVibrate" android:text ="VibrateThrice"> </button> 

Esa es la manera más fácil .

Yo uso el siguiente método utils:

 public static final void vibratePhone(Context context, short vibrateMilliSeconds) { Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(vibrateMilliSeconds); } 

Agregue el siguiente permiso al archivo de AndroidManifest

 <uses-permission android:name="android.permission.VIBRATE"/> 

Puede utilizar métodos sobrecargados en caso de que desee utilizar diferentes tipos de vibraciones (patrones / indefinido) como se sugirió anteriormente.

  • ¿Cómo activar la vibración en la entrada de sonido?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.