2012-11-22 47 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中杀死它,它也会立即被系统重新启动。如果用户明确停止服务,那是另一回事。我认为这里的问题是缺乏权限。 –