java - Android Studio : Start and Stop audio using mediaPlayer

标签 java android xml android-mediaplayer

如何使用同一按钮开始停止播放音乐。如果我重复单击下面的代码,则会多次(重叠)播放该歌曲。

另一个问题是在哪里插入 starTimerStopTimer 函数,这样当声音没有播放时,starTimer 将激活,而当声音正在播放时,stopTimer 将激活。

更新的代码:

   public void playFile(View v) {
    if (mediaPlayer == null)
        mediaPlayer = new MediaPlayer();

    try {

        mediaPlayer.setDataSource(question.getAudio());

        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(@NotNull MediaPlayer mp) {
                mediaPlayer.start();
            }
        });
        mediaPlayer.prepareAsync();

    }catch (IOException e) {
        e.printStackTrace();
        stopSelf();
    }

    if (mediaPlayer.isPlaying()) {
        //pause music
        mediaPlayer.pause();
    } else {
        //play music
        mediaPlayer.start();
    }
}

XML 文件:

<Button
    android:id="@+id/audQuestion"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Play"
    android:onClick="playFile"
    android:layout_centerInParent="true"/>

以及 startTimer stopTimer 函数

public void starTimer() {
    timer = new Timer(Constant.TIME_PER_QUESTION, Constant.COUNT_DOWN_TIMER);
    timer.start();
}

public void stopTimer() {
    if (timer != null)
        timer.cancel();
}

最佳答案

请在全局定义以下代码:

private Button play_pause;
MediaPlayer mediaPlayer; 

现在在onCreate方法中:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mediaPlayer = new MediaPlayer();
        play_pause = findViewById(R.id.play_pause);
    }

播放暂停按钮:

play_pause.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (mediaPlayer != null) {
                        if (mediaPlayer.isPlaying()) {
                            mediaPlayer.pause();
                        } else {
                            mediaPlayer.getDuration();
                            mediaPlayer.start();
                        }
                    } 
                }
            });

当音频准备好播放时:

private void readyToPlay(Uri uri) {
        try {
            if (mediaPlayer != null) {
                mediaPlayer.setOnCompletionListener(this);
                mediaPlayer.setDataSource(activity, uri);//Write your location here
                mediaPlayer.prepare();
                mediaPlayer.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

音频完成后自动停止:

@Override
    public void onCompletion(MediaPlayer mp) {
        if (mediaPlayer != null) {
            mp.stop();
            mp.release();
        }
    }

不要忘记添加这一行:

implements MediaPlayer.OnCompletionListener

关于java - Android Studio : Start and Stop audio using mediaPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816801/

相关文章:

尽管存在 NoArgsConstructor,但出现 java.lang.InstantiationException

java - Spring组件注解编译时扫描

android - android中耳机输入的低电平(电压)访问

android - 有没有办法在android中使用mysql转储文件作为数据库源

xml - 在bash中生成XML,需要一些有效的想法

java - 如何在 tycho 中引用 mockito?

java - CardView-TextView marginRight

Android 风格及其工作原理

xml - 当文件具有 xmlns 属性时在 F# 中解析 xml

php - 将xml数据存入mysql数据库