vibrar telefono studio sonido programatically poner para notificaciones hacer con como codigo celular java android vibrate android-vibration

java - telefono - poner a vibrar el celular



¿Cómo hacer vibrar un dispositivo Android? (9)

Conceder permiso de vibración

Antes de comenzar a implementar cualquier código de vibración, debe dar 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 IDE harán esto por usted, pero aquí está la declaración de importación si la suya no lo hace:

import android.os.Vibrator;

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

Cómo vibrar durante un tiempo dado

En la mayoría de los casos, deseará hacer vibrar el dispositivo durante un período de tiempo corto y predeterminado. Puedes lograr esto usando el método de vibrate(long milliseconds) . Aquí hay 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 desee que el dispositivo continúe vibrando indefinidamente. Para esto, usamos el método de 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, e.g. ''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 personalizada, 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

Existen múltiples SDK que ofrecen una gama más amplia de comentarios hápticos. Una que uso para efectos especiales es la plataforma de desarrollo háptico de Immersion para Android .

Solución de problemas

Si su dispositivo no vibra, primero asegúrese de que pueda 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 que ha otorgado a su aplicación el permiso para vibrar. Vuelve al primer punto.

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


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); } private void vibrateMulti(long[] cycles) { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.vibrate = cycles; notificationManager.notify(0, notification); }

Y luego en tu archivo xml:

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

Esa es la forma easiest .


Las respuestas de arriba son perfectas. Sin embargo, quería hacer vibrar mi aplicación exactamente dos veces con el clic del botón y esta pequeña información falta aquí, por lo tanto, publicar para futuros lectores como yo. :)

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

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

Esto vibrará exactamente dos veces. Como ya sabemos, 0 es para demora, 100 dice vibrar por 100MS por primera vez, luego viene la demora de 1000MS y la vibración nuevamente para 300MS.

Uno puede seguir y mencionar el retardo y la vibración alternativamente (por ejemplo, 0, 100, 1000, 300, 1000, 300 para 3 vibraciones, etc.), pero recuerde que la palabra de Dave lo usa con responsabilidad. :)

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


Me costó entender cómo hacer esto en mi primera implementación; asegúrate de tener lo siguiente:

1) Su dispositivo admite vibración (mi tableta Samsung no funcionó, así que seguí revisando el código; el código original funcionó perfectamente en mi Touchpad CM

2) Ha declarado por encima del nivel de la aplicación en su archivo AndroidManifest.xml para otorgar el permiso del código para ejecutar.

3) Ha importado lo siguiente en su MainActivity.java con las otras importaciones: importar android.content.Context; Importar android.os.Vibrator;

4) Llame a su vibración (ya discutida extensamente en este hilo) - Lo hice en una función separada y lo llamé en el código en otros puntos - dependiendo de lo que quiera usar para llamar la vibración, puede necesitar una imagen ( Android: haga clic en un botón largo -> realice acciones ) o escuche el botón, o haga clic en un objeto como se define en XML ( imagen seleccionable - android ):

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


Tratar:

import android.os.Vibrator; ... Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 500 milliseconds if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)); } else { //deprecated in API 26 v.vibrate(500); }

Nota:

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

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


Utilizar esta:

import android.os.Vibrator; ... Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 1000 milliseconds if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { v.vibrate(VibrationEffect.createOneShot(1000,VibrationEffect.DEFAULT_AMPLITUDE)); }else{ //deprecated in API 26 v.vibrate(1000); }

Nota:

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

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


Utilizo el siguiente método de utilidades:

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 AndroidManifest

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

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


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

Para soportar todas las versiones de Android usa este método.

// Vibrate for 150 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); } }


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

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