Android AudioManager振铃器模式与手机不匹配';s值 TL;DR:AudioManager.getRingerMode()似乎错误很多。这个API是有缺陷的,还是过时的,还是我做错了什么?
问题:Android AudioManager振铃器模式与手机不匹配';s值 TL;DR:AudioManager.getRingerMode()似乎错误很多。这个API是有缺陷的,还是过时的,还是我做错了什么?,android,android-audiomanager,android-8.0-oreo,vibration,Android,Android Audiomanager,Android 8.0 Oreo,Vibration,问题: AudioManager.getRingerMode()值不一致且与文档不匹配 AudioManager在振动模式下报告振铃器静音 广播侦听器跳过步骤,从0-2转到1,而不转到1 振铃器模式\u正常振铃器模式,可听到声音并可振动。如果在此模式下切换前音量可听见,则会发出声音。如果振动设置打开,它将振动 振铃器模式\u静音-静音且不会振动的振铃器模式。(这将覆盖振动设置。) 振铃器模式\u振动-将静音并振动的振铃器模式。(这将导致电话振铃器始终振动,但通知仅在设置时振动。) 然
值不一致且与文档不匹配AudioManager.getRingerMode()
- AudioManager在振动模式下报告振铃器静音
- 广播侦听器跳过步骤,从0-2转到1,而不转到1
- 振铃器模式\u正常振铃器模式,可听到声音并可振动。如果在此模式下切换前音量可听见,则会发出声音。如果振动设置打开,它将振动
- 振铃器模式\u静音-静音且不会振动的振铃器模式。(这将覆盖振动设置。)
- 振铃器模式\u振动-将静音并振动的振铃器模式。(这将导致电话振铃器始终振动,但通知仅在设置时振动。)
然而,这里有一段视频显示,当设备处于振动模式时,它会报告0,并从0跳到2,而不会跳到1
源代码
我也有同样的问题。您是在模拟器上还是在真实设备上获得此结果?安装了什么Android版本?当手机铃声模式设置为静音或静音时,它在Android 6上提供的输出是振铃模式,而不是振铃模式。同样的方法在Android 9和10上运行良好,但在Android 6上则不行,
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)
}
}