我想在特定文件更改时收到通知。我一直在研究FileObserver
,但是在阅读了this thread中的答案之后,我尝试使用JobScheduler
完成我的目标,当文件更改时,应该使用addTriggerContentUri()
来运行作业。
我首先从文档页面复制示例,将应触发作业的addTriggerContentUri()
更改为Uri
。不幸的是,尽管Uri.fromFile(File(<path-to-file>))
返回成功,但从未调用过我的onStartJob()
方法。
现在,我想知道我是否做错了什么,或者我的解释中是否存在一般性缺陷,也许根本不可能在普通文件更改时触发工作?
我的类/代码的精简版看起来像这样(科特琳):
JobScheduler::schedule()
当然,class FilechangeService : JobService() {
companion object {
private const val JOB_ID = 0
// Schedule this job, replace any existing one.
fun scheduleJob(context: Context) {
// JobInfo Builder to construct the Job
val builder = JobInfo.Builder(
JOB_ID,
ComponentName(context, FilechangeService::class.java)
)
// Look for changes to specific file
val uri = Uri.fromFile(File(<path-to-file>))
builder.addTriggerContentUri(
JobInfo.TriggerContentUri(uri, 0)
)
val jobInfo = builder.build()
val js = context.getSystemService(JobScheduler::class.java)
val status = js.schedule(jobInfo)
}
}
override fun onStartJob(params : JobParameters) : Boolean {
// Code that is never executed =(
return false
}
}
是从应用程序的另一部分调用的。此外,我已经通过FilechangeService::scheduleJob()
将服务添加到了AndroidManifest.xml中。
提前感谢您的帮助!
我想在特定文件更改时收到通知。我一直在研究FileObserver,但是在阅读了该线程的答案之后,我尝试使用JobScheduler完成目标,该目标应该是...
总结一下评论中所说的话,似乎不可能做到我试图实现的目标。这是由于android:permission="android.permission.BIND_JOB_SERVICE"
必须是“内容Uri”,因此“文件Uri”似乎无效。