首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android在通话时播放音频文件

问Android在通话时播放音频文件
EN

Stack Overflow用户
提问于 2015-01-22 14:25:10
回答 1查看 12.3K关注 0票数 8

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

通过在Google中搜索很多次,我发现这对于没有根的设备是不可能的。

但是,有没有其他方法来实现这一点呢?

我想实现这一点,因为应用程序的功能是:如果应用程序用户遇到麻烦,他可以只按应用程序中的帮助按钮,然后应用程序开始呼叫提到的联系人,并应播放录音的音频文件,一旦收到呼叫的人。

EN

回答 1

Stack Overflow用户

发布于 2015-01-22 14:44:26

阅读以下步骤:

1.一些本地音乐播放器在安卓设备上处理这一点,他们限制音乐时,通话是在TelephonyManager.EXTRA_STATE_OFFHOOK (OFFHOOK状态),所以没有办法播放背景音乐使用本地players.But的一些第三方应用程序,如"poweramp音乐播放器“是可能的。

2.使用MediaPlayer类也是不可能的(文档中清楚地提到了)

3.仅在一种情况下,如果您开发的自定义音乐播放器(不使用MediaPlayer类)实现了

AudioManager.OnAudioFocusChangeListener通过使用这个,你可以在下面的代码“focusChange=AUDIOFOCUS_LOSS_TRANSIENT”中获得音频管理器的状态(当音乐在后台播放时,任何来电都会调用这个状态),这个状态完全掌握在开发人员手中,无论是播放还是暂停音乐。根据您的要求,对于您的问题,当呼叫处于OFFHOOK状态时,您询问是否要播放音乐。在OFFHOOK状态下,请不要暂停播放音乐。.And只有在禁用头戴式耳机时才有可能。

代码语言:javascript
复制
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)
        }
    }
};
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28082471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档