2012-01-10 10 views
22

Le funzioni del programma in questo modo: l'utente ha una lista di numeri di telefono, per il quale il cellulare potrebbe vibrare su di una chiamata in arrivo solo quando nessun altra applicazione a livello di sistema fornirebbe delle vibrazioni (ad esempio come in modalità muto). So che questo è in qualche modo contro le regole, perché un'applicazione dovrebbe rispettare le impostazioni degli utenti, ma l'applicazione è limitata ad alcuni utenti con questa esigenza. Ho provato due modi, ma nessuno di loro sono soddisfacenti:Come fornire vibrazioni personalizzate sulle chiamate in arrivo specifici

  1. Ascolta lo stato di telefonia e innescare direttamente il servizio di vibrazione con il mio proprio modello (con Vibrator.vibrate()). Questo metodo è efficace senza le chiamate in entrata in modo casuale ma efficace quando il telefono è in CALL_STATE_RINGING stato e credo che sia a causa del conflitto con l'applicazione a livello di sistema che gestisce in realtà la vibrazione sulla chiamata in arrivo.

  2. giudicare se il cellulare vibra su di una chiamata in arrivo (con AudioManager.shouldVibrate()), e decidere se cambiare le impostazioni di vibrazione (con AudioManager.setRingerMode() e AudioManager.setVibrateSetting()). Se le impostazioni della vibrazione vengono modificate dalla mia applicazione, devono essere ripristinate una volta che il cellulare è tornato allo stato CALL_STATE_IDLE. Questo metodo, tuttavia, non funziona ancora a volte, senza alcun segno del motivo.

Spero che qualcuno possa dare qualche consiglio su questo problema. Commenti su questi due modi o altri suggerimenti sono i benvenuti.

+0

Qualche progresso su questo? – Rizon

+2

@Rizon Purtroppo no, e questa domanda mi fa guadagnare un distintivo di tumbleweed. – peter

+0

Questa non è la stessa cosa, ma qualcuno tryed disattivazione vibrazione per le chiamate incomming e non è stato possibile, ma i risultati sono interessanti per voi: http://stackoverflow.com/q/8065862/969325 – Warpzit

risposta

6

Hai bisogno di giocare con due impostazioni in modo che il telefono vibri. La prima è la modalità audio che deve essere impostato utilizzando AufioManager:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
audioManager.setRingerMode(targetSoundMode); 

La seconda parte non è adeguatamente documentato e credo che questo sia la parte mancante del codice:

String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent"; 
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1); 

uso 1 per attivare la vibrazione e 0 per disattivare la vibrazione.

per comprendere appieno come si dovrebbe lavorare con le impostazioni di vibrazione e la modalità di dare un'occhiata al seguente link: http://hi-android.info/src/com/android/settings/SoundSettings.java.html

+0

Grazie per la tua risposta! Ma questo non è ciò che blocca il vibratore, perché 'vibrate_in_silent' è già impostato su 1. È possibile che Phone.apk annulli il Vibratore immediatamente dopo averlo attivato? Secondo [VibratorService.java] (http://androidxref.com/source/xref/frameworks/base/services/java/com/android/server/VibratorService.java), il vibratore si sarebbe comportato in modo casuale in questa situazione. E questo spiega perché il problema si verifica solo su alcuni cellulari: Phone.apk non fa parte del Sistema. – peter

+2

Hai guardato la funzione setPhoneVibrateSettingValue sul link sopra? C'è una certa dipendenza tra queste due impostazioni che dovrebbero essere gestite con molta attenzione. – Muzikant

+0

La dipendenza è qualcosa che ho perso. Ho intenzione di eseguire alcuni test su più dispositivi per la dipendenza. Grazie in anticipo! +1 a te. – peter

Problemi correlati