当我点击 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");
我已将音频 link 存储在数组列表中。当我点击按钮时,我想一个接一个地播放那个音频,当我点击按钮时,第二次音频应该从第一个音频开始link
看看 MediaPlayer class in conjunction with a 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();
这里是满足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();
}
}
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");
我已将音频 link 存储在数组列表中。当我点击按钮时,我想一个接一个地播放那个音频,当我点击按钮时,第二次音频应该从第一个音频开始link
看看 MediaPlayer class in conjunction with a 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();
这里是满足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();
}
}