首页 > 解决方案 > 为文件更改通知安排作业

问题描述

我想在特定文件更改时收到通知。我正在调查,FileObserver但在阅读了此线程中的答案后,我尝试JobScheduler使用在文件更改时应该运行作业的addTriggerContentUri().

我首先从文档页面复制示例,将Uri应该触发作业的Uri.fromFile(File(<path-to-file>)). 不幸的是,我的onStartJob()方法从未被调用,尽管JobScheduler::schedule()返回成功。

现在,我想知道我是否做错了什么,或者我的解释是否存在一般缺陷,也许不可能触发普通文件更改的工作?

我的类/代码的精简版本如下所示(Kotlin):

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 中android:permission="android.permission.BIND_JOB_SERVICE"

提前感谢您的帮助!

标签: androidandroid-jobschedulerandroid-background

解决方案


总结评论中所说的话,似乎不可能做到我试图实现的目标。这是因为Uri必须是“内容 Uri”,所以“文件 Uri”似乎是无效的。


推荐阅读