我正在使用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. 如何在接到電話時暫停並播放音頻流
- 4. 我的流音頻播放器在電話中繼續播放 - 無法停止! (Android)
- 5. 自動撥打電話號碼並播放音頻信息
- 6. 自動撥打電話並播放錄音留言
- 7. 音頻在接到電話時繼續在Phonegap上播放
- 8. ios pjsip - 在撥打電話時播放聲音
- 9. 撥打電話並播放留言? (Android 1.6)
- 10. 播放HTML5音頻時,原生iOS音樂播放器暫停
- 11. 在電子郵件中播放音樂
- 12. 繼續播放音樂,之後AVAudioPlayer
- 13. Android - 繼續音樂播放onPause
- 14. 暫停並繼續播放,停止播放
- 15. 如何在android中停止播放後再次播放流?
- 16. 如何在android中暫停不同的音樂播放器?
- 17. 在android中播放音樂
- 18. 通過電話撥打iOS音頻播放
- 19. 播放/暫停音樂播放器時保持文本行高 -
- 20. 如何暫停和播放音樂播放器
- 21. 熱鍵播放/暫停HTML5音樂播放器
- 22. 播放,暫停,停止音樂與UIActionSheet
- 23. 從用戶電腦播放音樂的在線音樂播放器
- 24. 在Android音樂播放器中播放音頻文件
- 25. 音樂播放器播放MP3連續兩次從音樂播放器在後臺 但音樂播放器的幫助原始文件夾
- 26. 如何在音樂播放器中播放LRC和音樂
- 27. 繼續播放來電
- 28. 如何在Android上打電話時播放聲音?
- 29. Sonos播放器不打電話GetStreamingMetadata
- 30. 在Android中停止並繼續播放音頻/視頻文件?
問題是,如果用戶在應用程序中更改活動,它也會暫停音樂。 – FlySwat 2009-12-03 06:55:30
我同意下面的標記 - 在這一點上,你可以使用PhoneStateListener來檢測是否由於電話使用造成的暫停 – Bostone 2009-12-04 00:36:17
如何做到這一點,你可以添加如何做到這一點的代碼 – 2013-09-13 13:06:27