`
Tony_Lee-S
  • 浏览: 82840 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android 扫描SD卡与系统文件(转)

阅读更多
当手机或模拟器开机时,会调用android的MediaScanner,扫描sd卡和内存里的文件。以下是log信息。
12-13 15:39:11.062: VERBOSE/MediaPlayerService(67): Create new media retriever from pid 349<BR>
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<BR>
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<Song> 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<Song>(); 
                        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
分享到:
评论

相关推荐

    Android-Android扫描SD卡指定类型文件

    在Android平台上,对SD卡进行特定类型的文件扫描是一项常见的...通过理解和运用以上知识点,你就可以实现Android应用扫描SD卡上指定类型的文件功能了。记住,一定要遵循Android的最佳实践,确保应用的稳定性和性能。

    Android下c++调用java实现内置外置sd卡MP3扫描

    通过这种方式,C++代码可以利用Java的便利性(如访问Android系统API)来扫描SD卡上的MP3文件,并将结果保存到本地文件。在实际应用中,你还需要考虑线程安全、错误处理和性能优化等问题。在cocos2dx框架下,你可能...

    android SD卡扫描文件

    扫描特定类型的文件,当然,随着Android平台下的硬件设备越来越多,越来越强大。我们有理由相信,它以后将不仅仅只支持MP4和3GP格式的视频文件,所以我们必须使用两种方式结合的方法来获得最大的视频集合作为我们的...

    基于Android扫描sd卡与系统文件的介绍

    在Android系统中,扫描SD卡和系统文件是应用程序获取存储设备上媒体文件(如音频、视频、图片等)信息的重要方式。Android提供了MediaScanner服务,它会在设备启动时自动扫描SD卡和内部存储器,将文件信息存储到系统...

    Android扫描音乐文件

    音乐文件通常存储在外部存储(如SD卡)的`/sdcard/Music`目录下,或者内部存储的特定位置。开发者需要通过`Environment.getExternalStorageDirectory()`获取外部存储路径,然后遍历对应目录寻找音乐文件。 2. **...

    android读取sd卡中音乐文件列表

    ### Android读取SD卡中音乐文件列表 在Android开发中,常常需要实现的功能之一就是读取设备中的音乐文件。这通常用于音乐播放器类的应用程序,以便用户可以浏览并选择他们想要播放的歌曲。本文将详细介绍如何通过...

    android遍历sd卡视频文件

    在Android平台上,遍历SD卡中的视频文件是开发视频播放器等应用的常见需求。这个过程涉及到了文件系统的操作、多媒体信息的获取以及性能优化等多个方面。以下将详细讲解这个主题。 首先,Android系统提供了`java.io...

    基于Android的文件扫描系统.zip

    系统能够全盘扫描SD卡,并将新增的文件通知系统,如微信、QQ等应用接收的文件。 主要功能 1. 文件扫描系统能够扫描Android设备的外部存储(SD卡)中的文件,特别是关注特定的文件类型(如PDF、Word、Excel、PPT等...

    SD卡任意文件扫描显示

    扫描SD卡表明工具可以访问和遍历外部存储设备,而不仅仅是手机内部存储。扫描APK包则表示该工具专门针对Android应用的安装文件,这可能对开发者、系统管理员或者希望管理手机上APK文件的普通用户很有用。SD和APK的...

    Android JNI层实现扫描sd卡mp3文件

    通过以上步骤,我们可以实现一个在Android JNI层扫描SD卡并查找MP3文件的功能。这个过程中涉及到了Android的Java-Native交互、文件操作、权限管理以及C/C++编程等多个技术点,是Android开发中的一个重要实践。

    android异步扫描SD卡

    这些文件都是构建和运行Android应用不可或缺的部分,但它们与异步扫描SD卡的`AsyncTask`知识关联不大。 总的来说,`AsyncTask`是Android中处理异步任务的得力工具,尤其适用于简单快速的任务,如文件扫描。通过合理...

    android ProgressBar扫描SD卡文件

    在Android中,访问外部存储(如SD卡)需要权限。在AndroidManifest.xml中添加以下权限: ```xml &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt; ``` 然后,我们可以使用`java.io....

    基于android的扫描手机中txt文件并打开文件

    扫描SD卡可能会耗时较长,为了不阻塞用户界面,可以使用`AsyncTask`或`IntentService`进行后台处理。`AsyncTask`适合简单的异步任务,而`IntentService`适用于更复杂的操作,可以避免内存泄漏。 5. **文件读取**:...

    AndroidSD卡扫描

    要扫描SD卡下的文件,我们首先需要获得读取文件的权限。在Android 6.0及以上版本,由于运行时权限的引入,应用需要在运行时请求`READ_EXTERNAL_STORAGE`权限。在AndroidManifest.xml中声明权限还不够,还需要在运行...

    Android 开机启动扫描SD卡apk流程源码分析

    本文将深入探讨Android系统在开机启动时如何扫描SD卡上的APK文件,并对其流程进行详细的源码分析。 #### 二、开机启动流程概述 当Android设备启动时,系统会经历一系列初始化步骤。这些步骤包括但不限于加载内核、...

    android中将下载的mp3文件存放到虚拟sd卡中

    总结起来,在Android中将MP3文件存放到虚拟SD卡涉及以下几个关键步骤:申请读写权限、下载文件、保存到外部存储以及扫描文件至媒体库。遵循这些步骤,你的应用就能在遵循Android最佳实践的同时,实现高效且可靠的MP3...

    Android FileMan文件扫描管理记录使用次数.rar

    一个Android文件管理器APP源码,类似于360手机助手的功能,可以记录文件使用次数,可按分类来扫描管理文件或应用信息,并可将扫描的信息存入数据库,扫描SD卡文件,判断是否为文档、判断是否为音乐、判断是否为视频...

    安卓全局盘扫描指定文件(内存,SD卡)

    代码可用,不可用,请吐槽! 实现功能如下: 1.得到设备的内,外存储路径 2.一个变量指定需要扫描的文件...3.在得到的路径里面,递归扫描文件,找到了就不扫描了,没有找到就直到扫描完 4.全程LOG打印 5.代码简单可用

    扫描SD卡所有的图片

    在IT领域,尤其是在移动设备和图像...总的来说,扫描SD卡上的所有图片涉及到文件系统知识、图片文件格式理解、操作系统文件管理工具的使用,以及编程实现的技巧。掌握这些知识点对于日常的图片管理和IT工作都十分有益。

Global site tag (gtag.js) - Google Analytics