Внутри MainActivity.class
, я ссылаюсь на файл .docx на моем телефоне
//Reference to the file
File targetFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/storage/sdcard0/My Folder/Android-tutorial.docx");
//I start the background service here.
startService(new Intent(getApplicationContext(), FileObserverService.class).putExtra("INTENT_EXTRA_FILEPATH", targetFile.getAbsolutePath()));
//To open file in external app
Uri targetUri = Uri.fromFile(targetFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(targetUri, "application/*");
startActivityForResult(intent, 100);
Мой класс обслуживания, используемый для мониторинга изменений файла.Когда файл .docx открывается во внешнем приложении, запускается только событие OPEN.Событие MODIFY не вызывается, даже когда я изменяю содержимое файла и сохраняю его из внешнего приложения.
public class FileObserverService extends Service {
private FileObserver mFileObserver;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
try {
final String pathToFile = intent.getStringExtra("INTENT_EXTRA_FILEPATH");
new FileObserver(pathToFile) {
@Override
public void onEvent(int event, String path) {
switch (event) {
case FileObserver.OPEN:
Log.d("FILEOBSERVER_OPEN", "Event with id " + Integer.toHexString(event) + " happened");
break;
case FileObserver.MODIFY:
Log.d("FILEOBSERVER_MODIFY", "Event with id " + Integer.toHexString(event) + " happened");
break;
case FileObserver.CLOSE_WRITE:
Log.d("FILEOBSERVER_CLOWRITE", "Event with id " + Integer.toHexString(event) + " happened");
break;
case FileObserver.DELETE:
Log.d("FILEOBSERVER_DELETE", "Event with id " + Integer.toHexString(event) + " happened");
break;
}
}
}.startWatching();
}catch (Exception e){
e.printStackTrace();
}
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
}
Вывод:
D/FILEOBSERVER_OPEN: Event with id 20 happened