장치에서 내부 및 외부 저장소에있는 모든 오디오 파일을 가져 오려고합니다. mediastorage 및 커서를 사용하고 있습니다. 그러나 노래 검색에 대한 적절한 예는 얻을 수 없습니다.저장 장치에서 오디오 파일 가져 오기
public class MainActivity extends ListActivity {
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] columns = { MediaStore.Audio.Media._ID };
int[] displayViews = new int[] {android.R.id.text1};
ContentResolver cr = this.getContentResolver();
cursor = cr.query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,columns, null, null, null);
setListAdapter(new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1,cursor,columns,displayViews,1));
}
public static ArrayList<SongDto> getMusicInfos(Context context) {
ArrayList<SongDto> musicInfos = new ArrayList<SongDto>();
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if (cursor == null) {
return null;
}
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToNext();
int isMusic = cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
if (isMusic != 0) {
SongDto music = new SongDto();
music.path = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
if (!new File(music.path).exists()) {
continue;
}
music.songId = cursor.getLong(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
music.songTitle = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
music.songTitle = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
music.album = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
music.songArtist = cursor.getString(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
music.duration = cursor
.getLong(cursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(music.path);
mmr.release();
musicInfos.add(music);
}
}
return musicInfos;
}
}
및
public class SongDto {
public long songId;
public String songTitle;
public String songArtist;
public String path;
public short genre;
public long duration;
public String album;
public Bitmap albumArt;
public String toString() {
return String.format("songId: %d, Title: %s, Artist: %s, Path: %s, Genere: %d, Duration %s",
songId, songTitle, songArtist, path, genre, duration);
}
}
이와 나는이 노래를 얻는 방법 사용되지 않습니다으로 SimpleCursorAdapter를 고정 무슨 내가 런타임 오류가 점점 오전 :
은이 코드를 사용 어댑터를 설정할 때 어떤 예나 힌트가 도움이 될 것입니다.
[this] (http://stackoverflow.com/a/18268013/5067493)가 도움이 될 수 있습니다. –
고정 된 폴더에서 노래를 가져올 수 있지만 mediastore를 통해 가능할 수있는 모든 노래를 다른 방법으로 만 가져오고 싶습니다. –