2011-11-09 1 views
8

Desidero disattivare l'impostazione Vibrazione del dispositivo quando arriva una chiamata. Ho implementato un BroadcastReceiver per questa funzione che esegue l'azione sulla ricezione della trasmissione PHONE_STATE. Il problema è che non sono in grado di disattivare le vibrazioni. Ho provato la seguente:Vibrazione che non si disattiva quando si riceve una chiamata in arrivo - 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(); 

Il primo approccio sembra l'ideale per me. Funziona anche per attivare "su" le vibrazioni quando viene ricevuta una chiamata. Ma, non sono in grado di disattivarle in questo scenario.

Qualcuno ha provato questo?

Modifica: ho controllato il codice dell'app Telefono Android. A seguito di codice è presente in Ringer.java:

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

Un thread viene avviato inizialmente da app del telefono che vibra il telefono. Quando cambio l'impostazione di vibrazione su off, questo controllo viene saltato ma il thread già avviato continua a essere in esecuzione.

Questo spiega anche come le vibrazioni possono essere attivate quando arriva una chiamata. In tal caso, il thread non è in esecuzione inizialmente. Quindi, viene avviato quando accendo l'impostazione di vibrazione. Non penso che ci sia alcuna soluzione al problema senza cambiare l'app del telefono.

+1

sarei interessato anche a quello. per quanto ne so è così: il filo o il contesto che inizia la vibrazione è l'unico che può fermarlo in seguito. riguardo al cambiamento delle impostazioni di vibrazione: sembra che ci sia un bug in Android. nessuna notifica viene inviata agli ascoltatori se l'impostazione cambia, quindi la vibrazione non può fermarsi. – SimonSays

+0

Ciao Aman, hai risolto questo problema? Sto affrontando lo stesso problema, spero che mi aiuterete a riguardo lo stesso. –

risposta

0

questo:

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

non sta andando per aiutarvi a come si cancella la nuova istanza del vibratore.

Posso immaginare che sia troppo tardi per disattivare la vibrazione del dispositivo se la chiamata è già in arrivo poiché la vibrazione è già in corso. Quindi dovresti farlo prima che arrivi la chiamata.

+0

Desidero modificare l'impostazione della vibrazione solo se la chiamata in arrivo proviene da uno dei contatti selezionati. Pertanto, la modifica dell'impostazione delle vibrazioni prima della chiamata in arrivo non è un'opzione. Poiché Android consente di modificare la modalità della suoneria e il volume della suoneria dopo l'arrivo della chiamata, speravo di cambiare anche la vibrazione. –