Android Camera存圖片到SD卡 及時更新的問題

簡單套着網上的例子,做了個Android Camera, 在存儲圖片的時候遇到了點問題,

如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卡掃描:


[java] view plaincopy
  1. <span style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background-color:transparent; color:rgb(0,153,0)"></span>  
[java] view plaincopy
  1. <span style="margin:0px; padding:0px; border:0px; outline:0px; vertical-align:baseline; background-color:transparent; color:rgb(0,153,0)"></span>  
[java] view plaincopy
  1. public void sdScan(){       
  2.       sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"      
  3.                   + Environment.getExternalStorageDirectory())));       
  4.   }  
[java] view plaincopy
  1. public void sdScan(){       
  2.       sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"      
  3.                   + Environment.getExternalStorageDirectory())));       
  4.   }  



通過 Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 掃描某個文件:

[java] view plaincopy
  1. public void fileScan(String filePath){       
  2.        Uri data = Uri.parse("file://"+filePath);       
  3.        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));       
  4.    }  
[java] view plaincopy
  1. public void fileScan(String filePath){       
  2.        Uri data = Uri.parse("file://"+filePath);       
  3.        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));       
  4.    }  


注: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   

-----若其爲文件夾 則迭代查詢之    故實現爲:


  1. public void fileScan(String file){  
  2.         Uri data = Uri.parse("file://"+file);  
  3.           
  4.         Log.d("TAG","file:"+file);  
  5.         sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));  
  6.     }  
  7.       
  8.     public void folderScan(String path){  
  9.         File file = new File(path);  
  10.           
  11.         if(file.isDirectory()){  
  12.             File[] array = file.listFiles();  
  13.               
  14.             for(int i=0;i<array.length;i++){  
  15.                 File f = array[i];  
  16.                   
  17.                 if(f.isFile()){//FILE TYPE  
  18.                     String name = f.getName();  
  19.                       
  20.                     if(name.contains(".mp3")){  
  21.                         fileScan(f.getAbsolutePath());  
  22.                     }  
  23.                 }  
  24.                 else {//FOLDER TYPE  
  25.                     folderScan(f.getAbsolutePath());  
  26.                 }  
  27.             }  
  28.         }  
  29.     }  



等我的Camera小程序寫的差不多的時候再貼上來。由於網上信息量太多,找到

合適答案的地方還真不多,在此Mark下,如果有幸能幫到各位,我將不甚欣慰。


全文轉載自:http://blog.csdn.net/happy08god/article/details/9303715

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章