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