对于我的 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)
}
}
};