Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> [Android] 針對生成的圖片文件在系統Gallery不顯示的處理

[Android] 針對生成的圖片文件在系統Gallery不顯示的處理

編輯:關於Android編程

之前遇到過一個問題,就是發現我在程序中生成一個新的 Bitmap 之後,當我打開系統的 Gallery 查看時,並沒有看到新生成的圖像。然而打開文件浏覽器,找到保存 Bitmap 所在的文件夾下,還能看到程序生成的 Bitmap 文件。也就是說,文件其實存在,但 Gallery 似乎並沒有刷新。之後,又一個新的行為證實了我的觀點,即,每次重啟設備之後, Gallery 中就會顯示新生成的 Bitmap 了。也就是說,重啟設備之後,系統對某個保存有圖片信息的文件進行了重新讀寫(當時得出的是這麼個結論,具體原理後面會專門寫博客討論)。     好了,原理能猜出個大概,那麼就猜一猜方法:也許可以通知系統來對保存有圖片信息的那個文件進行刷新,做一次對文件夾的掃描。但到底有沒有這個方法呢?帶著疑問,我在網上找了找資料,發現原理的確是這麼回事,方法也是有的。         現在有兩個方法可以解決這個問題:       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 {   }   繼承該類需要重寫兩個方法:     @Override public void onMediaScannerConnected() {     // TODO Auto-generated method stub     try {         msc.scanFile(bitmapPath, "image/jpg");     } catch (Exception e) {         e.printStackTrace();     } }   @Override public 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 系統掃描存儲這些信息的原理有了進一步的了解。下一篇文章,就簡單討論討論這個原理和解決辦法。今天先到這裡。        
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved