Режим звонка AudioManager не соответствует значению телефона
TL;DR: AudioManager.getRingerMode()
кажется, неправильно много. Этот API просто глючит, или устарел, или я делаю что-то не так?
Вопросы:
AudioManager.getRingerMode()
значения противоречивы и не соответствуют документам.- AudioManager сообщает о звуковом звонке в режиме вибрации.
- Слушатель широковещательной рассылки пропускает шаги и идет от 0-2, не переходя к 1
RINGER_MODE_NORMAL - Режим звонка, который может быть слышен и может вибрировать. Будет слышно, если громкость до выхода из этого режима была слышна. Он будет вибрировать, если настройка вибрации включена.
RINGER_MODE_SILENT - Режим звонка, который будет тихим и не будет вибрировать. (Это отменяет настройку вибрации.)
RINGER_MODE_VIBRATE - Режим звонка, который будет тихим и будет вибрировать. (Это приведет к тому, что звонок телефона будет всегда вибрировать, но уведомление будет вибрировать только тогда, когда оно установлено.)
Однако, вот видео, показывающее, что оно сообщает 0, когда устройство находится в режиме вибрации и пропускает от 0 до 2, не переходя в 1.
Исходный код
class MainActivity : AppCompatActivity() {
val volumeChangeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent?) {
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val ringerMode = audioManager.ringerMode
textView.text = (textView.text?.toString() ?: "") + when (ringerMode) {
AudioManager.RINGER_MODE_SILENT -> "$ringerMode: RINGER_MODE_SILENT\n"
AudioManager.RINGER_MODE_VIBRATE -> "$ringerMode: RINGER_MODE_VIBRATE\n"
AudioManager.RINGER_MODE_NORMAL -> "$ringerMode: RINGER_MODE_NORMAL\n"
else -> ""
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onResume() {
super.onResume()
val intentFilter = IntentFilter()
intentFilter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION)
registerReceiver(volumeChangeReceiver, intentFilter)
}
override fun onPause() {
super.onPause()
unregisterReceiver(volumeChangeReceiver)
}
}