2011-11-09 17 views
8

Quiero desactivar la configuración de vibración del dispositivo cuando recibe una llamada. Implementé un BroadcastReceiver para esta característica que realiza la acción al recibir la transmisión PHONE_STATE. El problema es que no puedo desconectar las vibraciones. He intentado el siguiente:La configuración de vibración no se desactiva al recibir llamadas entrantes - Android

AudioManager audioManager = (AudioManager) 
          context.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
           AudioManager.VIBRATE_SETTING_OFF); 

o

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
vib.cancel(); 

El primer enfoque parece ideal para mí. Incluso funciona para activar las vibraciones cuando se recibe una llamada. Pero, no puedo desactivarlos en este escenario.

¿Alguien ha intentado esto?

Editar: Comprobé el código de la aplicación del teléfono de Android. Siguiente código está presente en Ringer.java:

if (shouldVibrate() && mVibratorThread == null) { 
    mContinueVibrating = true; 
    mVibratorThread = new VibratorThread(); 
    mVibratorThread.start(); 
} 

Un hilo se pone en marcha inicialmente por aplicación de teléfono que vibra el teléfono. Cuando cambio la configuración de vibración a desactivada, esta comprobación se omite pero el hilo ya iniciado se sigue ejecutando.

Esto también explica cómo se pueden activar las vibraciones cuando llega una llamada entrante. En ese caso, el hilo no se está ejecutando inicialmente. Luego, se inicia cuando enciendo la configuración de vibración. No creo que haya ninguna solución al problema sin cambiar la aplicación del teléfono.

+1

también me interesaría. Hasta donde yo sé, es así: el hilo o el contexto que inicia la vibración es el único que puede detenerlo más tarde. sobre cómo cambiar la configuración de vibración: parece haber un error en Android. no se envía ninguna notificación a los oyentes si la configuración cambia, por lo tanto, la vibración no puede detenerse. – SimonSays

+0

Hola Aman, ¿Has resuelto este problema? Estoy enfrentando el mismo problema, espero que me ayuden con respecto a lo mismo. –

Respuesta

0

esto:

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
vib.cancel(); 

no va a ayudar a usted, ya que anula la nueva instancia del vibrador.

Me imagino que es demasiado tarde para apagar la vibración del dispositivo si la llamada ya está entrando porque la vibración ya está en progreso. Entonces tendrías que hacer eso antes de que entre la llamada.

+0

Quiero cambiar la configuración de vibración solo si la llamada entrante proviene de uno de los contactos seleccionados. Por lo tanto, cambiar la configuración de vibración antes de la llamada entrante no es una opción. Dado que Android permite cambiar el modo de timbre y el volumen del timbre después de la llamada, también esperaba cambiar la vibración. –

Cuestiones relacionadas