2012-11-22 83 views
0

我需要始終跟蹤從整個文件系統中刪除的圖像和視頻(即使我的UI應用程序未運行),直到手機啓動後才關閉直到關閉。爲此,我使用一個服務和FileObserver。不幸的是下面所附的代碼無法正常工作(我不調試器獲取的方法Android:FileObserver未通知FS更改

公共無效的onEvent(INT事件,字符串文件)

雖然我做了一些改動FS ...的服務被啓動,顯然onStarted()方法被執行...

請幫助

public class DataChangeListener extends Service { 

    private static Context context; 

    @Override 
    public IBinder onBind(Intent intent) { 
     context = this; 
     return null; 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 
     context = this; 

     FileObserver observer = new FileObserver("/") { 

      @Override 
      public void onEvent(int event, String file) { 
       System.out.println(); 
      } 
     }; 
     observer.startWatching(); 
    } 

    @Override 
    public boolean onUnbind(Intent intent) { 
     return super.onUnbind(intent); 
    } 
} 

回答

2

我需要從整個文件系統所有的時間跟蹤刪除的圖像和視頻

這是不可能的,除非您創建操作系統的修改版本,因爲您將無法保持服務始終運行。例如,用戶可以在用戶需要時擺脫服務。

不幸的是附在下面的代碼不起作用

首先,你有沒有讀訪問/,這可能與FileObserver操作。

其次,你錯過了一個高亮段落in the FileObserver documentation

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

您允許垃圾收集FileObserver

+2

通過從onStartCommand()返回START_STICKY可以使服務始終保持活動狀態,在這種情況下,即使我在DDMS中殺死它,它也會立即被系統重新啓動。如果用戶明確停止服務,那是另一回事。我認爲這裏的問題是缺乏權限。 –