【问题标题】:Android play again after stoping mediaplayer don't wok停止媒体播放器后Android再次播放不起作用
【发布时间】:2019-03-02 17:36:04
【问题描述】:

在我的简单播放器中,我有播放,停止按钮和播放和暂停媒体播放器工作正常,现在单击停止并再次播放后,媒体播放器不工作,我不确定要解决什么问题

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ...

    playMonthLesson();

    ...
}

@SuppressLint("DefaultLocale")
public void playMonthLesson() {
    try {
        mediaPlayer.reset();
        mediaPlayer.setDataSource(CoreApplication.MEDIAFOLDER + "/" + lesson.getFilename());
        mediaPlayer.prepare();
        mediaPlayer.start();
        lesson_play.setImageResource(R.drawable.ic_pause);
        int totalDuration = mediaPlayer.getDuration();

        // set Progress bar values
        lesson_progress_bar.setProgress(curretLessonProgress);
        lesson_progress_bar.setMax(100);

        // Updating progress bar
        updateProgressBar();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@OnClick(R.id.lesson_play)
public void lesson_play(View view) {
    if (mediaPlayer == null) {
        playMonthLesson();
    } else if (mediaPlayer.isPlaying()) {
        if (mediaPlayer != null) {
            mediaPlayer.pause();
            // Changing button image to play button
            lesson_play.setImageResource(R.drawable.ic_play);
        }
    } else {
        // Resume song
        if (mediaPlayer != null) {
            mediaPlayer.start();
            // Changing button image to pause button
            lesson_play.setImageResource(R.drawable.ic_pause);
        }
    }
}

@OnClick(R.id.lesson_stop)
public void setLesson_stop(View view) {
    if (mediaPlayer != null) {
        mediaPlayer.stop();
        lesson_play.setImageResource(R.drawable.ic_play);
        lesson_progress_bar.setProgress(0);
    }
}

【问题讨论】:

  • 你能确定 onCreateView 是否没有被再次调用并在完成后再次调用吗?尝试使用调试器或记录器来找出答案。您可以在代码中的几个步骤中使用它,并找到它在哪里重复

标签: android android-mediaplayer


【解决方案1】:

根据MediaPlayer生命周期,你可以在Android API guide中查看,我认为你必须调用reset()而不是stop(),然后再次准备媒体播放器(只使用一个) 从头开始​​播放声音。还要考虑到声音可能已经结束。所以我还建议实施setOnCompletionListener() 以确保如果您再次尝试播放声音,它不会失败。

【讨论】:

    【解决方案2】:

    问题是,当您停止 mediaplayer 并再次单击播放时,您的呼叫将转到 mediaplayer.play(),因为 mediaplayer 不为空。

    您必须在停止方法时将 mediaPlayer 设为空。现在,一旦你停止媒体播放器并再次点击播放,它将调用playMonthLesson();

    @OnClick(R.id.lesson_stop)
    public void setLesson_stop(View view) {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.reset();
            mediaPlayer = null;
            lesson_play.setImageResource(R.drawable.ic_play);
            lesson_progress_bar.setProgress(0);
        }
    }

    也更改此代码,

    @SuppressLint("DefaultLocale")
    public void playMonthLesson() {
        try {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.reset();
            mediaPlayer.setDataSource(CoreApplication.MEDIAFOLDER + "/" + lesson.getFilename());
            mediaPlayer.setOnPreparedListener(new OnPreparedListener(){
    
            @Override
                public void onPrepared(MediaPlayer mp) {
                   mp.start();
                   lesson_play.setImageResource(R.drawable.ic_pause);
                   int totalDuration = mediaPlayer.getDuration();
                }
            });
            mediaPlayer.prepareAsync();  
            // set Progress bar values
            lesson_progress_bar.setProgress(curretLessonProgress);
            lesson_progress_bar.setMax(100);
    
            // Updating progress bar
            updateProgressBar();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    【讨论】:

    • 谢谢,但媒体不再播放
    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多