Cómo proporcionar una vibración personalizada en llamadas entrantes específicas
-
25-10-2019 - |
Pregunta
El programa funciona como esta: el usuario tiene una lista de números de teléfono, para los cuales el teléfono celular podría vibrar en una llamada entrante solo cuando ninguna otra aplicación de todo el sistema proporcionaría vibración (como en modo silencio). Sé que esto está de alguna manera en contra de las reglas, ya que una aplicación debería respetar la configuración de los usuarios, pero la aplicación se limita a ciertos usuarios con esta necesidad. He probado dos maneras pero ninguno de ellos es satisfactorio:
Escuche el estado de telefonía y active directamente el servicio de vibración con mi propio patrón (con
Vibrator.vibrate()
). Este método es efectivo sin llamadas entrantes pero al azar efectiva cuando el teléfono está enCALL_STATE_RINGING
Estado y supongo que se debe al conflicto con la aplicación de todo el sistema que en realidad maneja la vibración en la llamada entrante.Juzgar si el teléfono celular está vibrando en una llamada entrante (con
AudioManager.shouldVibrate()
), y decida si cambiar la configuración de vibración (conAudioManager.setRingerMode()
yAudioManager.setVibrateSetting()
). Si mi aplicación cambia la configuración de vibración, se deben restaurar una vez que el teléfono celular vuelva aCALL_STATE_IDLE
estado. Sin embargo, este método todavía no funciona a veces, sin ningún signo de la razón.
Espero que alguien pueda dar algunos consejos sobre este tema. Los comentarios sobre estas dos formas u otras sugieren son bienvenidos.
Solución
Debe jugar con dos configuraciones para que su teléfono vibre. El primero es el modo de sonido que debe establecerse utilizando Aufiomanager:
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(targetSoundMode);
La segunda parte no está documentada correctamente y creo que esta es la parte que falta de su código:
String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);
Use 1 para encender vibrar y 0 para apagar la vibración.
Para comprender completamente cómo debe trabajar con la configuración y el modo Vibrate, eche un vistazo al siguiente enlace:http://hi-antroid.info/src/com/android/settings/soundsettings.java.html