我正在制作一个音乐流媒体应用程序。
有时在电话中断流媒体后,我遇到以下问题:
我的phoneStateChangeListener()
被调用TelephonyManager.CALL_STATE_IDLE
作为传递状态。
然后我调用AudioManager.requestAudioFocus()
,但失败了。
我发现了这篇博文:
http://android-developers.blogspot.com/2013/08/respecting-audio-focus.html
其中包含以下行:
“注意:如果当前正在进行电话呼叫,系统将不会授予音频焦点(AUDIOFOCUS_REQUEST_FAILED),并且在呼叫结束后应用程序将不会收到AUDIOFOCUS_GAIN。”
这非常准确地总结了我所看到的行为。这让我感到奇怪,所以我补充道:
int mode = audioManager.getAudioMode()
if(audioMode == AudioManager.MODE_IN_CALL) {
Log.e("Trying to get Audio Focus","Mode IN call");
}
日志显示以下内容:
CALL SATETE WAS: 0
Trying to get Audio Focus(28009): Call State was IDLE
AUDIO MODE:(28009): Audio Mode was: 2
Trying to get Audio Focus(28009): Mode IN call
AudioFocus requestAudioFocus() from demo.player.AudioFocusHelper$42a63068 hint:1
D/demo.player.MusicService(28009): FOCUS ATTEMPT FAILED
这表明切换到PHONE_STATE_IDLE和AudioMode离开呼叫模式之间存在延迟。
我有一个解决方法,即在请求AudioFocus之前引入一个短暂的延迟(约.5秒),这似乎有效。
我想知道是否有办法做到这一点,不需要计时器。
编辑:这似乎只是某些设备上的问题。在来自不同运营商(TMobile和Verizon)的两个S5上,Verizon运营商手机出现了这个问题而TMobile手机却没有。