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

时间:2018-09-30 23:53:50

标签: java 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());
    }
}

1 个答案:

答案 0 :(得分:0)

  

“如何在我的onItemClick方法上获得位置?”

onItemClick的第三个参数是位置:

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;
}

然后您创建一个ArrayList的{​​{1}}(而不是SongData的ArrayList)。

在您的String方法中,使用光标中的信息填充ArrayList:

obtenerMusica()

在您的onItemClick中,播放音乐:

...
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());
  

为什么3首歌曲没有出现在listView中?

您似乎没有从 @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(); } 调用doStuff()方法。