java - 在从系统中删除之前,如何检测 Android 中任何文件的删除?
问题描述
我正在尝试在 Playstore 上开发一个类似Recycle Bin App的 android 应用程序,其中检测到从 android 系统中删除的任何文件并显示在可以恢复的回收站应用程序中(他们可能是通过制作一个文件被删除之前的副本)。
我尝试使用 android FileObserver 并制作了一个像这样的递归文件观察器类捕获系统中每个文件的系统事件,但即使在某些设备(例如华为手机)上也无法工作,并且只有在文件从系统中删除后才会调用删除事件。我尝试的另一件事是为调用 File.Access 或 File.Open 事件的任何文件创建文件输入流,然后在调用 File.delete 事件后制作该文件的副本。这里的问题是,当使用第三方文件资源管理器(Android OS 附带的)时,除非您专门打开文件,否则不会调用诸如访问之类的文件事件,因此如果用户删除文件而不先打开它,或者如果用户删除多个文件,我们无法在这些文件被删除之前捕获这些文件。
public void onEvent(int event, String path) {
switch (event) {
case RecursiveFileObserver.ACCESS:
makeInputStremForPath(path);
break;
case RecursiveFileObserver.DELETE:
copyFile(inputStrem);
break;
}
}
因此,我正在寻找一些方法来检测任何文件上的删除事件,因为它即将从系统中删除。我进行了很多研究,但没有找到任何解决此问题的方法。PlayStore 上有另一个名为 Dumpster 的应用程序正在做这种事情(尽管从 3rd 方文件资源管理器中删除文件时有时也无法恢复文件)。我已经找到了有关 Dumpster 应用程序一些背景的答案,但仍然没有为我的问题找到任何明确的解决方案。
解决方案
推荐阅读
- xcode - Xcode:分发“重新签名”步骤被隐藏,如何取回?
- android - 图像未加载到android手机中的html文件上
- java - 渲染布局并制作新适配器后,RecyclerView 未调用 oncreateview
- swift - 使用 Mac Catalyst 打开 Finder
- selenium-webdriver - 配置 GitLab CI 以使用 rspec / selenium / Firefox 运行功能测试
- spring - simpUser 标头来自哪里?
- docker - Ignite TcpDiscoverySpi 因“ServerSocket [addr=0.0.0.0/0.0.0.0..”的接受循环而导致 SocketTimeout 出现严重系统错误而失败
- ansible - ansible 库存,从另一台主机获取变量
- python-3.x - 如何在 VS 代码上获得类似 Jupyter Notebook 的自动完成功能
- python - 在超大规模加权有向图中获得所有对最短路径的最佳方法是什么?