我想创建类似应用的Dumpster,为此我想要在用户删除任何文件时发出通知,以便我可以将其保存到我的应用内存中。
我使用了文件观察器,但它在文件删除后发出通知,而在marshmallow中它也没有通知删除。 我提到this link为文件观察者。 在某处我读到它可能使用本机编程语言(C),但无法获得任何解决方案。我怎样才能做到这一点? 提前谢谢。
我试过这个:
@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";
}
}
答案 0 :(得分:5)
让我们先澄清一下。
Handler
使用service
来检查{ {1}}事件及其文件onClick
如果将onClick
及其File
保存到单独的文件夹(通常是隐藏的),并将其保存在{{1}那是本地的。如果它被删除,您知道文件的位置,如果不是,则从path
删除该文件。嗯,这有点不值得痛苦,因为你几乎所有的时间都需要使用CPU资源来运行你的服务。它也可以在root设备上运行,但为什么root设备只能用于此目的。 随着设备安全性的提高,执行这些任务变得越来越不可能。作为 1-09-2017 的最新内容,所有 文件回收站 都对最新的Android版本进行了否定评论。因此,证明我的观点。
database
使用该概念检查文件甚至目录的任何更改,但您不能影响它,这意味着您无法阻止删除,它会在用户删除后通知所有内容。
hidden folder
它用于FileObserver
目的,用于创建应用程序,用于检查文件夹和文件上的事件,但如果提到该文件夹,则子子文件夹不会本文中包含此内容或通知您文件的任何更改。此外,inotify.h
中使用的概念与NDK
相同。您只能在删除文件后收到通知。
inotify中使用的代码就是这样的。
- 按
创建inotify实例inotify
()。- 使用
FileObserver
()函数将要监视的所有目录添加到inotify_init
列表。- 要确定发生的事件,请对inotify实例执行read()。此更改将被阻止,直到更改事件发生。它 建议对此inotify实例执行选择性读取 使用
inotify
()调用。- 读取返回受监视目录上发生的事件列表。根据{{1}}()的返回值,我们将确切地知道是什么类型的 发生了变化。
- 如果要删除目录/文件上的监视,请调用
醇>inotify_add_watch
()。
inotify中存在的两种方法如下:
select
- 从监视目录中删除文件/目录
read
- 已观看的文件/目录已被删除
这两者几乎与inotify_rm_watch
此解决方案可能不完全有帮助,但仍可以帮助创建任何 Dumpster 类型的应用程序。
可以说你需要创建自己的IN_DELETE
,你可以创建自己的自定义IN_DELETE_SELF
(只是一个很酷的名称文件版本2.0)类,扩展FileObserver
,你可以覆盖删除方法(以及所有其他方法)。您可以创建一个File Manager
FileV2
来表示您希望File
该文件的文件位于是custom
,而pop up
弹出的文件位于否。 (确保用户使用此文件管理器进行删除,否则它将无法正常工作,因为覆盖系统文件delete()也会破坏其他应用程序。)
delete
但请确保在用户使用backing up
时保存您的文件。
您可以为任务设置dismissing
,以便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
也可以使用。 (虽然不确定)
<强>来源强>:
Linux Help Deleted Log for Files
我希望它有所帮助,我希望你现在能够开始你想要的东西。