2015-09-05 76 views
0

在我的Android應用程序中,我想檢測目錄中的事件。這裏是代碼:FileObserver不起作用

String path = Environment.getExternalStorageDirectory() 
      + File.separator + "test2"; 
    Log.d("test", "path is " + path); 

    FileObserver fileObserver = new FileObserver(path, FileObserver.ALL_EVENTS) { 
     @Override 
     public void onEvent(int event, String path) { 
      Log.d("test", "event dectect " + event + " " + path); 
     } 
    }; 

    fileObserver.startWatching(); 

我將新文件複製到目錄。但我沒有得到任何事件。請告訴我我犯了什麼錯誤。

+0

可能活動處於暫停或目錄複製新的文件時,請停止狀態。所以嘗試通過複製'adb shell'目錄中的文件而不會最小化活動 –

+0

我使用wife轉移(我從我的計算機上傳它)複製了新文件。所以我不認爲活動處於暫停或停止狀態。 – TOP

回答

8

您不能使用本地變量來存儲FileObserver,它將在方法運行後用於垃圾收集。

警告:如果FileObserver被垃圾收集,它將停止發送 事件。爲確保您繼續接收事件,您必須保留來自其他活動對象的FileObserver實例的參考 。

解決方案:將其保存到一個字段。

0

似乎FileObserver不能在符號鏈接上工作,這是Environment.getExternalStorage()返回的。

對我來說,訣竅是要解決使用File.getCanonicalPath()的鏈接

例子:

File file = new File(Environment.getExteranlStorage(), "myfile"); 
new FileObserver(file.getCanonicalPath()) ...