修改android mediascanner扫描路径

原创 2012年03月27日 20:44:30

      通过前面文章的学习,android media scanner只会对内存和sdcard上的媒体文件进行扫描。

      假如我们的硬件平台上面没有提供SD卡槽,可以用usb替换sdcard。通过修改ics,可以设置利用sda*来替换sdcard,当作sdcard去使用。比如tv端如果没有sdcard槽,一般会把第一个插入的usb并且是sda1的磁盘当作sdcard。

     我们知道,Android scanner扫描媒体完成之后,会把媒体文件存放在数据库中,由MediaProvider为上层的应用程序提供服务。

    经过研究Media scanner的代码发现,他的扫描路径为android.os.Environment.EXTERNAL_STORAGE_DIRECTORY。定义该变量文件位于:

frameworks/base/core/java/android/os/Environment.java

默认情况下,Android将会搜索/sddisk目录:

    private static final File EXTERNAL_STORAGE_DIRECTORY
            = getDirectory("EXTERNAL_STORAGE", "/sddisk");

为了让其进行搜索我们自定义的路径,可以修改该变量的定义,加入我们希望扫描/external目录。代码修改如下:

    private static final File EXTERNAL_STORAGE_DIRECTORY
            = getDirectory("EXTERNAL_STORAGE", "/external");

这样Android Media Scanner将会搜索/external目录来查找媒体文件。

     下一步我们需要保证这个文件一定要存在,我们需要修改init.rc文件。增加如下的定义:

mkdir /external 0777 system system

这样在开机的时候,如果/external目录不存在,则会创建一个。如果已经存在,则不会有任何动作。

      一般我们不会想去修改sdcard自带的路径,可以按照以上方式,在framework层添加其他路径去扫描。

 研究MediaScannerReceiver的源码发现:

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Uri uri = intent.getData();
        String externalStoragePath = Environment.getExternalStorageDirectory().getPath();

        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
            // scan internal storage
            scan(context, MediaProvider.INTERNAL_VOLUME);
        } else {
            if (uri.getScheme().equals("file")) {
                // handle intents related to external storage
                String path = uri.getPath();
                if (action.equals(Intent.ACTION_MEDIA_MOUNTED) &&
                        externalStoragePath.equals(path)) {
                    scan(context, MediaProvider.EXTERNAL_VOLUME);
                } else if (action.equals(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) &&
                        path != null && path.startsWith(externalStoragePath + "/")) {
                    scanFile(context, path);
                }
            }
        }
    }

我们发现在收到ACTION_BOOT_COMPLETED消息时,Android系统会扫描内存中的媒体文件。当系统收到ACTION_MEDIA_MOUNTED才会去扫描系统中的扩展内存(一般是SD卡)。

     假如系统中有SD卡的话,系统启动的时候是可以收到ACTION_MEDIA_MOUNTED消息和ACTION_BOOT_COMPLETED消息的,这样开机的时候系统会对系统进行媒体文件扫描。当SD卡文件修改了(比如用数据线,连接PC),一般也是有ACTION_MEDIA_MOUNTED消息上报的。这样也可以实时更新媒体数据。

@Override
    public void onResume() {
        super.onResume();

        ........

        sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
        ........
    }

可以看出这里面广播了一个ACTION_MEDIA_MOUNTED消息,这样MediaScannerReceiver将会扫描外存储内存中的媒体文件。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Android多媒体文件扫描流程

下次下次
  • w6980112
  • w6980112
  • 2016年02月01日 17:18
  • 1913

Android 扫描音乐文件、两种方式获取文件最新修改时间

package com.example.demo_mediascanner; import java.io.File; import java.util.Calendar; import java....
  • u013372185
  • u013372185
  • 2014年12月01日 09:42
  • 2588

Android 扫描SD卡中的所有视频文件

Android读取视频文件
  • u011109881
  • u011109881
  • 2017年02月08日 22:14
  • 2094

修改android mediascanner扫描路径

假如我们的硬件平台上面没有提供SD卡槽,可以用usb替换sdcard。通过修改ics,可以设置利用sda*来替换sdcard,当作sdcard去使用。比如tv端如果没有sdcard槽,一般会把第一个插...
  • quentin_by
  • quentin_by
  • 2014年07月10日 16:09
  • 571

Android6.0 MediaScanner多媒体文件开机扫描及修改默认铃声(一)

这边文章主要来分析开机启动时候的多媒体文件扫描和如何修改系统默认铃声。 先来看开机启动时候的多多媒体文件扫描流程分析: Android系统中,在开机的时候会去扫描内部存储器和外部存储器内的文件资源并将...
  • Otaku_627
  • Otaku_627
  • 2017年01月08日 13:13
  • 994

Android 多媒体扫描过程

framework层的 MediaScannerReceiver会在 任何的ACTION_BOOT_COMPLETED, ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SC...
  • wh_19910525
  • wh_19910525
  • 2012年12月27日 12:38
  • 3801

Android开发之媒体扫描详细解析(上)

之前在看视频的时候一直不明白为什么可以直接从手机中扫描出视频和音乐,今天看了这篇博文才觉悟,感谢写这篇文章的博主!...
  • itluochen
  • itluochen
  • 2016年08月06日 00:09
  • 1505

Android MediaProvider,MediaScanner媒体文件扫描源码解析

关于媒体文件扫描,我们需要弄明白两个问题: 1.什么时候开启媒体文件扫描 2.如何解析媒体文件(音频,视频,图片)信息插入到数据库中,对应code流程我们现在音乐,视频播放器,图库等应用关于音视频...
  • King1425
  • King1425
  • 2017年04月19日 10:03
  • 1493

Android MediaScanner 多媒体扫描流程

一、扫描方式 在4.4平台之前可以通过两种方式来扫描多媒体文件: 1、MediaScannerConnection.scanFile()方法,    MediaScannerConnection....
  • air798
  • air798
  • 2016年05月15日 20:28
  • 4748

如何扫描出android系统媒体库中视频文件

ndroid系统启动时会去扫描系统文件,并将系统支持的视频文件(mp4,3gp,wmv)扫描到媒体库(MediaStore)中,下面代码演示如何获得这些文件的信息: public static Li...
  • jingwen3699
  • jingwen3699
  • 2012年07月24日 23:19
  • 9326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:修改android mediascanner扫描路径
举报原因:
原因补充:

(最多只允许输入30个字)