android获取手机和sd卡上音乐列表

歌曲列表是来显示SD卡或手机内存中的歌曲,因为android会自动扫描媒体对象,直接使用MediaStore就可以显示歌曲名称、艺术家、缩略图等。再次使用ListView来显示这些信息,xml布局很简单就是一个ListView:
 

  1. 歌曲ID:MediaStore.Audio.Media._ID  
  2. Int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));   
  3.    
  4. 歌曲的名称 :MediaStore.Audio.Media.TITLE  
  5. String tilte = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));   
  6.    
  7. 歌曲的专辑名:MediaStore.Audio.Media.ALBUM  
  8. String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));   
  9.    
  10.    
  11. 歌曲的歌手名: MediaStore.Audio.Media.ARTIST  
  12. String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));   
  13.    
  14. 歌曲文件的路径 :MediaStore.Audio.Media.DATA  
  15. String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));   
  16.    
  17. 歌曲的总播放时长 :MediaStore.Audio.Media.DURATION  
  18. Int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));   
  19.    
  20. 歌曲文件的大小 :MediaStore.Audio.Media.SIZE  
  21. Int size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));   

 
[ html
<SPAN style="FONT-SIZE: 14px"><?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <ListView  
        android:id="@+id/music_list"  
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        android:background="@drawable/listbg"  
        android:cacheColorHint="#00000000" >  
    </ListView>  
  
</LinearLayout></SPAN><PRE class=java name="code"><SPAN style="FONT-SIZE: 14px">  
</SPAN></PRE>  
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <ListView
        android:id="@+id/music_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/listbg"
        android:cacheColorHint="#00000000" >
    </ListView>
 
</LinearLayout>[java] view plaincopyprint?<SPAN style="FONT-SIZE: 14px">  </SPAN>  
  既然使用ListView来显示歌曲信息,例如歌曲标题、歌手、缩略图以及时长等等。那么如何获取这些信息以及如何显示到ListView中呢?要分为两个步骤:
 
  (1)使用MediaStore获取歌曲信息
 
  (2)自定义Adapter将MediaStore获取歌曲信息显示出来
 
  
 
[html]
/**  
 *   
 */  
package com.android.musicplayer.activity;  
  
import java.io.File;  
import com.android.musicplayer.adapter.MusicListAdapter;  
import com.android.musicplayer.util.ScanSdReceiver;  
import android.app.Activity;  
import android.app.AlertDialog;  
import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.DialogInterface;  
import android.content.Intent;  
import android.content.IntentFilter;  
import android.database.Cursor;  
import android.media.AudioManager;  
import android.os.Bundle;  
import android.provider.MediaStore;  
import android.view.ContextMenu;  
import android.view.KeyEvent;  
import android.view.Menu;  
import android.view.MenuItem;  
import android.view.View;  
import android.view.ContextMenu.ContextMenuInfo;  
import android.view.View.OnCreateContextMenuListener;  
import android.widget.AdapterView;  
import android.widget.ListView;  
import android.widget.AdapterView.OnItemClickListener;  
  
/**  
 * @author Administrator  
 *   
 */  
public class SongsActivity extends Activity {  
  
    private int[] _ids;// 保存音乐ID临时数组  
    private String[] _artists;// 保存艺术家  
    private String[] _titles;// 标题临时数组  
    private ListView listView;// 列表对象  
    private Cursor cursor;  
    private MusicListAdapter musicListAdapter;  
    private AlertDialog ad = null;  
    private AlertDialog.Builder builder = null;  
    private static final String MUSIC_LIST = "com.android.musicplayer.activity.list";  
    /**  
     * 定义查找音乐信息数组,1.标题 2.音乐时间 3.艺术家 4.音乐id 5.显示名字 6.数据  
     */  
    String[] media_music_info = new String[] { MediaStore.Audio.Media.TITLE,  
            MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST,  
            MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,  
            MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_songs);  
        listView = (ListView) findViewById(R.id.music_list);  
        listView.setOnItemClickListener(new MusicListOnClickListener());// 创建一个ListView监听器对象  
        showMusicList();  
    }  
  
    private void showMusicList() {  
        cursor = getContentResolver().query(  
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, media_music_info,  
                null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
        cursor.moveToFirst();// 将游标移动到初始位置  
        _ids = new int[cursor.getCount()];// 返回int的一个列  
        _artists = new String[cursor.getCount()];// 返回String的一个列  
        _titles = new String[cursor.getCount()];// 返回String的一个列  
        for (int i = 0; i < cursor.getCount(); i++) {  
            _ids[i] = cursor.getInt(3);  
            _titles[i] = cursor.getString(0);  
            _artists[i] = cursor.getString(2);  
            cursor.moveToNext();// 将游标移到下一行  
        }  
        musicListAdapter = new MusicListAdapter(this, cursor);  
        listView.setAdapter(musicListAdapter);// 用setAdapter装载数据  
        listView.setOnCreateContextMenuListener(new ContextMenuListener());  
    }  
  
      
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if (keyCode == KeyEvent.KEYCODE_BACK) {  
            if (scanSdReceiver != null)  
                unregisterReceiver(scanSdReceiver);  
            Intent intent = new Intent();  
            intent.setClass(this, MainActivity.class);  
            startActivity(intent);  
            finish();  
        }  
        return true;  
    }  
  
}  
 
