当手机或模拟器开机时,会调用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
它存了些什么信息呢,拉出来看看吧:

那么,我们直接使用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】Android和PHP开发最佳实践完整扫描版
  2. 【Android】Android和PHP开发最佳实践完整扫描版
  3. Android系统信息与安全机制
  4. Android下使用Socket连接网络电脑
  5. 【Android】获取WIFI列表简单小例子
  6. 写信息的界面
  7. Android获取本机信息(随时更新)
  8. android 五种Log的意思
  9. android中GPS信息的获取

随机推荐

  1. Android Stdio实现点击按钮出现图片
  2. Android 通过Http访问Web端的Servlet
  3. 【Android】创建、读取XML文件
  4. Android如何设置圆角按钮
  5. 设置Android输入法的回车键
  6. android SAX
  7. Android Gradle版本和Android plugin版本
  8. Android中如何判断是否联网
  9. 通过Intent在Activity|Service之间传递数
  10. android sqlite 中文乱码。。麻烦详细点