![](/img/trans.png)
[英]Why does an intent gets redelivered when returning to activity from recent apps?
[英]Why does the Mediaplayer not work when the activity is resumed through the recent apps?
我面臨的問題是,當使用最近的應用程序恢復包含媒體播放器的活動時,單擊圖像時媒體播放器無法正確播放。 當使用后退按鈕關閉應用程序然后使用最近的應用程序重新打開時,媒體播放器可以完美運行。 但是,如果應用程序使用主頁按鈕關閉,然后使用最近的應用程序重新打開,即使單擊圖像,媒體播放器也不會播放。
public class MainActivity extends AppCompatActivity {
private static final String STATE_MEDIA_PLAYER = "media_player_state";
private static final String STATE_AUDIO_PLAYING = "audio_playing_state";
ImageView imageView;
GifImageView gifImageView;
MediaPlayer mediaPlayer;
boolean isAudioPlaying = false;
private AdView mAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
imageView = findViewById(R.id.imageRickroll);
gifImageView = findViewById(R.id.gifImage);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!isAudioPlaying) {
mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.rickroll_song);
if (mediaPlayer != null) {
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
gifImageView.setVisibility(View.GONE);
mediaPlayer.stop();
mediaPlayer.release();
isAudioPlaying = false;
}
});
mediaPlayer.start();
isAudioPlaying = true;
}
}
gifImageView.setImageResource(R.drawable.deadserver);
gifImageView.setVisibility(View.VISIBLE);
}
});
}
private void stopAndReleaseMediaPlayer() {
if (mediaPlayer != null) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onStop() {
super.onStop();
gifImageView.setVisibility(View.GONE);
stopAndReleaseMediaPlayer();
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mediaPlayer != null && isAudioPlaying) {
mediaPlayer.start();
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean(STATE_AUDIO_PLAYING, isAudioPlaying);
if (mediaPlayer != null) {
int currentPosition = mediaPlayer.getCurrentPosition();
savedInstanceState.putInt(STATE_MEDIA_PLAYER, currentPosition);
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
isAudioPlaying = savedInstanceState.getBoolean(STATE_AUDIO_PLAYING);
int currentPosition = savedInstanceState.getInt(STATE_MEDIA_PLAYER, 0);
if (mediaPlayer != null && isAudioPlaying) {
mediaPlayer.seekTo(currentPosition);
mediaPlayer.start();
}
}
}
如果你使用
mediaPlayer.release();
然后不能再次使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.