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连接等相关的工作,另一方面它还支持多个文件的扫描,所以如果没什么特殊要求,建议读者还是使用这个静态函数。