/**
 * 
 */
package com.android.musicplayer.activity;
 
import java.io.File;
import com.android.musicplayer.adapter.MusicListAdapter;
import com.android.musicplayer.util.ScanSdReceiver;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.media.AudioManager;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
 
/**
 * @author Administrator
 * 
 */
public class SongsActivity extends Activity {
 
private int[] _ids;// 保存音乐ID临时数组
private String[] _artists;// 保存艺术家
private String[] _titles;// 标题临时数组
private ListView listView;// 列表对象
private Cursor cursor;
private MusicListAdapter musicListAdapter;
private AlertDialog ad = null;
private AlertDialog.Builder builder = null;
private static final String MUSIC_LIST = "com.android.musicplayer.activity.list";
/**
* 定义查找音乐信息数组,1.标题 2.音乐时间 3.艺术家 4.音乐id 5.显示名字 6.数据
*/
String[] media_music_info = new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID };
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_songs);
listView = (ListView) findViewById(R.id.music_list);
listView.setOnItemClickListener(new MusicListOnClickListener());// 创建一个ListView监听器对象
showMusicList();
}
 
private void showMusicList() {
cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, media_music_info,
null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
cursor.moveToFirst();// 将游标移动到初始位置
_ids = new int[cursor.getCount()];// 返回int的一个列
_artists = new String[cursor.getCount()];// 返回String的一个列
_titles = new String[cursor.getCount()];// 返回String的一个列
for (int i = 0; i < cursor.getCount(); i++) {
_ids[i] = cursor.getInt(3);
_titles[i] = cursor.getString(0);
_artists[i] = cursor.getString(2);
cursor.moveToNext();// 将游标移到下一行
}
musicListAdapter = new MusicListAdapter(this, cursor);
listView.setAdapter(musicListAdapter);// 用setAdapter装载数据
listView.setOnCreateContextMenuListener(new ContextMenuListener());
}
 
 
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (scanSdReceiver != null)
unregisterReceiver(scanSdReceiver);
Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
startActivity(intent);
finish();
}
return true;
}
 
}
 
 
 
 
  同样的使用自定义Adapter来显示歌曲:MusicListAdapter,这里有一点要说明的是,获取歌曲内置的图片比较麻烦一些。
 
 
 
[java] 
<SPAN style="FONT-SIZE: 14px">/** 
 *  
 */  
package com.android.musicplayer.adapter;  
  
import java.io.FileDescriptor;  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
import com.android.musicplayer.activity.R;  
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.os.ParcelFileDescriptor;  
import android.provider.MediaStore;  
import android.util.Log;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.BaseAdapter;  
import android.widget.ImageView;  
import android.widget.TextView;  
  
/** 
 * @author Administrator 
 *  
 */  
public class MusicListAdapter extends BaseAdapter {  
  
    private Context myContext;  
    private Cursor myCursor;  
    private int pos = -1;  
  
    public MusicListAdapter(Context context, Cursor cursor) {  
        myContext = context;  
        myCursor = cursor;  
    }  
  
    @Override  
    public int getCount() {  
        return myCursor.getCount();  
    }  
  
    @Override  
    public Object getItem(int position) {  
        return position;  
    }  
  
    @Override  
    public long getItemId(int position) {  
        return position;  
    }  
  
