簡體   English   中英

為什么通過最近的應用程序恢復活動時 Mediaplayer 不工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM