我正在使用android.media.MediaPlayer
对象在我的应用中播放音频文件。一切工作正常,但当一首歌曲播放时打电话时,应用程序不会暂停媒体播放器,您可以在通话期间听到歌曲。请告诉我如何通过电话暂停媒体播放器,并在通话结束后再次恢复。在电话中暂停音乐播放器,并在android中拨打电话后再次继续播放
4
A
回答
2
当你的活动(或服务)通过电话的地方MediaPlayer#pause()
打断成Activity#onPause
和代码恢复播放到Activity#onResume
我认为这个问题可能是在MediaPlayer在其自己的线程中执行,当你的活动被暂停,它并不意味着MediaPlayer也会自动暂停
5
使用PhoneStateListener
可以确定手机何时处于使用状态。
0
我有一个类似的问题。我的HTC Desire HD在电话抵达时会停止播放音乐,但挂断后不会恢复。我发现这是由Viber应用程序引起的,当我删除“Viber”时,一切都恢复正常。现在,当我接到电话时,音乐暂停并在我说完后恢复。
0
在你的应用程序介绍一个PhoneStateListener像这样:
private PhoneStateListener mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
try {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
pauseStream();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_IDLE:
resumeStream();
break;
default:
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
};
然后你需要把它架在你的onCreate(),或在您的onStartCommand()方法,在服务的情况下:
radioStream.setAudioStreamType(AudioManager.STREAM_MUSIC);
radioStream.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer stream) {
telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
isMusicPlaying = true;
isServiceRunning = true;
stream.start();
}
});
try {
radioStream.prepare();
} catch (IllegalStateException e1) {
e1.printStackTrace();
streamErrorHandler();
} catch (IOException e1) {
e1.printStackTrace();
streamErrorHandler();
}
,你可以实现你的下列方法版本:
public static void pauseStream() {
if (isServiceRunning) {
if (radioStream.isPlaying()) {
isMusicPlaying = false;
radioStream.pause();
}
} else {
Log.i(TAG, "service isn't running");
}
}
public static void resumeStream() {
if (isServiceRunning) {
if (!radioStream.isPlaying()) {
isMusicPlaying = true;
radioStream.start();
}
} else {
Log.i(TAG, "service isn't running");
}
}
radioStream是您的静态MediaPlayer对象。我在一个服务中使用这个,所以你可以退出isServiceRunning但这应该适用于任何人的情况。
0
这里是永久的解决方案。使用audiomanager获取音频焦点。当来电时,它会调用AUDIOFOCUS_LOSS_TRANSIENT,您可以用该方法暂停媒体播放器。调用后调用AUDIOFOCUS_GAIN方法,只需调用mediaplayer.start方法即可。
private AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
mMediaPlayer.start();}
else if(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){
mMediaPlayer.pause();
}
相关问题
- 1. 从停止播放音乐的时刻继续播放音乐
- 2. 如何在接到电话时暂停并播放音频流
- 3. 我的流音频播放器在电话中继续播放 - 无法停止! (Android)
- 4. 音频在接到电话时继续在Phonegap上播放
- 5. 拨打电话并播放留言? (Android 1.6)
- 6. Android - 继续音乐播放onPause
- 7. 如何在android中停止播放后再次播放流?
- 8. 在android中播放音乐
- 9. 通过电话拨打iOS音频播放
- 10. 如何暂停和播放音乐播放器
- 11. 热键播放/暂停HTML5音乐播放器
- 12. 播放,暂停,停止音乐与UIActionSheet
- 13. 如何在音乐播放器中播放LRC和音乐
- 14. 如何在Android上打电话时播放声音?
- 15. Sonos播放器不打电话GetStreamingMetadata
- 16. 继续播放来电
- 17. 使用Twilio拨打电话并播放留言
- 18. 在android中拨打电话
- 19. 在google中播放mp3播放音乐
- 20. 如何在电话接听时暂停视频播放?
- 21. iPhone通过电话播放声音
- 22. 播放声音文件到skype电话
- 23. 的Android TTS停止音乐播放器
- 24. 播放和暂停以播放声音
- 25. 在浏览网站时连续播放Flash音乐播放器
- 26. Android音乐播放器
- 27. 的Android音乐播放器 - 一次
- 28. 在Java中停止播放音乐
- 29. 星号在回答以外自动拨打电话时播放声音文件
- 30. 播放短音后iPod音乐将停止播放!
问题是,如果用户在应用程序中更改活动,它也会暂停音乐。 – FlySwat 2009-12-03 06:55:30
我同意下面的标记 - 在这一点上,你可以使用PhoneStateListener来检测是否由于电话使用造成的暂停 – Bostone 2009-12-04 00:36:17
如何做到这一点,你可以添加如何做到这一点的代码 – 2013-09-13 13:06:27