繁体   English   中英

Android:当 AudioManager 中的当前模式改变时得到通知

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM