Android中結(jié)合contentResolver.delete和file.delete實(shí)現(xiàn)本地圖片的刪除

最近做的一個需求是:將拍照或相冊的圖片上傳服務(wù)器后刪除對應(yīng)的本地圖片。在實(shí)現(xiàn)這個簡單的需求的過程中卻碰到了兩個意想不到的問題。
這兩個問題源自于刪除本地圖片時選用的兩個不同的方法

file.delete

很明顯,圖片也是File的一種,所以完全可以使用file.delete方法來刪除本地圖片。

public static void deletePicture(String localPath) {
    if(!TextUtils.isEmpty(localPath)){
        File file = new File(localPath);
        if (file.exists()) {
            file.delete();
        }
    }
}

但是,很快就發(fā)現(xiàn),file.delete方法在刪除記錄在媒體數(shù)據(jù)庫里面的圖片時會有個明顯的問題:刪除不干凈。即使file.delete方法執(zhí)行返回ture提示刪除成功,在圖庫或者其他圖片選擇庫里面還是會顯示該圖片的縮略圖(或者空白圖)。這是因?yàn)槭褂胒ile.delete方法只是刪除了本的圖片,但并沒有通知媒體數(shù)據(jù)庫刪除該圖片的縮略圖。

contentResolver.delete

contentResolver.delete可以解決上面所說的問題,刪除圖片的縮略圖不再在圖庫或者其他圖片選擇庫里顯示。

public static void deletePicture(String localPath, Context context) {
    if(!TextUtils.isEmpty(localPath)){
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        ContentResolver contentResolver = context.getContentResolver();
        String url = MediaStore.Images.Media.DATA + "=?";
        contentResolver.delete(uri, url, new String[]{localPath});
    }
}

但是,在刪除經(jīng)過自己裁剪壓縮處理后保存起來的圖片時卻發(fā)現(xiàn):不能刪除這些圖片,contentResolver.delete方法返回值為0。
出現(xiàn)這個問題的原因是:因?yàn)閳D片創(chuàng)建時并沒有通知(插入到)媒體數(shù)據(jù)庫,所以contentResolver查詢時沒有找到這張圖片,當(dāng)然就無法刪除了,這時候反過來可以使用file.delete方法刪除。

結(jié)合contentResolver.delete和file.delete

綜上所述,可以結(jié)合contentResolver.delete和file.delete實(shí)現(xiàn)本地圖片的刪除。

public static void deletePicture(String localPath, Context context) {
    if(!TextUtils.isEmpty(localPath)){     
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        ContentResolver contentResolver = context.getContentResolver();
        String url = MediaStore.Images.Media.DATA + "=?";
        int deleteRows = contentResolver.delete(uri, url, new String[]{localPath});
        if (deleteRows == 0) {//當(dāng)生成圖片時沒有通知(插入到)媒體數(shù)據(jù)庫,那么在圖庫里面看不到該圖片,而且使用contentResolver.delete方法會返回0,此時使用file.delete方法刪除文件
            File file = new File(localPath);
            if (file.exists()) {
                file.delete();
            }
        }
    }
}

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

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

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