在應用的圖集中,一般會給用戶提供保存圖片的功能,讓用戶能夠將本身喜歡的圖片保存到系統相冊中.java
這個功能其實很好作,系統提供了現成的API:緩存
簡單的來講就這一行代碼:url
MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
這個方法的返回值及爲插入圖片的路徑
spa
String url = MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
可是在不少機器(好比G7,G11)上調用以後,進入相冊並看不到剛纔保存的那張圖片,須要將機器重啓後在系統相冊中才會顯示出來,大大影響了用戶體驗code
這是因爲機器系統緩存的問題.須要咱們在插入圖片以後往刷新下相冊環境:orm
這裏有兩種方法:圖片
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
或者:
get
final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {public void onMediaScannerConnected() { msc.scanFile("/sdcard/image.jpg", "image/jpeg");}public void onScanCompleted(String path, Uri uri) { msc.disconnect();}});
這裏要注意的是,發送廣播或者直接調用掃描整個SD卡,實際上效率會比較低,也會增長耗電量.
it
上面提到,插入圖片的方法對應的返回值爲圖片保存的絕對路徑. 所以咱們只要獲取該路徑,發送廣播掃描該路徑便可.io
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()+ picPath)));