Android 通知相冊更新保存的資源

????????項目中需求,應(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ù)資源(圖片、視頻)不顯示的問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容