10.4 拓展思考

10.4.1 MediaScannerConnection介绍

通过前面的介绍,我们知道MSS支持以广播方式发送扫描请求。除了这种方式外,多媒体系统还提供了一个MediaScannerConnection类,通过这个类可以直接跨进程调用MSS的scanFile,并且MSS扫描完一个文件后会通过回调来通知扫描完毕。MediaScannerConnection类的使用场景包括浏览器下载了一个媒体文件,彩信接收到一个媒体文件等,这时都可以用它来执行媒体文件的扫描工作。

下面来看这个类输出的几个重要API,由于它非常简单,所以这里就不再进行流程的分析了。


[—>MediaScannerConnection.java]

public class MediaScannerConnection implements ServiceConnection{

//定义OnScanCompletedListener接口,如果媒体文件扫描完,MSS就调用这个接口进行通知。

public interface OnScanCompletedListener{

public void onScanCompleted(String path,Uri uri);

}

//定义MediaScannerConnectionClient接口,派生自OnScanCompletedListener,

//它增加了MediaScannerConnection connect上MSS的通知。

public interface MediaScannerConnectionClient extends

OnScanCompletedListener{

public void onMediaScannerConnected();//连接MSS的回调通知。

public void onScanCompleted(String path,Uri uri);

}

//构造函数。

public MediaScannerConnection(Context context,

MediaScannerConnectionClient client);

//封装了和MSS连接及断开连接的操作。

public void connect();

public void disconnect()

//扫描单个文件。

public void scanFile(String path,String mimeType);

//我更喜欢下面这个静态函数,它支持多个文件的扫描,实际上间接提供了文件夹的扫描功能。

public static void scanFile(Context context,String[]paths,

String[]mimeTypes,OnScanCompletedListener callback);

……

}


从使用者的角度来看,本人更喜欢静态的scanFile函数,一方面它封装了和MSS连接等相关的工作,另一方面它还支持多个文件的扫描,所以如果没什么特殊要求,建议读者还是使用这个静态函数。