2013-05-31 3 views
4

Это мой код:FileObserver изменения не работает

public class SyncNotifyService extends Service { 
    private final static String TAG = "FileService"; 
    SDCardListener fileObserver = null; 


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

public File getCacheDir() { 
    if (!StorageUtil.isExternalStorageAvailable()) { 
     return null; 
    } 

    File dir = new File(Environment.getExternalStorageDirectory(), "Cache"); 
    return dir; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d(TAG, "onCreate"); 

    fileObserver = new SDCardListener(FileCache.getCacheDir().getPath(), FileObserver.MODIFY); 
    fileObserver.startWatching(); 
} 

class SDCardListener extends FileObserver { 
    public SDCardListener(String path, int mask) { 
     super(path, mask); 
    } 

    @Override 
    public void onEvent(int event, String path) { 
     final int action = event & FileObserver.ALL_EVENTS; 
     switch (action) { 
     case FileObserver.MODIFY: 
      Log.d(TAG, "event: MODIFY"); 
      break; 
     } 
    } 
} 

}

привет, я использую этот код, чтобы уведомить реж. но я нашел, что он никогда не вызывает onEvent использовать FileObserver.MODIFY param, кто-то знает, как написать правильный код? мой андроид версия 4.1.1

ответ

0

Может быть, ваш путь в написании OnEvent не является правильным, используйте

if (!event.equals(MODIFY)) { return;} 

//the code you want 
if (path.equals(blah blah blah)) { 
//some code.. 
} 

Это путь я использую в FileObserver, попробуйте ...

0

При создании FileObserver путь должен быть абсолютным в каталог, содержащий файл, который вы наблюдаете:

fileObserver = new SDCardListener(FileCache.getCacheDir().getAbsolutePath(), FileObserver.MODIFY); 

Кроме того, это изменить:

public void onEvent(int event, String path) { 

    switch (action) { 
    case FileObserver.MODIFY: 
     Log.d(TAG, "event: MODIFY"); 
     break; 
    } 
} 

Если OnEvent не срабатывает, попробуйте изменить как инициализировать FileObserver так, чтобы он listents в ALL_EVENTS и распечатать событие, которое триггер. Затем вы можете понять, почему MODIFY не является триггером.

 Смежные вопросы

  • Нет связанных вопросов^_^