在Android中,我需要在当前的音频模式发生变化时收到通知。
我可以通过getMode()获得此值,但这是轮询。
我不想每隔几秒轮询一次。
我有什么选择?
(请注意,我不是在问ringerMode)
答案 0 :(得分:3)
您可以将AudioFocus用于运行Android操作系统2.2及更高版本的设备,预先确认您的应用也在播放音频。
您可以注册音频焦点更改,然后聆听onAudioFocusChange(int focusChange)
方法。通过这种方式,您将收到有关音频模式更改以及其他音频焦点更改的通知。我希望这会有所帮助。
您还可以使用PhoneStateListener来收听手机状态更改和相应的音频模式。
答案 1 :(得分:2)
http://developer.android.com/reference/android/media/AudioManager.html
interface
AudioManager.OnAudioFocusChangeListener
更新系统音频焦点时要调用的回调的接口定义。
设置此项将使您使用onAudioFocusChange
方法。
这将检测模式变化等。
答案 2 :(得分:-1)
在 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
}