当前位置: 首页 > 面试题库 >

如何通过Android服务实现FileObserver

郏佐
2023-03-14
问题内容

如何构建一个Android应用程序以启动A
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


问题答案:

请参阅这篇文章。我认为您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


 类似资料:
  • 在Eclipse中运行RESTful客户端时,出现以下错误: 在浏览器中调用时,URL不会被阻止。如何通过客户端使用它? TIA! 编辑:(客户端代码)

  • 我正在进行一个Personal项目,将一个整体的web应用程序转换为微服务(每个服务都有自己的数据库)。 第二个想法是使用RabbitMQ这样的消息代理。“Register Service”仍然在自己的数据库中插入有趣的东西,并以用户信息作为数据在队列中发布消息。“用户服务”使用此消息并将数据持久化到其“用户”数据库中。通过使用这个概念,这两个服务是完全隔离的,这可能是一个很好的想法。 但是,发送

  • 我正在尝试使用三个虚拟机(Master–10.x.x.4、Node1–10.x.x.150、Node2–10.x.x.160)创建Kubernetes集群。 我能够通过此链接成功创建留言簿应用程序:http://kubernetes.io/v1.0/examples/guestbook/.我只对frontend-service.yaml做了一个更改:使用NodePort。我可以使用节点IP和端口号

  • 问题内容: 我目前正在使用HTTP方法来调用一些URL,这将导致JIRA问题。 现在,我想使用Apache Camel,该如何使用? 我需要通过骆驼调用以下链接: 由于我是Camel的新手,因此也请提出一些解决方案和示例。 谢谢 问题答案: 您可以轻松使用CXFRS组件;如果出于某种原因需要使用HTTP组件进行操作,则也可以轻松地使用它: 当然,在到达路由的这一部分之前,您将需要使用标头来丰富您的

  • 我正在尝试访问一个运行在Openshift吊舱中的Flask服务器。 为此,我创建了如下服务。 1)首先,我豆荚ping到另一个豆荚并得到响应。 但是,当我尝试时,它没有响应。 2) 之后,我尝试从一个pod访问集群IP。在这种情况下,都不可访问。 请告诉我哪里出错了。为什么上面的情况#1,#2失败。如何访问集群IP服务。 我对服务和访问服务完全陌生,因此我可能缺少一些基础知识。 我回答了其他问题

  • 问题内容: 我需要每10秒从服务器收到一个状态。 我试图通过服务发送一个http请求来做到这一点。 问题是我的代码只能执行一次。 这是我的服务代码: 谢谢很多阿维 问题答案: 将处理程序放入onPostExecute中以在10秒后发送http请求 10秒后,将再次执行doInBackground,然后再次执行onPostExecute,再次处理程序,依此类推。