你這樣觀眾看不懂啦 >"<
[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));
你這樣觀眾看不懂啦 >"<


![Validate my RSS feed [Valid RSS]](../images/links/valid-rss.png)
2011-10-12 09:23
啊哈哈, 沈小瑾居然有在看耶...看來不能讓觀眾失望太久了...:P