[英]How to play a song from external storage in Android?
嗨,我正在做音樂播放器,我想從外部存儲中復制歌曲,但是我不知道如何在onItemClick方法上獲得位置
我的原始目錄中也有3首歌曲,但沒有出現在列表視圖中
這是我的代碼
ArrayList<String> arrayList;
ListView listaCanciones;
ArrayAdapter<String> adapter;
MediaPlayer mediaPlayer [];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explorador);
public void doStuff(){
listaCanciones = (ListView)findViewById(R.id.lv);
arrayList = new ArrayList<>();
obtenerMusica();
adapter = new ArrayAdapter<>(this, R.layout.list_view_configuracion, arrayList);
listaCanciones.setAdapter(adapter);
listaCanciones.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
}
});
}
public void obtenerMusica(){
ContentResolver contentResolver = getContentResolver();
Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor songCursor = contentResolver.query(songUri, null, null, null, null);
if (songCursor != null && songCursor.moveToFirst()){
int songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
int songArtist = songCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);
do {
String currentTitle = songCursor.getString(songTitle);
String currentArtist = songCursor.getString(songArtist);
arrayList.add(currentTitle + "\n" + currentArtist);
} while (songCursor.moveToNext());
}
}
“如何在我的方法onItemClick上獲得位置?”
onItemClick的第三個參數是position:
public void onItemClick(AdapterView<?> adapterView, View view, int i /*position*/, long l)
創建一個自定義數據類可能更好,比如說SongData,其中包含標題,藝術家和URI 。
private class SongData{
public String artist;
public String title;
public String path;
}
然后創建一個SongData
的ArrayList
(而不是String
的ArrayList)。
在obtenerMusica()
方法中,使用光標中的信息填充ArrayList:
...
do {
String currentTitle = songCursor.getString(songTitle);
String currentArtist = songCursor.getString(songArtist);
String path = songCursom.getString(MediaStore.Audio.Media.DATA);
SongData songData = new SongData();
data.artist = currentArtist;
data.title = currentTitle;
data.path = "file:///" + path;
arrayList.add(songData);
} while (songCursor.moveToNext());
在您的onItemClick中,播放音樂:
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
SongData data = arrayList.get(i);
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer. setDataSource(data.path);
mediaPlayer.start();
}
為什么3首歌曲沒有出現在listView中?
您似乎沒有從onCreate
調用doStuff()
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.