    @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        ViewHolder holder = null;  
        View vi = convertView;  
        if (convertView == null) {  
            holder = new ViewHolder();  
            vi = LayoutInflater.from(myContext).inflate(R.layout.musiclist,  
                    null);  
            holder.tv_music = (TextView) vi.findViewById(R.id.music1);  
            holder.tv_singer = (TextView) vi.findViewById(R.id.singer);  
            holder.tv_time = (TextView) vi.findViewById(R.id.time);  
            holder.img = (ImageView) vi.findViewById(R.id.listitem);  
            vi.setTag(holder);  
        } else {  
            holder = (ViewHolder) convertView.getTag();  
        }  
        myCursor.moveToPosition(position);  
        if (myCursor.getString(0).length() > 15) {  
            try {  
                String musicTitle = myCursor.getString(0).trim()  
                        .substring(0, 12)  
                        + "...";  
                holder.tv_music.setText(musicTitle);  
            } catch (Exception e) {  
  
                e.printStackTrace();  
            }  
        } else {  
            holder.tv_music.setText(myCursor.getString(0).trim());  
        }  
        if (myCursor.getString(2).equals("<unknown>")) {  
            holder.tv_singer.setText("未知艺术家?");  
        } else {  
            holder.tv_singer.setText(myCursor.getString(2));  
        }  
        if (position == pos) {  
            holder.img.setImageResource(R.drawable.isplaying);  
        } else {  
            // img.setImageResource(R.drawable.item);   
            Bitmap bm = getArtwork(myContext, myCursor.getInt(3),  
                    myCursor.getInt(myCursor  
                            .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)),  
                    true);  
            holder.img.setImageBitmap(bm);  
        }  
        return vi;  
    }  
  
    public void setItemIcon(int position) {  
        pos = position;  
    }  
  
    public String toTime(int time) {  
  
        time /= 1000;  
        int minute = time / 60;  
        int hour = minute / 60;  
        int second = time % 60;  
        minute %= 60;  
        return String.format("%02d:%02d", minute, second);  
    }  
  
    public static Bitmap getArtwork(Context context, long song_id,  
            long album_id, boolean allowdefault) {  
        Log.v("ADW", "getArtwork");  
        if (album_id < 0) {  
            // This is something that is not in the database, so get the album   
            // art directly   
            // from the file.   
            if (song_id >= 0) {  
                Bitmap bm = getArtworkFromFile(context, song_id, -1);  
                if (bm != null) {  
                    return bm;  
                }  
            }  
            if (allowdefault) {  
                return getDefaultArtwork(context);  
            }  
            return null;  
        }  
        ContentResolver res = context.getContentResolver();  
        Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);  
        if (uri != null) {  
            InputStream in = null;  
            try {  
                in = res.openInputStream(uri);  
                BitmapFactory.Options options = new BitmapFactory.Options();  
                options.inSampleSize = 1;  
                options.inJustDecodeBounds = true;  
                BitmapFactory.decodeStream(in, null, options);  
                options.inSampleSize = computeSampleSize(options, 30);  
                options.inJustDecodeBounds = false;  
                options.inDither = false;  
                options.inPreferredConfig = Bitmap.Config.ARGB_8888;  
                in = res.openInputStream(uri);  
                return BitmapFactory.decodeStream(in, null, options);  
            } 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, song_id, album_id);  
                if (bm != null) {  
                    if (bm.getConfig() == null) {  
                        bm = bm.copy(Bitmap.Config.RGB_565, false);  
                        if (bm == null && allowdefault) {  
                            return getDefaultArtwork(context);  
                        }  
                    }  
                } else if (allowdefault) {  
                    bm = getDefaultArtwork(context);  
                }  
                return bm;  
            } finally {  
                try {  
                    if (in != null) {  
                        in.close();  
                    }  
                } catch (IOException ex) {  
                }  
            }  
        }  
  
        return null;  
    }  
  
    private static Bitmap getArtworkFromFile(Context context, long songid,  
            long albumid) {  
        Bitmap bm = null;  
        byte[] art = null;  
        String path = null;  
        if (albumid < 0 && songid < 0) {  
            throw new IllegalArgumentException(  
                    "Must specify an album or a song id");  
        }  
        try {  
  
            BitmapFactory.Options options = new BitmapFactory.Options();  
  
            FileDescriptor fd = null;  
            if (albumid < 0) {  
                Uri uri = Uri.parse("content://media/external/audio/media/"  
                        + songid + "/albumart");  
                ParcelFileDescriptor pfd = context.getContentResolver()  
                        .openFileDescriptor(uri, "r");  
                if (pfd != null) {  
                    fd = pfd.getFileDescriptor();  
                    // bm = BitmapFactory.decodeFileDescriptor(fd,null,options);   
                }  
            } else {  
                Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);  
                ParcelFileDescriptor pfd = context.getContentResolver()  
                        .openFileDescriptor(uri, "r");  
                if (pfd != null) {  
                    fd = pfd.getFileDescriptor();  
                    // bm = BitmapFactory.decodeFileDescriptor(fd,null,options);   
                }  
            }  
            Log.v("ADW", "getArtworkFromFile");  
            options.inSampleSize = 1;  
            options.inJustDecodeBounds = true;  
            BitmapFactory.decodeFileDescriptor(fd, null, options);  
            options.inSampleSize = 500;// computeSampleSize(options, 800);             
            options.inJustDecodeBounds = false;  
            options.inDither = false;  
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;  
  
            bm = BitmapFactory.decodeFileDescriptor(fd, null, options);  
        } catch (FileNotFoundException ex) {  
  
        }  
        if (bm != null) {  
            mCachedBit = bm;  
        }  
        return bm;  
    }  
  
    static int computeSampleSize(BitmapFactory.Options options, int target) {  
        int w = options.outWidth;  
        int h = options.outHeight;  
        int candidateW = w / target;  
        int candidateH = h / target;  
        int candidate = Math.max(candidateW, candidateH);  
        if (candidate == 0)  
            return 1;  
        if (candidate > 1) {  
            if ((w > target) && (w / candidate) < target)  
                candidate -= 1;  
        }  
        if (candidate > 1) {  
            if ((h > target) && (h / candidate) < target)  
                candidate -= 1;  
        }  
        Log.v("ADW", "candidate:" + candidate);  
        return candidate;  
    }  
  
    private static Bitmap getDefaultArtwork(Context context) {  
        BitmapFactory.Options opts = new BitmapFactory.Options();  
        opts.inPreferredConfig = Bitmap.Config.RGB_565;  
        return BitmapFactory.decodeStream(context.getResources()  
                .openRawResource(R.drawable.item), null, opts);  
    }  
  
    private static final Uri sArtworkUri = Uri  
            .parse("content://media/external/audio/albumart");  
    private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();  
    private static Bitmap mCachedBit = null;  
  
    class ViewHolder {  
        public TextView tv_music, tv_singer, tv_time;  
        public ImageView img;  
    }  
}  
</SPAN>  
 
