当手机或模拟器开机时,会调用android的MediaScanner,扫描sd卡和内存里的文件。以下是log信息。
12-13 15:39:11.062: VERBOSE/MediaPlayerService(67): Create new media retriever from pid 349

12-13 15:39:11.082: DEBUG/MediaScannerService(349): getDefaultLocale =zh_CN
12-13 15:39:11.122: DEBUG/SurfaceFlinger(102): Layer::requestBuffer(this=0x7c8c68), index=1, pid=12866, w=309, h=192 success
12-13 15:39:11.142: INFO/MediaScanner(349): mOriginalCount = 14, prune thumb flag = false

12-13 15:39:11.142: DEBUG/MediaScanner(349):  prescan time: 44ms
12-13 15:39:11.142: DEBUG/MediaScanner(349):     scan time: 13ms
12-13 15:39:11.142: DEBUG/MediaScanner(349): postscan time: 2ms
12-13 15:39:11.142: DEBUG/MediaScanner(349):    total time: 59ms
12-13 15:39:11.152: DEBUG/MediaProvider(349): un-lock thumbnail worker
12-13 15:39:11.152: DEBUG/MediaProvider(349): un-lock thumbnail worker
12-13 15:39:11.182: DEBUG/MediaScannerService(349): done scanning volume external
那么扫描后的记录它保存到哪里了呢。哈。你觉得在哪里呢?data/data/com.android.media/providers/databases/external
它存了些什么信息呢,拉出来看看吧:
android 扫描SD卡与系统文件(转)_第1张图片
那么,我们直接使用ContentProvider就可以直接获取到sd卡中多媒体的信息了,你还用去listfile么?还用去自己解析媒体文件中的信息么(时长,文件名,专辑名。。应有尽有哦)?
Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DURATION,MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.YEAR,MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.DATA}, "_size>?", new String[]{1024*1024+""},null);

好了,最后一个问题,当你往sd卡中添加一些多媒体文件的时候,android没有自动将它刷新到数据库中。那么我们怎么让它手动刷新呢,如下:

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);         intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);         intentFilter.addDataScheme("file");         scanReceiver = new ScanSdFilesReceiver();         registerReceiver(scanReceiver, intentFilter);         sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); private class ScanSdFilesReceiver extends BroadcastReceiver {         public void onReceive(Context context, Intent intent) {             String action = intent.getAction();             if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) {                 scanHandler.sendEmptyMessage(STARTED);             }             if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) {                 scanHandler.sendEmptyMessage(FINISHED);             }         }     } private Handler scanHandler = new Handler() {         public void handleMessage(Message msg) {             super.handleMessage(msg);             switch (msg.what) {             case STARTED:                 MyDialog scanDialog = new MyDialog(LocalList.this);                 scanAlertDialog = scanDialog.scanFile();                 scanAlertDialog.show();                 Log.i(TAG, "showing");                 break;             case FINISHED:                 ArrayList tempSongs = ReadFileList.readDataFromSD(LocalList.this, LOCAL);                 if (tempSongs != null && tempSongs.size()>0) {                     if (songs != null && songs.size()>0) {                         songs.clear();                         songs.addAll(tempSongs);                         songAdapter.notifyDataSetChanged();                     }else {                         songs = new ArrayList();                         songs.addAll(tempSongs);                         initSong_lv();                     }                 }else {                     Toast.makeText(LocalList.this, "SD卡中没有歌曲,请添加后再扫描", Toast.LENGTH_SHORT).show();                 }                 Log.i(TAG, "finish");                 if (scanAlertDialog!=null && scanAlertDialog.isShowing()) {                     scanAlertDialog.dismiss();                 }                 unregisterReceiver(scanReceiver);                 break;             case DISMISS:                 Log.i(TAG, "dismiss");                 if (scanAlertDialog!=null&&scanAlertDialog                     .isShowing()) {                     scanAlertDialog.dismiss();                 }              default:break;             }

转自:
http://blog.csdn.net/cai200711/article/details/6594985

更多相关文章

  1. Android系统信息与安全机制
  2. android读写文件
  3. Android内核的根文件系统
  4. Android代码实现APK文件的安装与卸载

随机推荐

  1. Android(安卓)任务栈
  2. Android工作总结之如何做一个优秀的Media
  3. Android 平台上玩DOS游戏
  4. android PreferenceActivity
  5. android 开发中的Log
  6. 极光推送(守护进程)
  7. Android 下拉加载更多 上拉刷新 框架 (太
  8. ANDROID L——Material Design综合应用(De
  9. android我的官方文档--No.1 Introduction
  10. Android判断手机中的应用是否具有某些权