. : : 雅 舍 小 築 : : .


[Android] 新增圖片後用Intent通知android掃瞄檔案

Computer 2011-10-09 11:49

在Android裡,當你使用MediaStore.Images.Media.insertImage()去新增圖片進系統後,如果沒有去通知系統這個更動,當你立刻進去相本裡查看時,是看不到這個新增的圖片的。有兩個方法可以達到目地:第一是自己手動移除SD卡再重新插入,這個動作可以強迫系統重新掃一次所有的檔案。但這招太麻煩。程式上的解法是送intent叫系統把SD卡unmount再mount起來,可以達到一樣的效果。但是這招有個缺點,因為SD卡會被unmount,如果這時候有程式在用SD卡裡的東西,會被迫中斷。比如在聽歌的話,就會停掉了。所以不是個太好的解法。

第二招是用Intent通知系統去掃一下剛剛新增進去的檔案。不過有個問題,MediaStore.Images.Media.insertImage()的回傳值是content://這個型式,但是ACTION_MEDIA_SCANNER_SCAN_FILE這個intent要吃的URI必須是實際檔案的位置。於是,我們得用以下招式從content://來找出實際檔案位置:

// Get real path for the inserted image
Uri uri = Uri.parse(szUrl);
String[] proj = { MediaStore.Images.Media.DATA };
Cursor actualimagecursor = managedQuery(uri,proj,null,null,null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
uri = Uri.parse("file://" + img_path);


// Send intent
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));

以下有 1 則迴響 [發表迴響 (Post comment)]
發表迴響
暱稱 (Name)
電子郵件 (E-mail)
(選填) (optional)
網頁 (Homepage)
(選填) (optional)
悄悄話 (Secret) 公開 (Public)
悄悄話, 請務必留E-mail (Secret, E-mail is required)
認證碼 (Auth Code)
(必填, 大小寫有別) (Required, case sensitive)
留言 (Message)
這麼久沒post新文,居然一來就來這麼硬的!!!!
你這樣觀眾看不懂啦 >"<
啊哈哈, 沈小瑾居然有在看耶...
看來不能讓觀眾失望太久了...:P
Logo 關於這裡的大小事 | Licenses | Contact Me | ©2008 Rical's Personal Studio