/**
 * 
 */
package com.android.musicplayer.adapter;
 
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import com.android.musicplayer.activity.R;
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.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
/**
 * @author Administrator
 * 
 */
public class MusicListAdapter extends BaseAdapter {
 
private Context myContext;
private Cursor myCursor;
private int pos = -1;
 
public MusicListAdapter(Context context, Cursor cursor) {
myContext = context;
myCursor = cursor;
}
 
@Override
public int getCount() {
return myCursor.getCount();
}
 
@Override
public Object getItem(int position) {
return position;
}
 
@Override
public long getItemId(int position) {
return position;
}
 
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
View vi = convertView;
if (convertView == null) {
holder = new ViewHolder();
vi = LayoutInflater.from(myContext).inflate(R.layout.musiclist,
null);
holder.tv_music = (TextView) vi.findViewById(R.id.music1);
holder.tv_singer = (TextView) vi.findViewById(R.id.singer);
holder.tv_time = (TextView) vi.findViewById(R.id.time);
holder.img = (ImageView) vi.findViewById(R.id.listitem);
vi.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
myCursor.moveToPosition(position);
if (myCursor.getString(0).length() > 15) {
try {
String musicTitle = myCursor.getString(0).trim()
.substring(0, 12)
+ "...";
holder.tv_music.setText(musicTitle);
} catch (Exception e) {
 
e.printStackTrace();
}
} else {
holder.tv_music.setText(myCursor.getString(0).trim());
}
if (myCursor.getString(2).equals("<unknown>")) {
holder.tv_singer.setText("未知艺术家?");
} else {
holder.tv_singer.setText(myCursor.getString(2));
}
if (position == pos) {
holder.img.setImageResource(R.drawable.isplaying);
} else {
// img.setImageResource(R.drawable.item);
Bitmap bm = getArtwork(myContext, myCursor.getInt(3),
myCursor.getInt(myCursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)),
true);
holder.img.setImageBitmap(bm);
}
return vi;
}
 
