AudioManager振铃模式与手机的值不匹配

时间:2018-03-26 13:35:09

标签: android android-audiomanager android-8.0-oreo vibrate

TL; DR:AudioManager.getRingerMode()似乎错了很多。这个API是错误的还是过时的,还是我做错了什么?

的问题:

  • AudioManager.getRingerMode()值不一致且与文档不匹配。
  • AudioManager在振动模式下报告无声铃声。
  • 广播监听器跳过步骤,从0-2开始,而不是1

According to the Docs:

  • RINGER_MODE_NORMAL - 铃声模式可能会听到并可能会振动。如果可以听到更改此模式之前的音量,则会听到声音。如果振动设置打开,它将振动。

  • RINGER_MODE_SILENT - 振铃模式将保持静音且不会振动。 (这会覆盖振动设置。)

  • RINGER_MODE_VIBRATE - 振铃模式,它将保持静音并振动。 (这将导致手机振铃器始终振动,但通知振动只会振动,如果设置。)

但是,这是一个视频,显示当设备处于振动模式时报告0并从0跳到2而不转到1。

enter image description here

源代码

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 个答案:

没有答案