我想阻止我的音乐播放器应用程序在每次应用程序启动时扫描目录中的音频文件.我怎样才能做到这一点?
我一直在使用以下代码来扫描音频文件.
public void getSongList() {
ContentResolver contentResolver=getContentResolver();
Uri musicUri=android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = contentResolver.query(musicUri,null,null);
if(musicCursor!=null && musicCursor.movetoFirst()) {
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
int albumIDColumn = musicCursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
long thisAlbumID=musicCursor.getLong(albumIDColumn);
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Bitmap albumartBitMap=null;
Uri albumartUri = ContentUris.withAppendedId(sArtworkUri,thisAlbumID);
try {
albumartBitMap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),albumartUri);
Matrix m = new Matrix();
m.setRectToRect(new RectF(0,albumartBitMap.getWidth(),albumartBitMap.getHeight()),new RectF(0,300,300),Matrix.ScaletoFit.CENTER);
albumartBitMap = Bitmap.createBitmap(albumartBitMap,albumartBitMap.getHeight(),m,true);
} catch (IOException e) {
e.printstacktrace();
}
songList.add(new Song(thisId,thisTitle,thisArtist,albumartBitMap));
}
while (musicCursor.movetoNext());
}
}
我希望应用程序只在有新文件时进行扫描.因为如果我每次都扫描整张SD卡,那么启动应用程序需要花费太多时间.请帮帮我
解决方法
无需将所有歌曲保留在本地应用列表中.
要显示mp3list,您可以使用带限制的内容提供者光标列表适配器查询(逐页滚动查询)
要直接搜索使用contentprovider查询方法.
只在本地数据库上保留一个指向mp3 uri的播放列表.
此链接可能会帮助您:
How to update listview whose data was queried from database through SimpleCursorAdapter?