我怎样才能得到通知的任何文件被删除从SD卡

我想要创build垃圾箱一样的应用程序,为此我想通知,当用户正在删除任何文件,以便我可以将其保存到我的应用程序内存。

我使用文件观察员,但它是在文件删除后给予通知,棉花糖也不通知删除。 我把这个链接称为文件观察者。 我读过的地方有可能使用本地编程语言(C),但不能得到任何解决scheme。 我怎样才能做到这一点? 提前致谢。

我试过这个:

@Override public void onEvent(int event, String path) { if (path == null) { return; } //the monitored file or directory was deleted, monitoring effectively stops if ((FileObserver.DELETE_SELF & event)!=0) { FileAccessLogStatic.accessLogMsg += absolutePath + "/" + " is deleted\n"; } } 

Solutions Collecting From Web of "我怎样才能得到通知的任何文件被删除从SD卡"

让我们首先澄清事情。

  1. 垃圾箱使用.trash目录,可能并不总是存在。 这应该指出,垃圾桶在许多设备上不能正确运行,因为它可以通过谷歌评论。
  2. 垃圾箱使用(我只是为了教育目的而从代码中猜到它)它是自己的系统文件Handler ,使用service来检查onClick事件,如果它的文件onClick它保存File以及path到一个单独的文件夹(通常隐藏)并将其保存在本地database中。 如果它被删除,你知道文件在哪里,如果没有,让该文件从该hidden folder删除。 那么这是不值得的痛苦,因为你几乎需要几乎所有的时间使用CPU资源运行你的服务。 它也运行在根植设备上,但为什么只有这个根目录设备。
  3. 随着设备的安全性越来越高,执行这些任务的可能性越来越小。 作为最新的1-09-2017所有这些文件回收站有最新的Android版本的负面评论。 因此,certificate我的观点。

    FileObserver使用这个概念来检查文件甚至是目录上的任何变化,但是你不能影响它,这意味着你不能阻止删除它会在用户删除后通知所有的东西。

    inotify.h它用于NDK用于创build应用程序使用检查文件夹和文件上的事件,但如果该文件夹被提及sub sub文件夹将不包括在此或通知您任何文件的更改。 此外, inotify使用的概念与FileObserver相同。 您只能在文件被删除后收到通知。 inotify中使用的代码是这样的。

  1. 通过inotify_init ()创buildinotify实例。
  2. 使用inotify_add_watch ()函数将所有要监视的目录添加到inotify列表中。
  3. 要确定发生的事件,请执行inotify实例的read()。 这个读取将被阻塞,直到发生改变事件。 build议使用select ()调用对此inotify实例执行select性读取。
  4. 读取返回受监视目录上发生的事件列表。 根据read ()的返回值,我们将知道发生了什么样的变化。
  5. 在删除目录/文件的情况下,请调用inotify_rm_watch ()。

目前使用的两种方法如下:

IN_DELETE – 从目录中删除的文件/目录

IN_DELETE_SELF – 监视的文件/目录本身已被删除

这两者几乎与FileObserver相同

  1. 此解决scheme可以帮助不完全,但仍然可以帮助创build任何垃圾箱types的应用程序。 可以这样说,你需要创build自己的File Manager ,你可以创build你自己的自定义FileV2 (只是一个很酷的文件版本2.0)类扩展File ,你可以重写删除方法(和所有其他),只要你喜欢。 你可以创build一个custom pop up说你想delete文件,你自己backing up的文件是,并dismissingpopup的没有。 (确保用户使用这个文件pipe理器来删除,否则它将无法正常工作,因为覆盖系统文件删除()只会搞砸其他应用程序)。

     class filev2 extends File { public filev2(@NonNull String pathname) { super(pathname); } public filev2(@NonNull URI uri) { super(uri); } @Override public boolean delete() { // return super.delete(); //Do as you want and return the boolean. } } 

但是请确保您的文件将被保存,如果用户使用您的File Manager 。 您可以设置任务的intent-filters ,以便您的FileManager进入ACTION_VIEW

最后,但我不知道这可能registerContentObserver也可以使用。 (虽然不确定)

来源

Inotify.h帮助网站

registerContentObserver帮助

类似的问题

FileObserver帮助

Linux帮助删除了文件的日志

我希望这会有所帮助,我希望你现在可以开始你想要的。