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>
.