android - 为文件更改通知安排作业
问题描述
我想在特定文件更改时收到通知。我正在调查,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"
。
提前感谢您的帮助!
解决方案
总结评论中所说的话,似乎不可能做到我试图实现的目标。这是因为Uri
必须是“内容 Uri”,所以“文件 Uri”似乎是无效的。
推荐阅读
- r - bind_tf_idf()错误:在tapply(n,文档,总和)中:参数必须具有相同的长度
- javascript - React Native 按日期排序数组
- python - 无法通过连接我的前端的 REST API 检索图像和视频
- redis-cache - 如何使用 .net 核心在 RedisCache 的 Google 内存存储上执行键(读、写、删除)
- wordpress - 在 WordPress 中扩展媒体库
- javascript - 在控制台上手动抛出状态码错误
- google-bigquery - bigquery 中的 UNNEST 不起作用,出现“无法访问 ARRAY 类型值的字段”
- javascript - 使用 selenium 从 Sharechat 中抓取视频
- pandas - 如何将多条移动平均线动态添加到 Plotly Candlestick
- c# - System.Security.SecurityException:请求失败的异常