由于AudioMode仍然是MODE_IN_CALL,电话呼叫挂断后requestAudioFocus失败

时间:2014-10-10 18:51:39

标签: android telephonymanager android-audiomanager

我正在制作一个音乐流媒体应用程序。

有时在电话中断流媒体后,我遇到以下问题:

我的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手机却没有。

0 个答案:

没有答案