¿Por qué mi teléfono vibra indefinidamente?
Estoy tratando de usar un patrón de vibración al vibrar el teléfono. Estoy usando:
Vibrator v = (Vibrator) this.getSystemService(Context.VIBRATOR_SERVICE); // Vibrate for 500 milliseconds long[] longs = { 2, 0, 0, 0, 2, 0 , 0, 0, 2 }; v.vibrate(longs, 1);
y simplemente no deja de vibrar.
- Android - El tono no dejará de tocar
- Error al descifrar en java
- Enlace de datos de Android: No se puede resolver el símbolo
- Java Reflection - Obtener todos los nombres de variables de instancia de una clase
- Ocultar puntero del mouse en Android
- Si utilizo
v.vibrate(longs, -1);
no vibra en absoluto. - Si utilizo
v.vibrate(longs, 0);
no vibra en absoluto. - Si utilizo
v.vibrate(longs, 2);
o cualquier número superior a 1, vibra indefinidamente. - Si cambio los valores largos para que sean más altos o más bajos no hace ninguna diferencia.
He leído la documentación y algunas tutarias y no creo haber hecho nada malo aquí. ¿Por qué no está vibrando correctamente?
Nota: Utilizo otras aplicaciones que vibran en los patrones correctamente, así que sé que no es un problema con mi teléfono.
- Clases Java versus Clases C ++
- Decodificar la matriz de bytes en el mapa de bits que se ha comprimido en Java
- Cómo convertir valores de cadena a lista de matriz de entero - Android
- Android Google Map error android.view.InflateException: Archivo XML binario línea # 6: error iniciando el fragmento de clase
- Despertar un hilo de dormir - interrupción () versus "dividir" el sueño en varios sueños
- Anotación Java ejecuta un método dentro de la declaración de anotación (uso para android)
- EXCEPCIÓN FATAL: main java.lang.RuntimeException: El contenido tiene vista con el atributo id 'android.R.id.list' que no es una clase ListView
- Haga que una cierta parte de un android-textview se alinee a la derecha
Usted debe leer la documentación para vibrar () .
Con 2, 0, 0, 0, 2, 0 , 0, 0, 2
, usted está diciendo: "espere 2 ms, vibre durante 0 ms, espere 0 ms, vibre durante 0 ms, espere 2 ms, vibre para 0 ms, espere 0 ms, vibre durante 0 ms, espere 2 ms ". Obviamente, este patrón nunca vibra, a menos que repita el patrón (que tiene un número impar de intervalos).
Cuando se pasa algo distinto de -1 como el segundo argumento, el patrón se repite utilizando el segundo argumento como el índice en el patrón en el que comenzar a repetir. Puesto que nunca pareces llamar v.cancel()
, esta repetición nunca termina, causando una vibración sin fin (porque en algún punto de la repetición tendrás un intervalo de vibración no-0).
¿Por qué no está vibrando correctamente?
Bien…
En primer lugar, cero milisegundos es un tiempo muy corto. Los usuarios no se darán cuenta de una vibración que está ocurriendo durante cero milisegundos, y los usuarios no se dará cuenta de una brecha entre las vibraciones que está sucediendo durante cero milisegundos.
En segundo lugar, dos milisegundos es un tiempo muy corto. Su patrón entero toma seis milisegundos por cada pasada (con un valor de repetición de 0
), o cuatro milisegundos para la segunda y posteriores pasadas (con un valor de repetición de 1
, ya que omite el primer elemento de su patrón, que es uno de los tres valores de dos milisegundos). Hay cientos de estos patrones por segundo, que no va a ser discernible por el usuario.
Le sugiero que se deshaga de los ceros y utilice un número razonable de milisegundos para el resto. Esto está en la parte superior de las sugerencias de cybersam de eventualmente llamar a cancel()
y pensar si quieres un número par o impar de elementos en tu patrón.
El código de la segunda respuesta en esta página está funcionando para mí. Vibra en un patrón y luego se detiene una vez que el patrón está terminado:
// 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);
- ¿Cuál es la forma correcta de compartir datos entre AppWidgetProvider y RemoteViewsService.RemoteViewsFactory?
- Cordova androide splashscreen están distorsionados