草庐IT

android - File Observer 无法通过 Intent 服务工作

coder 2023-12-14 原文

我找到了一个很棒的类来扩展抽象文件观察器类...

import android.os.FileObserver;
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import android.util.Log;

public class FileSync extends FileObserver {
public String absolutePath;
public String uid;

public FileSync(String path, String uidd) {
    super(path, FileObserver.ALL_EVENTS);
    absolutePath = path;
    uid = uidd;
}
@Override
public void onEvent(int event, String path) {
    if (path == null) { //path is the name of the file... I think its absolute
        return;
    }
    //a new file or subdirectory was created under the monitored directory
    if ((FileObserver.CREATE & event)!=0) { 
        doFileUpload(path, uid);
    }
    //a file or directory was opened
    if ((FileObserver.OPEN & event)!=0) {
        //TODO Nothing... yet
    }
    //data was read from a file
    if ((FileObserver.ACCESS & event)!=0) {
        //TODO Nothing... yet
    }
    //data was written to a file
    if ((FileObserver.MODIFY & event)!=0) {
        doFileUpload(path,uid);
    }
    //someone has a file or directory open read-only, and closed it
    if ((FileObserver.CLOSE_NOWRITE & event)!=0) {
        //TODO Nothing... yet
    }
    //someone has a file or directory open for writing, and closed it 
    if ((FileObserver.CLOSE_WRITE & event)!=0) {
        doFileUpload(path,uid);
    }
    //[todo: consider combine this one with one below]
    //a file was deleted from the monitored directory
    if ((FileObserver.DELETE & event)!=0) {
        //TODO Remove file from the server
    }
    //the monitored file or directory was deleted, monitoring effectively stops
    if ((FileObserver.DELETE_SELF & event)!=0) {
        //TODO Toast an error, recreate the folder, resync and restart monitoring
    }
    //a file or subdirectory was moved from the monitored directory
    if ((FileObserver.MOVED_FROM & event)!=0) {
        //TODO Delete from the server
    }
    //a file or subdirectory was moved to the monitored directory
    if ((FileObserver.MOVED_TO & event)!=0) {
        doFileUpload(path,uid);
    }
    //the monitored file or directory was moved; monitoring continues
    if ((FileObserver.MOVE_SELF & event)!=0) {
        //TODO Recreate the folder and show toast
    }
    //Metadata (permissions, owner, timestamp) was changed explicitly
    if ((FileObserver.ATTRIB & event)!=0) {
        //TODO Nothing... Yet
    }
}

我在 IntentService 的 onCreate 中创建了三个这样的观察者:

new File("/sdcard/Docs/").mkdir();
FileSync files = new FileSync("/sdcard/Docs/",uid);
FileSync pictures = new FileSync(Environment.DIRECTORY_PICTURES,uid);
FileSync music = new FileSync(Environment.DIRECTORY_MUSIC,uid);
files.startWatching();
pictures.startWatching();
music.startWatching();

不仅观察者不工作,而且 mkdir 函数也不工作。

有什么想法吗?谢谢!

最佳答案

检查你是否包含了android.permission.WRITE_EXTERNAL_STORAGE在你的 list 文件中。
缺少此权限将导致 mkdir() 失败,这将导致 FileObserver也会失败,因为监视的文件或目录必须在 startWatching 时存在否则不会报告任何事件。

关于android - File Observer 无法通过 Intent 服务工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11149905/

有关android - File Observer 无法通过 Intent 服务工作的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  5. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  6. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  9. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