簡體   English   中英

如何在Android的外部存儲中播放歌曲?

[英]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;
}

然后創建一個SongDataArrayList (而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM