显示 SD 卡上的所有音乐 [英] Display all music on SD card

查看:37
本文介绍了显示 SD 卡上的所有音乐的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用此页面的代码:

I'm using code form this page:

http://z4android.blogspot.com/2011/06/displaying-list-of-music-files-stored.html

代码正在运行,但不是很好.当我尝试向下滚动时,ListView 不断重复列表中的歌曲.

The code is working, but not soo good. When I'm trying to scroll down, the ListView keeps repeating the songs in the list.

我一直在寻找一些替代代码,但没有找到.

I have been looking for some alternative code, but I have not found any.

感谢您的帮助.

推荐答案

我不完全确定导致您提到的问题的确切原因,但请尝试使用此代码.

I'm not entirely sure exactly what causes the problems you mention, but try this code.

private MediaPlayer mMediaPlayer;
private String[] mMusicList;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mMediaPlayer = new MediaPlayer();

  ListView mListView = (ListView) findViewById(R.id.listView1);

  mMusicList = getMusic();

  ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this,
  android.R.layout.simple_list_item_1, mMusicList);
  mListView.setAdapter(mAdapter);

  mListView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
      try {
        playSong(mMusicList[arg2]);
      } catch (IllegalArgumentException e) {
        e.printStackTrace();
      } catch (IllegalStateException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  });
}

private String[] getMusic() {
  final Cursor mCursor = managedQuery(
  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
  new String[] { MediaStore.Audio.Media.DISPLAY_NAME }, null, null,
  "LOWER(" + MediaStore.Audio.Media.TITLE + ") ASC");

  int count = mCursor.getCount();

  String[] songs = new String[count];
  int i = 0;
  if (mCursor.moveToFirst()) {
    do {
      songs[i] = mCursor.getString(0);
      i++;
    } while (mCursor.moveToNext());
  }

  mCursor.close();

  return songs;
}

private void playSong(String path) throws IllegalArgumentException,
IllegalStateException, IOException {
  String extStorageDirectory = Environment.getExternalStorageDirectory()
  .toString();

  path = extStorageDirectory + File.separator + path;

  mMediaPlayer.reset();
  mMediaPlayer.setDataSource(path);
  mMediaPlayer.prepare();
  mMediaPlayer.start();
}

这篇关于显示 SD 卡上的所有音乐的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