0
我通过教程阅读并创建了一个名为SimplePlayer
的简单音乐播放器。当我点击我想播放的歌曲时,播放效果非常好。自动播放列表中的歌曲?
但是,当该歌曲结束时,不是播放下一首歌曲,而是播放列表中的第二首歌曲,然后一直播放它。
我知道这首歌的时候第一首歌曲结束的选择是onCompletion
方法与mp.setDataSource
里面,但我不知道我需要把比+1
其他支架,使其播放下歌曲列表:
public void onCompletion(MediaPlayer mp) {
try {
mp.reset();
mp.setDataSource(SD_PATH + songs.get(+1));
mp.prepare();
mp.start();
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
} catch(IOException e) {
Log.v(getString(R.string.app_name), e.getMessage());
}
下面是代码的情况下,其余的我都没有改变的东西还有:
public class MainActivity extends ListActivity implements OnCompletionListener {
private static final String SD_PATH = new String(Environment.getExternalStorageDirectory().getPath() + "/");
private List<String> songs = new ArrayList<String>();
private MediaPlayer mp = new MediaPlayer();
private View play;
private View pause;
private View stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updatePlaylist();
play = (ImageButton)findViewById(R.id.imageButton1);
pause = (ImageButton)findViewById(R.id.imageButton2);
stop = (ImageButton)findViewById(R.id.imageButton3);
mp.setOnCompletionListener(this);
play.setEnabled(false);
pause.setEnabled(false);
stop.setEnabled(false);
}
@Override
protected void onListItemClick(ListView list, View view, int position, long id) {
try {
mp.reset();
mp.setDataSource(SD_PATH + songs.get(position));
mp.prepare();
mp.start();
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
} catch(IOException e) {
Log.v(getString(R.string.app_name), e.getMessage());
}
}
private void updatePlaylist() {
File home = new File(SD_PATH);
if (home.listFiles(new Mp3Filter()).length > 0) {
for (File file : home.listFiles(new Mp3Filter())) {
songs.add(file.getName());
}
ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.song_item,songs);
setListAdapter(songList);
}
}
public void play(View view){
Toast.makeText(getApplicationContext(), "Playing song",
Toast.LENGTH_SHORT).show();
mp.start();
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
}
public void pause(View view){
Toast.makeText(getApplicationContext(), "Pausing song",
Toast.LENGTH_SHORT).show();
mp.pause();
play.setEnabled(true);
pause.setEnabled(false);
stop.setEnabled(true);
}
public void stop(View view){
Toast.makeText(getApplicationContext(), "Stopping song",
Toast.LENGTH_SHORT).show();
mp.stop();
play.setEnabled(false);
pause.setEnabled(false);
stop.setEnabled(false);
}
@Override
public void onCompletion(MediaPlayer mp) {
try {
mp.reset();
mp.setDataSource(SD_PATH + songs.get(+1));
mp.prepare();
mp.start();
play.setEnabled(false);
pause.setEnabled(true);
stop.setEnabled(true);
} catch(IOException e) {
Log.v(getString(R.string.app_name), e.getMessage());
}
}
}
也,我怎样才能让这个当应用程序运行,它列出了sd上的所有歌曲卡,手机存储和SD卡上的文件夹?目前它只列出了SD卡根目录中的歌曲。
我已经做了更改,现在它不断播放同一首歌曲。另外,有没有什么办法可以创建第二个目录,在这个目录中应用程序从两个目录中找到歌曲,并将它们放到一个列表中? – soul6942 2014-10-18 06:09:56
我改变了一行,并在'onCompletion'方法中添加了另一个'mp.setDataSource(SD_PATH + songs.get(SONG_NUMBER + 1));''SONG_NUMBER = SONG_NUMBER +1;'现在它完美地工作。你知道如何制作它,以便应用程序可以找到SD卡和手机存储中的所有歌曲,并将它们一起添加到一个列表中? – soul6942 2014-10-18 06:25:26
[点击这里做... ..从不同的目录中获取歌曲,并将它们放入单个列表中](0123)http://android-building-audio-player-tutorial/ – 2014-10-18 07:02:41