在camera开发过程中,发现若将camera拍摄的相片存放至自定义相册时,有时不能及时的在相册中找到对应相片。不同的设备对于自定义相册的更新时机不同。有的手机,需要重启才会更新,有的则是及时。因此,为了适配,不论什么机型,强制更新是必要的。
网上查找,多有两种方案。一是发送系统广播,一是使用MediaScannerConnection对象。
对于广播而言,其局限性在于,android4.x之后,为了安全性考虑,app不能再发送系统广播。相比而言MediaScannerConnection便更为通用,该对象自api level1便存在。
现将代码记录如下:
package com.breakloop.common;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.webkit.MimeTypeMap;
public class LFISMediaScanner {
private static MediaScannerConnection mScanner=null;
public static void updateMedia(Context fContext, String fPath){
MimeTypeMap tMimeTypeMap=MimeTypeMap.getSingleton();
String tExtension=fPath.substring(fPath.lastIndexOf(".")+1);
String tType=tMimeTypeMap.getMimeTypeFromExtension(tExtension);
if (mScanner == null) {
MediaScannerConnection connection = new MediaScannerConnection(fContext,
new MediaScannerConnection.MediaScannerConnectionClient() {
public void onMediaScannerConnected() {
mScanner.scanFile(fPath, tType);
}
public void onScanCompleted(String path1, Uri uri) {
if (path1.equals(fPath)) {
mScanner.disconnect();
mScanner = null;
}
}
});
try {
connection.connect();
} catch (Exception e) {
e.printStackTrace();
}
mScanner = connection;
}else {
if(!mScanner.isConnected()){
mScanner.connect();
}
mScanner.scanFile(fPath,tType);
}
}
}