Android在通话期间播放音频文件

时间:2015-01-22 06:25:10

标签: android audio phone-call

对于我的Android应用,我想在接听应用程序的电话后播放音频文件。 应用程序将启动电话呼叫,一旦接收者接听电话,应用程序应开始播放录制的音频文件。

通过在Google中进行大量搜索,我发现对于无根设备,这是不可能的。

但是这个或任何其他方式可以替代这个吗?

我想实现这个,因为应用程序的功能是:如果App用户遇到麻烦,他只需按下应用程序中的帮助按钮,然后应用程序就会开始呼叫上述联系人,并且应该尽快播放录制的音频文件接到电话的人。

1 个答案:

答案 0 :(得分:5)

阅读以下步骤:

1.安卓设备中的一些原生音乐播放器处理此问题时,他们会在TelephonyManager.EXTRA_STATE_OFFHOOK(OFFHOOK STATE)中调用时限制音乐,因此无法使用本机播放器播放背景音乐。但在某些像“poweramp music palyer”这样的第三方apss是可能的。

2.使用MediaPlayer类也是不可能的(文档中明确提到)

3.只有在一种情况下,如果你正在开发的自定义音乐播放器(没有使用MediaPlayer类)实现

通过使用这个AudioManager.OnAudioFocusChangeListener,您可以在下面的代码“focusChange = AUDIOFOCUS_LOSS_TRANSIENT”中获取audiomanager的状态(这种状态在后台播放音乐时调用任何来电)此状态完全在开发人员手中是否为播放或暂停音乐。根据您对问题的要求,您询问是否要在呼叫处于OFFHOOK状态时播放音乐时不要暂停在OFFHOOK状态播放音乐。这仅在耳机被禁用时才可能

AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
            // Pause playback (during incoming call) 
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // Resume playback (incoming call ends)
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
            am.abandonAudioFocus(afChangeListener);
            // Stop playback (when any other app playing music  in that situation current app stop the audio)
        }
    }
};