如new File後,要檢查文件是否存在,如果不存在,才真正調用createNewFile或mkdir()
(mkdirs())來創建文件或目錄,要創建FileOutputStream來調用對應的write 方法寫文件。
之後又遇到了文件未即使刷新,Gallery裏面看不到的問題。原因聽說是數據只是存儲到了
SD卡,並未將此信息更新到數據庫,而我們用Gallery查看圖片的時候,卻是通過讀取數據庫
裏面的數據信息的,所以就看不到。
那是否有辦法刷新呢? 肯定是有的,在網上查找,找到了關於Media Scanner的相關信息,提供了
掃描SD卡或者指定文件的方法。掃描SD卡就有點小題大做了,於是想到是否能只是掃描文件夾的方式。
通過 Intent.ACTION_MEDIA_MOUNTED 進行整個SD卡掃描:
通過 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 掃描某個文件:
經過搜索,發現直接掃描文件夾是不可行的。如果文件夾裏面的文件較少,可以直接採用遍歷文件的方式,
對每個文件進行掃描。
有篇文章,反映了這個問題,http://hxsdit.com/1647
(保存圖片到SD卡,但是Gallery中不能及時顯示的問題 )
各手機廠商實現不太一致,當保存圖片後打開gallery時,有的會自動給你刷新,有的不行,
這樣就導致圖片保存到SD卡上時,不能及時在gallery中看到,遇到這種情況最好是自己刷新。
通過 Intent.ACTION_MEDIA_MOUNTED 進行整個SD卡掃描:
- <span style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background-color:transparent; color:rgb(0,153,0)"></span>
- <span style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background-color:transparent; color:rgb(0,153,0)"></span>
- public void sdScan(){
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
- + Environment.getExternalStorageDirectory())));
- }
- public void sdScan(){
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
- + Environment.getExternalStorageDirectory())));
- }
通過 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 掃描某個文件:
- public void fileScan(String filePath){
- Uri data = Uri.parse("file://"+filePath);
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
- }
- public void fileScan(String filePath){
- Uri data = Uri.parse("file://"+filePath);
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
- }
注:filePath爲圖片在SD卡中的地址,當保存圖片後,調用以上方法即可;
sendBroadcast爲類Context的一個方法。
話雖這樣,可是當我之際嘗試直接使用這個sendBroadcast的時候,Eclipse IDE
就是錯誤(什麼需要Context對象。。),可後來發現寫好後,就不提示錯誤了,
囧。。。
CSDN上有位大哥提供的如下語句在我這裏也不可行:
getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
經過多番搜索,最終發現了個好文章,地址: http://www.blogjava.net/Green-nut/articles/336256.html ,
貼出相關的部分:
ublic void fileScan(String fName){
Uri data = Uri.parse("file:///"+fName);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
}
補充: 上述方法是不支持對文件夾的 即:Uri data 必須是 文件的Uri
如果是文件夾的 其不會起作用的 切記!
- 如何掃描某文件夾下所有文件 難道就不可以麼? 當然不 藉助於
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 我們可以這麼做:
取出該文件夾下的所有子文件
-----如其是文件且類型符合條件 就取出該文件目錄
以 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE方式發送至MediaScannerReceiver
-----若其爲文件夾 則迭代查詢之 故實現爲:
- public void fileScan(String file){
- Uri data = Uri.parse("file://"+file);
- Log.d("TAG","file:"+file);
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
- }
- public void folderScan(String path){
- File file = new File(path);
- if(file.isDirectory()){
- File[] array = file.listFiles();
- for(int i=0;i<array.length;i++){
- File f = array[i];
- if(f.isFile()){//FILE TYPE
- String name = f.getName();
- if(name.contains(".mp3")){
- fileScan(f.getAbsolutePath());
- }
- }
- else {//FOLDER TYPE
- folderScan(f.getAbsolutePath());
- }
- }
- }
- }
等我的Camera小程序寫的差不多的時候再貼上來。由於網上信息量太多,找到
合適答案的地方還真不多,在此Mark下,如果有幸能幫到各位,我將不甚欣慰。
全文轉載自:http://blog.csdn.net/happy08god/article/details/9303715