2017-07-12 59 views
1

我有一個Android應用程序,我想監視一個文件夾。我提供了一項服務(即使用戶殺死應用程序,我也要不停地監視文件夾),並將文件夾的路徑放在Intent的附加內容中。在服務中,我有一個FileObserver應該監視我的文件夾,並在文件夾內創建文件時觸發事件。問題是事件從未被觸發。 我做錯了什麼?謝謝!監控Android服務中的文件夾

@Override 
public int onStartCommand(Intent intent, int flags, int startId){ 

    String mainFolder = intent.getStringExtra("mainFolder"); 

    Toast.makeText(getApplicationContext(), "Service start! Main folder is: " + mainFolder, Toast.LENGTH_LONG).show(); 

    FileObserver observer = new FileObserver(mainFolder) { 
      @Override 
      public void onEvent(int event, String path) { 
       if (path == null) { 
        return; 
       } 
       if (FileObserver.CREATE == event) { 
        Toast.makeText(getApplicationContext(), "This file was creted: " + path, Toast.LENGTH_LONG).show(); 

       } 
      } 
     }; 

    observer.startWatching(); 

    return START_REDELIVER_INTENT; 
} 

回答

0

報價the documentation for FileObserver

警告:如果FileObserver是垃圾回收,它會停止發送事件。爲確保您繼續接收事件,您必須保留對某個其他活動對象的FileObserver實例的引用。

FileObserver實例是符合垃圾收集儘快onStartCommand()的回報,因爲你不把它保持在外地,但在本地變量。

另外,請記住,服務不會永遠運行。

+0

謝謝你的回答!我知道一個服務不會永遠運行,但是「return START_REDELIVER_INTENT;」聲明應該重新打開該服務。 –

+0

@AlexHash:是的,但由於您的服務不是前臺服務,所以在Android 8.0+上,它會運行一分鐘左右,然後停止。 – CommonsWare