如何从 Android 服务实现 FileObserver

新手上路,请多包涵

您如何构造一个 Android 应用程序以启动 Service 使用 FileObserver 以便在修改观察到的目录(即用户拍照)时执行一些其他代码。调试时,永远不会触发 onEvent 方法。

这是我服务中的 onStart 事件。 Toast 触发“我的服务开始……”

 public final String TAG = "DEBUG";
public static FileObserver observer;

@Override
public void onStart(Intent intent, int startid) {
        Log.d(TAG, "onStart");

        final String pathToWatch = android.os.Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera/";
        Toast.makeText(this, "My Service Started and trying to watch " + pathToWatch, Toast.LENGTH_LONG).show();

        observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card
            @Override
            public void onEvent(int event, String file) {
                //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched
                    Log.d(TAG, "File created [" + pathToWatch + file + "]");

                    Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG);
                //}
            }
        };
    }

但是在 Toast 之后,如果我拍照,onEvent 永远不会触发。这是调试决定的。它永远不会到达该断点,并且 Toast 永远不会触发。

浏览该目录时,新图像将保存在那里。

你如何让 FileObserver Service

原文由 shanabus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 516
2 个回答

请看 这篇文章。我认为您在设置观察者后错过了 observer.startWatching() 调用。

  observer = new FileObserver(pathToWatch) { // set up a file observer to watch this directory on sd card

     @Override
     public void onEvent(int event, String file) {
         //if(event == FileObserver.CREATE && !file.equals(".probe")){ // check if its a "create" and not equal to .probe because thats created every time camera is launched
         Log.d(TAG, "File created [" + pathToWatch + file + "]");

         Toast.makeText(getBaseContext(), file + " was saved!", Toast.LENGTH_LONG).show();
         //}
     }
 };
 observer.startWatching(); //START OBSERVING

原文由 Jack 发布,翻译遵循 CC BY-SA 3.0 许可协议

.show() toast ,即

Toast.makeText(getBaseContext(), file + " was saved!", toast.LENGTH_LONG).show();

原文由 Sujith S Manjavana 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