Android:当AudioManager中的当前模式发生更改时获取通知

时间:2016-02-01 10:10:51

标签: android android-audiomanager

在Android中,我需要在当前的音频模式发生变化时收到通知。

我可以通过getMode()获得此值,但这是轮询。

我不想每隔几秒轮询一次。

我有什么选择?

(请注意,我不是在问ringerMode)

3 个答案:

答案 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
                        }
相关问题