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

来源:互联网 发布:支付宝网络诈骗怎么办 编辑:程序博客网 时间:2024/06/07 09:04
歌曲列表是来显示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;
}
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 教育部学籍在线验证报告过期怎么办 身份证被别人注册了学信网怎么办 大专文凭查不到学籍该怎么办 学信网上查不到学历怎么办 学信网上没有学历照片怎么办 学信网上没照片怎么办 学历认证报告丢了怎么办 学历认证弄丢了怎么办 手机系统安全证书有问题怎么办 台式电脑的浏览器证书出错怎么办 网上银行k宝密码忘了怎么办 工行证书介质已被锁定怎么办 学历认证是假的怎么办 怕被公司查学历怎么办 淘宝玩具没有怎么办3c 家庭遭遇小三我该怎么办 老公出轨把小三带回家了怎么办 小三怀孕了怎么办准生证 小三怀孕了起诉怎么办 不知情做了小三怎么办 发现自己被三了怎么办 被扇巴掌脸肿了怎么办 分到上海市金鼎学校怎么办 被列入维稳对象怎么办? 资金涉及诈骗案冻结了怎么办 小米浏览器浏览记录找不到了怎么办 米聊账号封了怎么办 管家婆创业版管理员忘记密码怎么办 手机不记得密码了怎么办 手机不记得开锁密码怎么办 oppo手机不记得密码怎么办 电脑密码不记得了怎么办 vivo手机不记得密码了怎么办 运管把车扣了怎么办 大学通选课挂科怎么办 通识必修课挂了怎么办 我想开3d艺术馆怎么办 档案回原籍报到证怎么办 服刑的人孩子上学怎么办 长沙终身教育网用户名忘记了怎么办 乡下卖服装没生意怎么办