public void setItemIcon(int position) {
pos = position;
}
 
public String toTime(int time) {
 
time /= 1000;
int minute = time / 60;
int hour = minute / 60;
int second = time % 60;
minute %= 60;
return String.format("%02d:%02d", minute, second);
}
 
public static Bitmap getArtwork(Context context, long song_id,
long album_id, boolean allowdefault) {
Log.v("ADW", "getArtwork");
if (album_id < 0) {
// This is something that is not in the database, so get the album
// art directly
// from the file.
if (song_id >= 0) {
Bitmap bm = getArtworkFromFile(context, song_id, -1);
if (bm != null) {
return bm;
}
}
if (allowdefault) {
return getDefaultArtwork(context);
}
return null;
}
ContentResolver res = context.getContentResolver();
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
if (uri != null) {
InputStream in = null;
try {
in = res.openInputStream(uri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(in, null, options);
options.inSampleSize = computeSampleSize(options, 30);
options.inJustDecodeBounds = false;
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
in = res.openInputStream(uri);
return BitmapFactory.decodeStream(in, null, options);
} 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, song_id, album_id);
if (bm != null) {
if (bm.getConfig() == null) {
bm = bm.copy(Bitmap.Config.RGB_565, false);
if (bm == null && allowdefault) {
return getDefaultArtwork(context);
}
}
} else if (allowdefault) {
bm = getDefaultArtwork(context);
}
return bm;
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException ex) {
}
}
}
 
return null;
}
 
private static Bitmap getArtworkFromFile(Context context, long songid,
long albumid) {
Bitmap bm = null;
byte[] art = null;
String path = null;
if (albumid < 0 && songid < 0) {
throw new IllegalArgumentException(
"Must specify an album or a song id");
}
try {
 
BitmapFactory.Options options = new BitmapFactory.Options();
 
FileDescriptor fd = null;
if (albumid < 0) {
Uri uri = Uri.parse("content://media/external/audio/media/"
+ songid + "/albumart");
ParcelFileDescriptor pfd = context.getContentResolver()
.openFileDescriptor(uri, "r");
if (pfd != null) {
fd = pfd.getFileDescriptor();
// bm = BitmapFactory.decodeFileDescriptor(fd,null,options);
}
} else {
Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);
ParcelFileDescriptor pfd = context.getContentResolver()
.openFileDescriptor(uri, "r");
if (pfd != null) {
fd = pfd.getFileDescriptor();
// bm = BitmapFactory.decodeFileDescriptor(fd,null,options);
}
}
Log.v("ADW", "getArtworkFromFile");
options.inSampleSize = 1;
options.inJustDecodeBounds = true;
BitmapFactory.decodeFileDescriptor(fd, null, options);
options.inSampleSize = 500;// computeSampleSize(options, 800);
options.inJustDecodeBounds = false;
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
 
bm = BitmapFactory.decodeFileDescriptor(fd, null, options);
} catch (FileNotFoundException ex) {
 
}
if (bm != null) {
mCachedBit = bm;
}
return bm;
}
 
static int computeSampleSize(BitmapFactory.Options options, int target) {
int w = options.outWidth;
int h = options.outHeight;
int candidateW = w / target;
int candidateH = h / target;
int candidate = Math.max(candidateW, candidateH);
if (candidate == 0)
return 1;
if (candidate > 1) {
if ((w > target) && (w / candidate) < target)
candidate -= 1;
}
if (candidate > 1) {
if ((h > target) && (h / candidate) < target)
candidate -= 1;
}
Log.v("ADW", "candidate:" + candidate);
return candidate;
}
 
private static Bitmap getDefaultArtwork(Context context) {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGB_565;
return BitmapFactory.decodeStream(context.getResources()
.openRawResource(R.drawable.item), null, opts);
}  www.2cto.com
 
private static final Uri sArtworkUri = Uri
.parse("content://media/external/audio/albumart");
private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
private static Bitmap mCachedBit = null;
 
class ViewHolder {
public TextView tv_music, tv_singer, tv_time;
public ImageView img;
}
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值