当后台特定外部存储文件夹发生变化时唤醒应用程序

问题描述 投票:0回答:0

我想在后台跟踪更改到用户选择的外部存储文件夹没有前台服务唤醒应用程序何时更改发生。这 应该工作 即使 用户 removes 应用程序 from recent apps。通过在此阶段唤醒应用程序,我的意思是仅发送用户一个通知检测到更改。我不想使用前台服务的原因是因为我不想显示我正在监视文件系统的持续通知

我认为在当前的 Android 限制下这是不可能的,但后来我遇到了 FolderSync 应用程序。使用此应用程序,当您设置本地 - 远程文件夹对时,它非常准确地跟踪对本地文件夹的更改,同时不在状态栏中显示任何通知(这意味着它们notrunninga Foreground Service 来执行)。请看看这个视频看看它是如何工作的(它是在运行Android 13的三星手机上拍摄的)

我研究了各种方法,我发现的唯一可能的解决方案是使用 WorkManager 提供的 addContentUriTrigger

我的场景中的示例用法是:

                val folderUri = Uri.parse("file://" + folderPath)

                workRequestBuilder.setConstraints(
                    Constraints.Builder()
                        .addContentUriTrigger(folderUri, true)
                        .build()
                ).addTag(WORKER_TAG)

                workManager.enqueue(syncMonitorBuilder.build())

但是它不起作用。首先,在这种情况下,出于某种原因,WorkManager 根本不会被触发。如果我将其替换为

.addContentUriTrigger(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true)
以收听 DCIM 目录(而不是自定义目录)的 changes - WorkManager works 在最近的应用程序中运行良好,但一旦您 remove stops该应用程序来自最近apps.

android android-service android-workmanager android-alarms android-storage
© www.soinside.com 2019 - 2024. All rights reserved.