Android MediaScannerConnection,Android MediaScannerConnectionClientの使い方


Android 4.4以前はSDカードに画像を保存して、放送形式でシステムに画像をスキャンすることを通知して、最近の画像の中で見ることができます:
	/**
	 *         ,Android4.4        
	 * @author YOLANDA
	 */
	private void saveBroadcast(){
		String filePath = saveImg(true);
		sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));
		Toast.makeText(this, "    :" + filePath, Toast.LENGTH_LONG).show();
	}

でもAndroid 4.4から、システムの放送権限が回収され、この放送を送ることができなくなったので、Android MediaScannerConnection、Android MediaScannerConnectionClientを使って画像をスキャンします.MediaScannerConnectionは画像をスキャンするだけでなく、マルチメディアファイルをスキャンすることもできます.
簡単なステップが必要です.
1、new MediaScannerConnectionオブジェクト、ここでMediaScannerConnectionを実現する必要がある.MediaScannerConnectionClientインタフェースのクラス
2、スキャンするファイルのパスとファイルMimeTypeが入ってくる
3.MediaScannerConnectionオブジェクトのconnect()メソッドを呼び出すと、MediaScannerConnectionがトリガーされます.MediaScannerConnectionClientインタフェースのonMediaScannerConnectedメソッド
4、MediaScannernerConnection.MediaScannerConnectionClientインタフェースのonMediaScannerConnected()メソッド内呼び出し用MediaScannerConnection.ファイルをスキャンするためにscanFile(String path,String mimeType)
5、スキャンが終わるとMediaScannerConnectionがトリガーされます.MediaScannerConnectionClientインタフェースのonScanCompletedメソッドは、このメソッドでMediaScannerConnectionを呼び出します.disconnect()切断接続ここでパッケージを作り、ソースコードを貼り付けました.
/**
 *   MediaScannerConnection.MediaScannerConnectionClient
 * @author YOLANDA
 * @Time 2015 4 8    9:03:54
 */
public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {

	/**
	 *     
	 */
	private MediaScannerConnection mediaScanConn = null;

	public MediaScanner(Context context) {
		//   
		mediaScanConn = new MediaScannerConnection(context, this);
	}

	/**      **/
	private String[] filePaths;
	/**  MimeType  **/
	private String[] mimeTypes;

	/**
	 *     
	 * @author YOLANDA
	 * @param filepaths
	 * @param mimeTypes
	 */
	public void scanFiles(String[] filePaths, String[] mimeTypes) {
		this.filePaths = filePaths;
		this.mimeTypes = mimeTypes;
		mediaScanConn.connect();//      
	}

	/**
	 * @author YOLANDA
	 */
	@Override
	public void onMediaScannerConnected() {
		for (int i = 0; i < filePaths.length; i++) {
			mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//        
		}
		filePaths = null;
		mimeTypes = null;
	}

	private int scanTimes = 0;

	/**
	 *         
	 * @author YOLANDA
	 * @param path
	 * @param uri
	 */
	@Override
	public void onScanCompleted(String path, Uri uri) {
		scanTimes ++;
		if(scanTimes == filePaths.length) {//          
			mediaScanConn.disconnect();//      
			scanTimes = 0;//    
		}
	}
}

このクラスを使用する方法は簡単です.
	//      
	MediaScanner mediaScanner = new MediaScanner(context);
	String filePath = "sdcard/yolanda/scandemo.jpg";
	String fileMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpg");
	String[] filePaths = new String[]{filePath};
	String[] mimeTypes = new String[]{fileMimeType};
	mediaScanner.scanFiles(filePaths, mimeTypes);

	//      
	MediaScanner mediaScanner = new MediaScanner(context);
	String[] filePaths = new String[]{"sdcard/yolanda/scandemo1.jpg", "sdcard/yolanda/scandemo2.jpg", "sdcard/yolanda/scandemo3.jpg"};
	String fileMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("jpg");
	String[] mimeTypes = new String[]{fileMimeType};
	mediaScanner.scanFiles(filePaths, mimeTypes);

Demoソース:http://download.csdn.net/detail/yanzhenjie1003/8573229