【问题标题】:I want to play audio one after another when i click button in android当我单击android中的按钮时,我想一个接一个地播放音频
【发布时间】:2020-11-23 06:26:26
【问题描述】:
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");

我已将音频链接存储在数组列表中。当我点击按钮时,我想一个接一个地播放那个音频,当我点击按钮第二次音频应该从第一个音频链接开始

【问题讨论】:

    标签: java android android-mediaplayer


    【解决方案1】:

    看看MediaPlayer 类和OnCompletionListener 的结合:

    你会做这样的事情:

    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();
    

    【讨论】:

    • 谢谢你....完成第一个音频后,第二个将无法播放..playListPos 将增加..如果其他状态将无法进入控制
    • 检查我的更新。抱歉不得不将 playListPos++ 移动到 if 语句中,而不是在它之前
    【解决方案2】:

    这是满足3个条件的解决方案:

    • 当用户第一次点击开始按钮时,应用会一个接一个地播放视频列表

    • 当用户第二次点击开始按钮时,应用将播放视频列表中的第一个视频

    • 当应用进入后台时释放 MediaPlayer

    MainActivity.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();
        }
    }
    

    【讨论】:

    • 很好的完整示例以及预增量和准备好的监听器的使用。 +1。
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2023-03-20
    • 2023-04-11
    相关资源
    最近更新 更多