アクティビティの外で FileObserver クラスを定義しました
public class MyFileObserver extends FileObserver {
public String absolutePath;
public MyFileObserver(String path) {
super(path, FileObserver.ALL_EVENTS);
absolutePath = path;
}
@Override
public void onEvent(int event, String path) {
if (path == null) {
return;
}
if ((FileObserver.CREATE & event)!=0) {
TextView tv = (TextView)findViewById(R.id.text1);
//Set the text
tv.setText("CREATED!");
}
}
}
インスタンスを作成し、メインアクティビティで StartWatching() を使用してファイルの監視を開始しました
MyFileObserver fileOb = new MyFileObserver("/mnt/sdcard/");
fileOb.startWatching();
アプリケーションを実行し、監視されているディレクトリにファイルをコピーすると、OnEvent() はトリガーされませんが、ボタンをクリックすると (メインアクティビティで定義された他の目的で使用されます)、OnEvent がトリガーされ、目的の結果が得られます。私の質問は、なぜこの OnEvent() 関数がそれ自体をトリガーしないのですか? mainactivity で startWatching() を呼び出しているためでしょうか。この場合、この関数をどこで呼び出す必要がありますか。前もって感謝します。
これが私の onCreate() メソッドです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyFileObserver fileOb = new MyFileObserver("/mnt/sdcard/");
fileOb.startWatching();
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}