Android 內容提供者重新整理圖片 和 Arraylist排序,

來源:互聯網
上載者:User

Android 內容提供者重新整理圖片 和 Arraylist排序,

前言: 把我之前自己寫的圖片選取器轉移到我們公司的項目裡了,然後發現了無數的坑,一路填過來,很難受,不過最終還是搞的差不多了,代碼還沒傳,下篇隨筆在給串連,先把標題要講的寫出來

1我以前一直不懂內容提供者為什麼能成為四大組件之一(我技術這麼菜是有原因的!!),現在才懂一點

不管是刪除圖片,還是新拍圖片,都要通過內容提供者通知安卓系統一聲,否則

添加圖片如果不通知一下,結果就是拍下來的圖片在手機相簿裡找不到,並且通過內容提供者尋找圖片也查不到,但是你去你設定好的路徑去看,它就安靜的在那裡!!!

刪除圖片如果不通知一下,結果就是通過內容提供者尋找圖片的時候,還能找到已經被刪掉的圖片的地址,但其實那個地址已經沒有圖片了!!!

具體怎麼通知

添加圖片

MediaScannerConnection.scanFile(this, new String[]{圖片的絕對路徑}, null, null);

在這裡要說一下第2個坑,百度上比較多的文章都是寫的先插入到系統圖庫,在通知。

代碼是醬嬸兒的

try {                MediaStore.Images.Media.insertImage(context.getContentResolver(), output.getAbsolutePath(),                        output.getName(), null);            } catch (FileNotFoundException e) {                e.printStackTrace();            }            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, imageUri));

坑在哪裡,第一點:我是先把圖片儲存到我指定的路徑了,然後在調用的上面的方法,然後重點來了,相簿裡和我的指定路徑裡各有一張圖片!!!

第二,在低版本手機裡(我用的模擬器),經過這麼一弄,內容提供者一下找出來倆一樣的圖片,高版本手機呢,只找到相簿裡那一張,如果那相簿裡的刪掉,那我指定路徑裡的圖片留在手機裡浪費記憶體!!!

總之我個人認為上面的辦法略坑。

再說刪除圖片

private void DeleteImage(String imgPath) {        ContentResolver resolver = context.getContentResolver();        Cursor cursor = MediaStore.Images.Media.query(resolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=?",                new String[]{imgPath}, null);        boolean result = false;        if (cursor.moveToFirst()) {            long id = cursor.getLong(0);            Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;            Uri uri = ContentUris.withAppendedId(contentUri, id);            int count = context.getContentResolver().delete(uri, null, null);            result = count == 1;        } else {            File file = new File(imgPath);            result = file.delete();        }        if (result) {            Toast.makeText(context, "刪除成功", Toast.LENGTH_LONG).show();        }    }

3按修改先後的順序柏拉圖片(時間順序)(剛拍完的在前)

因為所有的照片都被我以bean的形式儲存在list裡了,所以簡單地說就是list的排序問題

先擷取圖片的修改時間

new Date(file.lastModified()).getTime() //file 就是圖片

之後就是一個讓我驚呆了的排序方法(java太菜沒有辦法)

讓我得bean類 實現Compartor介面,然後實現compare方法

@Override    public int compare(PhotoBean o1, PhotoBean o2) {         if(o1.getTime() > o2.getTime()){                 return -1;        }else{            return 1;        }    }

這個排序方法不多解釋了,百度就好,但是我今天才知道這樣子排序,驚了個呆!!

排序的時候直接

Collections.sort(list, new bean類);

就好了,這樣就實現Arraylist的排序了

4最後看一下模擬器上的效果吧,模擬器沒有網路攝影機不過不影響效果

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.