????????項目中需求,應(yīng)用開通的云存儲過期,導致用戶之前的報警消息不可預(yù)覽查看,因此,需求把應(yīng)用中設(shè)備產(chǎn)生的報警圖片和視頻保存到相冊,那么問題來了,用網(wǎng)上的一些方案掃描或者廣播方式通知更新相冊,對于一些手機(三星、華為mate8等部分8.0系統(tǒng)手機)結(jié)果就是失敗,看下面一個例子
廣播更新:
public void refreshAlbum(String fileAbsolutePath) {
? ? File imgFile = new File(fileAbsolutePath);
? ? Uri uri = Uri.fromFile(imgFile);
? ? Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
? ? mediaScanIntent.setData(uri);
? ? mContext.sendBroadcast(mediaScanIntent);
}
不建議使用,會通知圖庫整個進行更新
掃描更新:
public void refreshAlbum(String fileAbsolutePath) {
? ? MediaScannerConnection mMediaScanner = new MediaScannerConnection(this, null);
? ? mMediaScanner.connect();
? ? if (mMediaScanner.isConnected()) {? ? ? ? ?
? ? ? ? mMediaScanner.scanFile(fileAbsolutePath, Constants.VIDEO_MIME_TYPE_MP4);
? ? } else {
? ? ? ? Elog.i(TAG, " 連接失敗 ")
? ? }
}
上面的例子,極有可能會走“連接失敗”,因為connect()執(zhí)行需要時間,不可能立刻就會連接成功,所以掃描不了,也無法刷新,怎么解決呢!需要下面的優(yōu)化,通過MediaScannerConnectionClient回調(diào)監(jiān)聽,確定MediaScannerConnection已經(jīng)連接上,再進行掃描更新
public void refreshAlbum(String fileAbsolutePath, boolean isVideo) {
? ? ? ? mMediaScanner = new MediaScannerConnection(mContext, new MediaScannerConnection.MediaScannerConnectionClient() {
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void onMediaScannerConnected() {
? ? ? ? ? ? ? ? ? ? ? ? if (mMediaScanner.isConnected()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Elog.i(TAG, " 連接成功 ")
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (isVideo) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mMediaScanner.scanFile(fileAbsolutePath, "video/mp4");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mMediaScanner.scanFile(fileAbsolutePath, "image/jpeg");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ELog.e(TAG, " refreshAlbum() 無法更新圖庫,未連接,廣播通知更新圖庫,異常情況下 ");
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void onScanCompleted(String path, Uri uri) {
? ? ? ? ? ? ? ? ? ? ? ? ELog.i(TAG, " 掃描完成 path: ", path, " uri: ", uri);
? ? ? ? ? ? ? ? }
? ? ? ? });
? ? ? ? mMediaScanner.connect();
}
使用上面的優(yōu)化方案就可以很完美的解決保存相冊中的數(shù)據(jù)資源(圖片、視頻)不顯示的問題。