简体   繁体   English

当我点击android中的按钮时,我想一个接一个地播放音频

[英]I want to play audio one after another when i click button in android

ArrayList<String> videolist = new ArrayList<>();
videolist.add("http://muurl.com/abc/song1.mp3");
videolist.add("http://muurl.com/abc/song2.mp3");
videolist.add("http://muurl.com/abc/song3.mp3");

I have stored the audio links in the array list.我已将音频链接存储在数组列表中。 when I click the button, I want to play that audio one after another, when I click the button second-time audio should start from the first audio link当我单击该按钮时,我想一个接一个地播放该音频,当我单击该按钮时,第二次音频应从第一个音频链接开始

Have a look at the MediaPlayer class in conjunction with a OnCompletionListener :结合OnCompletionListener查看MediaPlayer类:

You would do something like:你会做这样的事情:

int playListPos = 0; // declare this outside the button click probably as a global variable (so we can access it and increment in the on click listener of the button

// the below code should go inside the button click
String url = videolist.get(playListPos); // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(
    AudioAttributes.Builder()
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
        .setUsage(AudioAttributes.USAGE_MEDIA)
        .build()
);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare(); // might take long! (for buffering, etc)
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    // this will be called every time a file is finished playing
    if (videolist.size() < playListPos) { // let's see if there is more files to play
        mediaPlayer.setDataSource(videolist.get(playlistPos));
        mediaPlayer.prepare();
        mediaPlayer.start();
        playListPos++;
    } else {
         // we played until the end. reset to 0 for when button is clicked again to restart from the beginning
         playListPos = 0;
   }
});
mediaPlayer.start();

Here is the solution that satisfies 3 conditions:这是满足3个条件的解决方案:

  • When user click Start button first time, the app will play video list one after one当用户第一次点击开始按钮时,应用程序将一个接一个播放视频列表

  • When user click Start button second time, the app will play the first video in the video list当用户第二次点击开始按钮时,应用程序将播放视频列表中的第一个视频

  • Release MediaPlayer when the app goes to background当应用程序进入后台时释放 MediaPlayer

MainActivity.java主活动.java

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private List<String> videolist;
    private int currentPlayingPosition;

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

        videolist = new ArrayList<>();
        videolist.add("http://muurl.com/abc/song1.mp3");
        videolist.add("http://muurl.com/abc/song2.mp3");
        videolist.add("http://muurl.com/abc/song3.mp3");

        // User click this button to play video in video list
        Button buttonPlayVideoList = findViewById(R.id.buttonPlayVideoList);
        buttonPlayVideoList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                playVideoList();
            }
        });
    }

    private void playVideoList() {
        if (mediaPlayer == null) {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setLooping(false);
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mediaPlayer.start();
                }
            });
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    ++currentPlayingPosition;
                    if (currentPlayingPosition < videolist.size()) {
                        playVideoAtPosition(currentPlayingPosition);
                    }
                }
            });
        }
        currentPlayingPosition = 0;
        playVideoAtPosition(currentPlayingPosition);
    }

    private void playVideoAtPosition(int position) {
        try {
            mediaPlayer.reset();
            mediaPlayer.setDataSource(videolist.get(position));
            mediaPlayer.prepareAsync();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onStop() {
        // Release media player when app goes to background
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
        super.onStop();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当用户单击下一个播放按钮时,我想停止当前播放的音频 - i want to stop current playing audio when user click on next play button Android:当我点击按钮时,它应该在WebView中播放视频 - Android: When I click on button it should play video in WebView 当我从另一帧按下播放按钮时,我想玩游戏 - I want Game to play when Play Button is Pressed from another frame 如何在单击“播放”按钮1次时逐个播放所有音频文件 - How to Play All Audio file One by One when Click PLAY button 1 time 当我单击活动时,我在其中有3个文本视图。 我想2秒的差距后加载文本视图一个又一个什么样的? - When I click on the activity I have 3 Text View in that. I want to load the Text View one after another like after a gap of 2 seconds? 我想知道如何在按钮单击时从Java AWT中的一个XML页面导航到另一个XML页面 - i want to know how to navigate from one XML page to another in Java AWT on button click 在android Studio中,我想要当我单击按钮时,下一个活动/片段应该来自右侧 - In android Studio, I want when i click on button , next activity/fragment should come from right side 我正在制作一个应用程序,如果您单击一个按钮,则会播放音频,但最后两个按钮不会播放音频 - I am making an app which if you click on a button an audio will play but the audio is not playing in last two buttons 当我单击单选按钮时,它没有显示我想要的输出? - when I click on radio button it does not showing output that I want? 我想在点击另一张图片后停止摇动 animation - I want to stop shake animation after click on another image
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM