根据文档,FileObserver(path: String!)和FileObserver(path: String!, mask: Int)都被弃用了(我不知道什么时候)。但是,所有其他构造函数只在API 29(10/Q)中添加,我试图从API 19(4/KitKat)开始支持。一旦这两个构造函数在以后的API中被删除,监视文件的替代方案是什么?
FileObserver(path: String!)
FileObserver(path: String!, mask: Int)
lymnna711#
为了直接回答这个问题,1.新的API需要文件类型作为第一个参数,而不是字符串。IE FileObserver(File(path), mask)1.如果你需要在弃用之前和之后支持API,可以考虑编写一个 Package 器函数。
FileObserver(File(path), mask)
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() } }
1条答案
按热度按时间lymnna711#
为了直接回答这个问题,
1.新的API需要文件类型作为第一个参数,而不是字符串。IE
FileObserver(File(path), mask)
1.如果你需要在弃用之前和之后支持API,可以考虑编写一个 Package 器函数。