android儲存照片到相簿的一些事

來源:互聯網
上載者:User

標籤:nts   dbr   檔案   重啟   啟動   多媒體   pat   font   activity   

  由於最近工作需求的原因,有一個功能就是將webView裡面的照片儲存到本地,並且能夠直接在相簿中有一個及時的反饋。

  項目中,具體是實現流程是這樣的設計webview點擊互動事件,當點擊webview中的圖片的時候抓取到圖片的url地址;當需要儲存圖片的時候,通過nohttp下載圖片並將圖片儲存到本地,然後更新相簿。

  在這裡,抓取url地址和下載圖片的方案有很多,這裡就不在贅述,這裡是說明一下如何更新相簿,因為這裡是一個坑,我一共遇到過兩個方案:

方案一:

 發送廣播通知系統更新相簿。

     在網上大部分時候是這樣做的,為什麼呢?因為簡單,只需要發送一個廣播就OK了。但是這個方法是一個坑,坑在哪裡,一會在說,這裡先說一個怎麼實現:

 

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,                        Uri.fromFile(new File(url.webviewImagePath+"/image.jpg")));File file= (File) object;Uri uri = Uri.fromFile(file);intent.setData(uri);ShowImageActivity.this.sendBroadcast(intent);

 

  上面代碼就是發送廣播中的方式,其中url.webviewImagePath+"/image.jpg"是儲存到本地的地址和圖片格式,file是把下載到圖片的對象object轉換為file。之後發送廣播通知系統更新相簿就好。

  那麼現在問題來了,坑在哪裡。主要是下面兩個問題:

  1、相簿更新很慢

  這是因為我們向系統發送廣播通知,卻不能告知系統重新整理特定的檔案,所以系統會重新整理整個sd卡。這樣一來,自然相簿更新會很慢。

  2、部分安卓版本相簿無法更新,重啟手機後會更新

  這是因為在部分安卓版本中,考慮到系統安全的問題,是不允許app向系統發送廣播,這樣一來自然無法更新相簿,而另一個方面,手機重新啟動,會重新掛載sd卡,這樣就會重新整理sd開所有東西。

  那麼問題來了,既然通過廣播的方式重新整理相簿有這麼多坑,那麼有沒有什麼好的方式呢?這就是第二種方式:

方案二:

  使用MediaScanner

  什麼是MediaScanner?MediaScanner完成Android中的多媒體檔案的掃描工作。例如,mediascanner掃描系統記憶體和SD卡檔案之後,會將掃描的結果載入在資料庫中,在Music這個應用程式中看到的顯示在activity 的list列表上歌曲專輯名,流派,歌曲時間長度等資訊,都是掃描後的結果放在資料庫中,最後讀到的資料庫中的資訊。這裡可以明白的一點是:多媒體資料庫中的資訊是由MediaScanner添加的。下面就是使用的方式:

class SannerClient implements            MediaScannerConnection.MediaScannerConnectionClient {        public void onMediaScannerConnected() {            if (mFile == null) {                return;            }            scan(mFile, mMimeType);        }        public void onScanCompleted(String path, Uri uri) {            mConn.disconnect();        }        private void scan(File file, String type) {            if (file.isFile()) {                mConn.scanFile(file.getAbsolutePath(), null);                return;            }            //該方法可以遍曆多個檔案,這裡不需要            File[] files = file.listFiles();            if (files == null) {                return;            }            for (File f : file.listFiles()) {                scan(f, type);            }        }    }    public void scanFile(File file, String mimeType) {        mFile = file;        mMimeType = mimeType;        mConn.connect();    }

  在我們需要添加照片到相簿的地方,這幾調用scanFile就可以了,其中兩個參數:file是指添加的檔案,mimeType是掃描檔案的格式。這樣我們可以直接掃描添加特定的檔案。提高了速度

    

 

android儲存照片到相簿的一些事

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.