[Android] 針對產生的圖片檔案在系統Gallery不顯示的處理,

來源:互聯網
上載者:User

[Android] 針對產生的圖片檔案在系統Gallery不顯示的處理,

  之前遇到過一個問題,就是發現我在程式中產生一個新的 Bitmap 之後,當我開啟系統的 Gallery 查看時,並沒有看到新產生的映像。然而開啟檔案瀏覽器,找到儲存 Bitmap 所在的檔案夾下,還能看到程式產生的 Bitmap 檔案。也就是說,檔案其實存在,但 Gallery 似乎並沒有重新整理。之後,又一個新的行為證實了我的觀點,即,每次重啟裝置之後, Gallery 中就會顯示新產生的 Bitmap 了。也就是說,重啟裝置之後,系統對某個儲存有圖片資訊的檔案進行了重新讀寫(當時得出的是這麼個結論,具體原理後面會專門寫部落格討論)。

  好了,原理能猜出個大概,那麼就猜一猜方法:也許可以通知系統來對儲存有圖片資訊的那個檔案進行重新整理,做一次對檔案夾的掃描。但到底有沒有這個方法呢?帶著疑問,我在網上找了找資料,發現原理的確是這麼回事,方法也是有的。

  本文地址:http://www.cnblogs.com/rossoneri/p/4239152.html

  現在有兩個方法可以解決這個問題:

 

Solution 1: 發送廣播,通知系統重新整理。

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

  不過用這個方法需要給程式添加許可權:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RESTART_PACKAGES" />

  這個方法我沒有測試,但看介紹應該是可以的。

 

Solution 2: 使用 MediaScannerConnection :

  首先對要使用該方法的類繼承 MediaScannerConnectionClient :

public class YourView  implements MediaScannerConnectionClient {}

  繼承該類需要重寫兩個方法:

@Overridepublic void onMediaScannerConnected() {    // TODO Auto-generated method stub    try {        msc.scanFile(bitmapPath, "image/jpg");    } catch (Exception e) {        e.printStackTrace();    }}@Overridepublic void onScanCompleted(String path, Uri uri) {    // TODO Auto-generated method stub    msc.disconnect();}

  方法看其名稱就能猜到,前者是串連上 MediaScanner 後,進行尋找檔案。 bitmapPath 是檔案的絕對路徑,"image/jpg" 是檔案格式, jpg 可改為 png 甚至 * 。後者方法是尋找結束後中斷連線。

  最後,建立 MediaScannerConnection 對象,在產生圖片後調用其方法:

MediaScannerConnection msc;.....if (msc != null) {    msc.disconnect();}msc = new MediaScannerConnection(mActivity, thisClass.this);msc.connect();

  這樣,下次再產生新的圖片後,就可以在 Gallery 中看到新產生的圖片了!

 

  恩,問題解決了。然後我又發現了一個問題:如果我在程式中刪除了某個圖片,結果發現 Gallery 中還有這個圖片的路徑,能看到有這個圖片,但開啟圖片是一片灰色。說簡單點,就是我用代碼刪除圖片檔案了,系統的儲存資訊還是有這個檔案的路徑存在,只有重啟才會刪掉這些無效路徑。好了,問題來了,怎麼改?

  能不能像之前的步驟再來一次?前面的步驟好像是重新整理了系統的某個設定檔,再做一次也許會行。嘗試之後發現(第一種方法沒試。。),然而並不行。

  既然這樣不行,那也許是我對系統的某些原理還沒有搞懂,應該還有其他的方法。經過一番探索,我還是找到瞭解決方法,並且對 Android 系統掃描儲存這些資訊的原理有了進一步的瞭解。下一篇文章,就簡單討論討論這個原理和解決辦法。今天先到這裡。

 

參考資料:

[Android執行個體] 把bitmap儲存後無法在圖庫看到,但檔案是存在的

Image, saved to sdcard, doesn't appear in Android's Gallery app

 

聯繫我們

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