`
Jsaint
  • 浏览: 13786 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

MediaScanner

 
阅读更多
    当图片在compress()保存之后,使用gallery去查看的时候,发现刚才保存的图片不存在。          
    这种情况下,需要使用 MediaScannerConnection 去通知系统扫描到多媒体数据库

 
  MediaScannerConnection.MediaScannerConnectionClient client = new MediaScannerConnectionClient(){
		  //MediaScannerConnection mediaScannerConnection = mConnectionMap.get(MEDIA_CONNECT_KEY);
		// -------千万不要写在这里 初始化顺利的原因 mediaScannerConnection是null 会出现系统错误提示,也不能达到扫描的目的
                @Override
                public void onMediaScannerConnected() {
                    MediaScannerConnection mediaScannerConnection = mConnectionMap.get(MEDIA_CONNECT_KEY);  
                    //  注意这里
                    if(DEBUG) Log.i(TAG,"onMedia Connected~~~~~~~~~~~");
                    if(mediaScannerConnection != null)
                        mediaScannerConnection.scanFile(file.toString(),null);
                    else {
                        if(DEBUG) Log.i(TAG,"NUll point");
                    }
                }

                @Override
                public void onScanCompleted(String path, Uri uri) {
                    MediaScannerConnection mediaScannerConnection = mConnectionMap.get(MEDIA_CONNECT_KEY);
                    if(mediaScannerConnection != null) mediaScannerConnection.disconnect();
                    if(DEBUG) Log.i(TAG,"connect is over~~~~~~`");
                }
            };
            MediaScannerConnection  mediaScannerConnection = new MediaScannerConnection(this,client);
            mConnectionMap.put(MEDIA_CONNECT_KEY, mediaScannerConnection);
            mediaScannerConnection.connect();


    特别注意,可以出现 has leaked ServiceConnection android.media.MediaScannerConnecti 类似的系统错误提示,原因是mediaScannerConnection是null
    onScanCompleted()不能被调用,activity就结束。

    但是调用MediaScannerConnection之后,在gallery 仍然没有看到最近保存的图片,原因在于gallery,并不是时时update的,需要重启gallery甚至是关机才能搞定。
    这样很麻烦,在网上还有另一种方式
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file.toString())));
    这种方式只能扫描具体文件,不能扫描文件夹,重要的是通过尝试,其效果与 MediaScannerConnection 方式差不多

    必杀技:
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
    这种方式扫描系统默认路徑下的文件夹

    sendBroadcast 这样的系统广播,最好不要随便发,会带来意想不到的问题,推荐使用 MediaScannerConnection 
    sendBroadcast 详细分析,看以下这篇文章:
    http://www.iteye.com/topic/697492
    最近好懒,要多写写阿~~~~~~~~
分享到:
评论

