Android MediaScannerConnection,Android MediaScannerConnectionClientの使い方
3530 ワード
Android 4.4以前はSDカードに画像を保存して、放送形式でシステムに画像をスキャンすることを通知して、最近の画像の中で見ることができます:
でも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()切断接続ここでパッケージを作り、ソースコードを貼り付けました.
このクラスを使用する方法は簡単です.
Demoソース:http://download.csdn.net/detail/yanzhenjie1003/8573229
/**
* ,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