Итак, мой код проходит через базу данных MediaStore для получения информации о mp3-файле.
Но мне было интересно, есть ли смысл вызывать мой метод build () который находится в другом классе внутри asyncTask в моей MainActivity ?
Есть ли разница между приведенным ниже кодом и простым вызовом library.getInstance().build(this);
в моем методе onCreate () MainActivity
private static class buildLibrary extends AsyncTask<Void, Void, Void>{
private WeakReference<Context> weakReference;
private buildSongsLibrary(Context context){
weakReference = new WeakReference<>(context);
}
@Override
protected Void doInBackground(Void... voids) {
try {
// Retrieves all songs on the device.
if (!library.getInstance().isLibraryInitialized()) {
library.getInstance().build(weakReference.get());
}
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
в другом классе
public void build(Context c) throws Exception {
final Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final Uri genreUri = MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI;
final Uri playlistUri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
StorageUtil storageUtil = new StorageUtil(c);
ContentResolver resolver = c.getContentResolver();
Cursor cursor;
String SONG_ID = MediaStore.Audio.Media._ID;
String SONG_TITLE = MediaStore.Audio.Media.TITLE;
String SONG_ARTIST = MediaStore.Audio.Media.ARTIST;
String SONG_ALBUMID = MediaStore.Audio.Media.ALBUM_ID;
String SONG_ALBUM = MediaStore.Audio.Media.ALBUM;
String GENRE_ID = MediaStore.Audio.Genres._ID;
String GENRE_NAME = MediaStore.Audio.Genres.NAME;
String SONG_FILEPATH = MediaStore.Audio.Media.DATA;
String SONG_DURATION = MediaStore.Audio.Media.DURATION;
String SONG_YEAR = MediaStore.Audio.Media.YEAR;
String SONG_ADDED = MediaStore.Audio.Media.DATE_ADDED;
String SONG_IS_MUSIC = MediaStore.Audio.Media.IS_MUSIC;
cursor = resolver.query(musicUri, projection1, selection, null, null);
try {
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Song song = new Song();
song.setId(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ID)));
song.setData(cursor.getString(cursor.getColumnIndexOrThrow(SONG_FILEPATH)));
song.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(SONG_TITLE)));
song.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ARTIST)));
song.setAlbumID(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
song.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ALBUM)));
song.setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_DURATION)));
song.setYear(cursor.getInt(cursor.getColumnIndexOrThrow(SONG_YEAR)));
song.setDateAdded(cursor.getInt(cursor.getColumnIndexOrThrow(SONG_ADDED)));
String currentGenreID = songIdToGenreIdMap.get(Long.toString(song.getId()));
String currentGenreName = genreIdToGenreNameMap.get(currentGenreID);
song.setGenre(currentGenreName);
songs.add(song);
cursor.moveToNext();
}
}
}catch (Exception e){
// Exception caught because no songs were found.
Log.e(TAG, "Exception caught because no songs were found!", e);
throw new Exception();
}finally {
if (cursor != null ){
cursor.close();
}
}
}