2012-05-17 47 views
2

在我的應用程序中,我需要增加拍攝時照片的數量。所以我爲DCIM directory設置了一個FileObserver。它觀看捕獲的照片。安裝SD卡後註冊FileObserver

但是,這個FileObserver停止觀看時,我卸載我的SD卡,因爲DCIM directory已不存在。當我安裝SD卡時,我試圖在獲得android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE意圖後再次註冊FileObserver。但FileObserver未獲得註冊。

我的問題是:

  1. 是否有任何其他方法,使FileObserver手錶安裝SD卡後?
  2. 在某些設備(HTC)中,我安裝SD卡後沒有任何意圖。在這種情況下我可以使用什麼方法?
  3. 有沒有其他的方法來聽取用戶在他內置的軟按鈕相機拍攝的照片。我不想建立我自己的相機。

    fo = new FileObserver(path.toString(), 
            FileObserver.CLOSE_WRITE) { 
    
           @Override 
           public void onEvent(int event, String path) { 
            Log.d("yes", "event "+ event); 
            Log.d("operator", 
              "out side if" 
                + Phototaken 
                + externalStorageState 
                  .equals(Environment.MEDIA_MOUNTED)); 
            if (Phototaken == 0 && event == 8){ 
             String st = timeStamp(); 
             Log.d("operator", "in event " + Phototaken); 
             Log.d("operator", "lat: " + MainService.lat 
               + " " + "lng: " + MainService.lng + " " 
               + "location: " + MainService.addre 
               + " " + "time: " + st); 
             ptd.insert(st, String.valueOf(MainService.lat), 
               String.valueOf(MainService.lng), 
               MainService.addre); 
            } 
    
           } 
          }; 
          fo.startWatching(); 
    
+1

根據[你的問題](http://meta.stackexchange.com/q/132796/161198)我做了一些小修改。檢查它們是否正確。並請妥善格式化您的代碼。如果它看起來不錯,你更可能會留意別人的注意力。 – Bart

+0

非常感謝你 – thej

回答

0

您可以創建一個新的BroadcastReceiver觀看標清掛載/卸載事件。然後,在掛載事件中,告訴您的FileObserver開始再次查看DCIM目錄。

你需要指定意圖過濾器來監視你想要的事件:

IntentFilter filter = new IntentFilter(); 
filter.addAction(Intent.ACTION_MEDIA_MOUNTED); 
filter.addAction(Intent.ACTION_MEDIA_REMOVED); 

This snippet從官方API參考展示瞭如何監控外部存儲器的狀態。