package gilday.android.powerhour; import gilday.android.powerhour.model.PlaylistItem; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.provider.MediaStore; import android.util.Log; public class MusicUtils { private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart"); private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options(); static{ sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; sBitmapOptions.inDither = false; } public static PlaylistItem getInfoPack(Context context, int id){ return getInfoPack(context, id, true); } public static PlaylistItem getInfoPack(Context context, int id, boolean loadBitmap) { ContentResolver resolver = context.getContentResolver(); Cursor c = resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] {MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ALBUM_ID}, MediaStore.Audio.Media._ID + "=" + id, null, null); c.moveToFirst(); PlaylistItem info = null; try{ info = new PlaylistItem(); info.id = id; info.artist = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ARTIST)); info.album = c.getString(c.getColumnIndex(MediaStore.Audio.Media.ALBUM)); info.song = c.getString(c.getColumnIndex(MediaStore.Audio.Media.TITLE)); info.albumId = c.getInt(c.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); if(loadBitmap) { info.art = getArtwork(context, info.albumId); } } catch(Exception e){ Log.e("getID3", e.toString()); } finally { c.close(); } return info; } public static String getPathForSong(int id){ //Log.d("utils", "get path for id=" + id); return MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "/" + id; } public static long getDuration(Context context, int id){ Cursor c = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] {MediaStore.Audio.AudioColumns.DURATION}, MediaStore.Audio.Media._ID + "=" + id, null, null); if(!c.moveToFirst()){ return -1; } long duration = c.getLong(c.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)); c.close(); return duration; } /** * Modified from method by the same name in the MusicUtils class found in the Android project * @param context * @param album_id * @param sampleSize corresponds to BitmapFactory.Options sample size. 1 = full size * @return */ public static Bitmap getArtwork(Context context, int album_id, int sampleSize) { sBitmapOptions.inSampleSize = sampleSize; ContentResolver res = context.getContentResolver(); Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id); Bitmap bitmap = null; if (uri != null) { InputStream in = null; try { in = res.openInputStream(uri); bitmap = BitmapFactory.decodeStream(in, null, sBitmapOptions); } catch (FileNotFoundException ex) { // The album art thumbnail does not actually exist. Maybe the user deleted it, or // maybe it never existed to begin with. //Bitmap bm = getArtworkFromFile(context, null, album_id); return null; } finally { try { if (in != null) { in.close(); } } catch (IOException ex) { } } } return bitmap; } public static Bitmap getArtwork(Context context, int album_id) { return getArtwork(context, album_id, 1); } public static int getPlaylistSize(Context context, long id) { final String[] cols = new String[] { MediaStore.Audio.Playlists.Members.AUDIO_ID }; Cursor cursor = context.getContentResolver().query( MediaStore.Audio.Playlists.Members.getContentUri("external", id), cols, null, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER); if(cursor == null){ return -1; } return cursor.getCount(); } } //SongInfo song = new SongInfo(); //song.artist = songsCursor.getString(songsCursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); //song.album = songsCursor.getString(songsCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); //song.song = songsCursor.getString(songsCursor.getColumnIndex(MediaStore.Audio.Media.TRACK)); //String artUriString = songsCursor.getString(songsCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ART)); //if(artUriString != null && artUriString.length() > 0){ // song.artUri = Uri.parse(artUriString); //}