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

标签 android audio phone-call

<分区>

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

通过在 Google 中进行大量搜索,我发现这对于没有开启Root的设备来说是不可能的。

但是有什么替代方法或任何其他方法可以实现这一目标吗?

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

最佳答案

阅读步骤:

1.Android 设备中的一些本地音乐播放器在处理此问题时,在通话处于 TelephonyManager.EXTRA_STATE_OFFHOOK(摘机状态)时限制音乐,因此无法使用本地播放器播放背景音乐。但在某些情况下像“poweramp music palyer”这样的第三方 aps 是可能的。

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

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

AudioManager.OnAudioFocusChangeListener 通过使用这个你可以在下面的代码“focusChange=AUDIOFOCUS_LOSS_TRANSIENT”中得到音频管理器的状态(这个状态在后台播放音乐时调用任何来电)这个状态完全掌握在开发者手中播放或暂停音乐。根据您的要求,关于您问的问题,当通话处于摘机状态时是否要播放音乐不要在摘机状态下暂停播放音乐。这只有在耳机被禁用时才有可能

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)
        }
    }
};

关于Android 在通话期间播放音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28082471/

相关文章:

ios - 如何使声音无效?

android - 调用 Android Activity

java - Android 深层链接未重定向到 Play 商店

android - 在 Android 中通过电子邮件发送图像的可能方式有哪些?

android - 从音频文件获取图像的最佳方法是什么?

ios - 打电话后将用户返回到我的应用程序

ios - 以编程方式调用电话

java - 将折线添加到 map 错误失败解决: Ljava/time/ZonedDateTime

Android 4.0内核源代码?

c++ - 带有 SDL 音频的 Emscripten 工作模型