相关推荐

    android MediaProvider和MediaScanner详解

    Android系统中的MediaProvider和MediaScanner是两个与媒体文件管理紧密相关的组件。MediaProvider是Android系统中用于管理媒体文件的Content Provider,而MediaScanner则是与之协同工作的一个后台服务,它负责扫描...

    mediascanner流程详细分析

    在Android系统中,Mediascanner是一个至关重要的组件,它负责扫描设备上的媒体文件(如图片、音频和视频),并将这些文件的信息添加到媒体数据库中,以便用户可以在图库、音乐播放器等应用中访问它们。这个过程被...

    Android_MediaScanner__详尽分析

    Android MediaScanner 是Android系统中用于媒体文件管理和索引的服务。它是Android平台多媒体框架的一个组成部分,负责扫描设备上的媒体文件,并将相关信息更新到媒体数据库中,以便其他应用程序(如音乐播放器、...

    MediaScanner 源代码分析

    MediaScanner 源代码分析。我从网上搜集的关于MediaScanner 的源代码分析资料。欢迎大家下载学习

    mediascanner流程分析

    ### MediaScanner流程分析 #### 一、概述 `MediaScanner`是Android系统中用于扫描多媒体文件(如图片、音频和视频等)的关键组件之一。它主要用于更新系统中的媒体数据库,以便用户界面能够显示最新的多媒体文件...

    android_media_MediaScanner.rar_android_mediascanner

    在Android系统中,`MediaScanner`是一个至关重要的组件,它负责扫描设备上的媒体文件(如音乐、图片和视频),并将这些文件的信息添加到系统的媒体库。这个过程是自动进行的,当新文件被添加到设备时,`MediaScanner...

    Android媒体库框架(mediascanner).doc

    Android 媒体库框架(MediaScanner) Android 媒体库框架(MediaScanner)是 Android 平台上的一种媒体文件管理机制,旨在提供一个统一的媒体文件管理方式,帮助用户快速地浏览和管理媒体文件。 媒体文件管理机制 ...

    android mediaScannder框架介绍

    1. **初始化**:在Java层进行,MediaScanner根据存储路径(内部卷或外部卷)打开对应的SQLite数据库,这些数据库用于存储媒体文件信息。 2. **预扫描**:清除旧的文件和播放列表缓存,然后根据MediaProvider的请求...

    《深入理解Android》卷Ⅰ

    2.2 学习JNI的实例:MediaScanner 2.3 Java层的MediaScanner分析 2.3.1 加载JNI库 2.3.2 Java的native函数和总结 2.4 JNI层MediaScanner的分析 2.4.1 注册JNI函数 2.4.2 数据类型转换 2.4.3 JNIEnv介绍 2.4.4 通过...

    深入理解Android:卷I--详细书签版

    第2章通过对android系统中的mediascanner进行分析,详细讲解了 android中十分重要的jni技术;第3章分析了init进程,揭示了通过解析init.rc来启动zygote以及属性服务的工作原理;第4章分析了zygote、systemserver等...

    Android多媒体扫描过程.pdf

    - MediaScanner负责扫描两个主要的目录:内部卷(指向$ANDROID_ROOT/media)和外部卷(指向$EXTERNAL_STORAGE)。 - 在Java层进行初始化,打开与内部卷和外部卷对应的数据库连接。 - Java层的预扫描阶段,会清除...

    深入理解Android:卷I

    - **MediaScanner分析**:通过分析Android系统中的MediaScanner,第二章详细介绍了JNI(Java Native Interface)技术的应用,展示了Java与C/C++代码交互的方法和机制。 #### 3. init进程与系统启动机制 - **init.rc...

    AndrodSavePicture.zip

    mediaScanner.Call("scanFile", filePath, null, new OnScanCompletedListener()); } ``` 最后,确保在使用完Java对象后释放资源,避免内存泄漏: ```csharp mediaScanner.Call("unregisterReceiver"); ...

    Android多媒体扫描过程[参考].pdf

    它调用MediaScanner类,该类负责扫描内部卷($(ANDROID_ROOT)/media)和外部卷($(EXTERNAL_STORAGE))中的文件。 3. **JAVA层初始化**: 在初始化阶段,MediaScanner会根据文件所在的卷(内部或外部)打开对应的...

    《深入理解Android:卷I》试读本

    第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等...

    深入理解Android卷1全

    2.2 学习JNI的实例:MediaScanner / 15 2.3 Java层的MediaScanner分析 / 16 2.3.1 加载JNI库 / 16 2.3.2 Java的native函数和总结 / 17 2.4 JNI层MediaScanner的分析 / 17 2.4.1 注册JNI函数 / 18 2.4.2 数据类型转换...

    深入理解Android 卷1.pdf

    第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等...

    android自带图库源码

    3. **多媒体扫描(MediaScanner)**:Android系统有一个名为MediaScanner的服务,用于扫描设备上的新添加或修改的媒体文件,并更新数据库。源码中会包含MediaScanner的相关逻辑,展示如何扫描文件并更新媒体信息。 ...

    深入理解Android卷1

    第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等...

Global site tag (gtag.js) - Google Analytics