• Android FileObserver 的使用与简要原理


    FileObserver 是一个 Android 类,用于监视指定文件或目录的更改。它可以帮助开发者实时检测文件或目录的创建删除重命名修改等操作。通过使用 FileObserver,开发者可以及时响应这些文件系统变化,并在相应的事件发生时执行特定的操作。


    FileObserver 的使用:

    1. class MainActivity : AppCompatActivity() {
    2. var fileObserver: FileObserver? = null
    3. override fun onCreate(savedInstanceState: Bundle?) {
    4. super.onCreate(savedInstanceState)
    5. val path = "/sdcard/xxxx/xxxx" // 监视的文件或目录路径
    6. fileObserver = object : FileObserver(path) {
    7. override fun onEvent(event: Int, path: String?) {
    8. when (event) {
    9. CREATE -> {} // 文件或目录创建
    10. DELETE -> {} // 文件或目录删除
    11. DELETE_SELF -> {} // 自身删除
    12. MODIFY -> {} // 文件或目录修改
    13. MOVED_FROM -> {} // 移动或重命名
    14. MOVED_TO -> {} // 移动或重命名后
    15. ATTRIB -> {} // 文件或目录属性变化
    16. }
    17. }
    18. }
    19. fileObserver?.startWatching()
    20. }
    21. override fun onDestroy() {
    22. super.onDestroy()
    23. fileObserver?.stopWatching()
    24. }
    25. }

    注意:需要确保监听的文件路径读写权限后程序才能正常运行


    FileObserver 在底层通过 JNI(Java Native Interface)与 C/C++ 代码进行交互,调用了系统的 inotify 接口。当 FileObserver 实例启动后,它会创建一个底层的 inotify 实例,并请求内核对指定文件或目录进行监视

    当监视的文件或目录发生变化时,内核会生成相应的事件,并将事件信息传递给 FileObserver。 FileObserver 将捕获这些事件并触发相应的回调方法,如 onEvent()。


    需要注意的是,FileObserver 在底层的实现使用了 Linux 的特定功能,因此只能Android 上使用,而不适用于其他操作系统或平台。

  • 相关阅读:
    【Unity】URP渲染管线下代码获取相机的Volume Mask属性
    [C++学习] 多进程通信共享内存
    spring boot整合jwt
    SQL基础练习题1
    Vue路由&&无痕浏览 - nodeJs环境搭建
    RGB(c++)
    pyflink1.18.0 keyby之后使用自定义keyedProcessfunction报错
    在Python中实现一个简单的社交媒体应用
    27. 移除元素
    【苹果家庭推送iMessage】软件安装UITableViewController
  • 原文地址:https://blog.csdn.net/weixin_47592544/article/details/132627060