Режим звонка 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)
    }
}

0 ответов

Другие вопросы по тегам