2

アクティビティの外で 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();


        }
    });


}
4

0 に答える 0