kotlin API级别〈29的已弃用的FileObserver构造函数的替代方法

8ljdwjyq  于 2023-04-07  发布在  Kotlin
关注(0)|答案(1)|浏览(230)

根据文档,FileObserver(path: String!)FileObserver(path: String!, mask: Int)都被弃用了(我不知道什么时候)。但是,所有其他构造函数只在API 29(10/Q)中添加,我试图从API 19(4/KitKat)开始支持。
一旦这两个构造函数在以后的API中被删除,监视文件的替代方案是什么?

lymnna71

lymnna711#

为了直接回答这个问题,
1.新的API需要文件类型作为第一个参数,而不是字符串。IE FileObserver(File(path), mask)
1.如果你需要在弃用之前和之后支持API,可以考虑编写一个 Package 器函数。

open class FileObserverApiWrapper(path: String, mask: Int) {
  private var fileObserver: FileObserver? = null

  init {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
      fileObserver = object : FileObserver(File(path), mask) {
        override fun onEvent(event: Int, path: String?) {
          this@FileObserverApiWrapper.onEvent(event,path)
        }
      }
    } else {
      @Suppress("DEPRECATION")
      fileObserver = object : FileObserver(path, mask) {
        override fun onEvent(event: Int, path: String?) {
          this@FileObserverApiWrapper.onEvent(event,path)
        }
      }
    }
  }

  /**
   * @description does nothing, can be overridden. Equivalent to FileObserver.onEvent
   */
  open fun onEvent(event: Int, path: String?){}

  open fun startWatching() {
    fileObserver?.startWatching()
  }

  open fun stopWatching() {
    fileObserver?.stopWatching()
  }
}

相关问题