[英]Android: Get Notified when the current Mode inside AudioManager gets changed
在 Android 中,我需要在当前音频模式改变时得到通知。
我可以通过getMode()获得这个值,但这是轮询。
我不想每隔几秒轮询一次。
我有哪些选择?
(请注意,我不是在问ringerMode)
您可以将AudioFocus用于运行 Android 操作系统 2.2 及更高版本的设备,前提是您的应用程序也在播放音频。
您可以注册音频焦点更改,然后收听onAudioFocusChange(int focusChange)
方法。 通过这种方式,您将收到音频模式更改以及其他音频焦点更改的通知。 我希望这有帮助。
您还可以使用PhoneStateListener来监听电话状态变化和相应的音频模式。
http://developer.android.com/reference/android/media/AudioManager.html
接口
AudioManager.OnAudioFocusChangeListener
当系统的音频焦点更新时要调用的回调的接口定义。
设置这个会让你使用onAudioFocusChange
方法。 这将检测模式变化等。
在 kotlin 中试试这个
在通话中,我使用计时器来更新通话时间。我使用计时器内的代码
val am = context!!.getSystemService(Context.AUDIO_SERVICE) as AudioManager
val mode = am.mode
if (AudioManager.MODE_IN_CALL == mode) {
// device is in a telephony call
} else if (AudioManager.MODE_IN_COMMUNICATION == mode) {
Log.e("MODE -","IN_COMMUNICATION")
// device is in communiation mode, i.e. in a VoIP or video call
} else if (AudioManager.MODE_RINGTONE == mode) {
// device is in ringing mode, some incoming is being signalled
if(AttendMeetingActivity.meetingManager!=null){
AttendMeetingActivity.meetingManager!!.onIncomingCall()
}else if( IncomingCallActivity.callControlManager!=null){
IncomingCallActivity!!.callControlManager!!.doHangUpCall()
}
} else {
// device is in normal mode, no incoming and no audio being played
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.