我需要创建一个应用程序来跟踪用户位置。该位置必须每隔一分钟发送一次到服务器(延迟不是问题)。但是我在设置一个永远持续的任务/服务时遇到了很多麻烦(即使我关闭了我的应用程序或重新启动了系统)
*获取“最后位置”不是问题,唯一的问题是有一个“永远”运行的任务/服务)
我尝试使用服务。但是 android,自 Marshmallow(我猜)版本以来,可以随时终止后台应用程序和服务(这是一个功能,可以避免许多应用程序创建后台服务/任务并消耗过多的电池和内存)。
现在我正在尝试使用新的 androidx“Worker”,因为我想用 minSdk=16 和当前的 maxSdk(29) 构建一个应用程序。但现在我面临两个问题: - Worker 不能运行超过 10 分钟(所以我不能创建一个永远持续的 Worker)。 - 我可以创建一个 PeriodicWorkRequest,但是重新安排 Worker 的最短时间是 15 分钟(我需要每隔一分钟发送一次位置)。
我尝试使用 OneTimeWorkRequest 并重新安排自身,但在系统重启后它不起作用。
有什么想法/解决方案吗?
主要 Activity 中的第一个时间表:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
WorkManager.getInstance(this).enqueue(
OneTimeWorkRequest.Builder(WorkerTest::class.java).build()
)
}
}
worker (在“doWork”的初始重新安排自己,延迟一分钟):
public class WorkerTest(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result {
WorkManager.getInstance(applicationContext).enqueue(
OneTimeWorkRequest.Builder(this::class.java).setInitialDelay(1, TimeUnit.MINUTES).build()
)
//TODO get and send location
return Result.success()
}
}
最佳答案
使用 AlarmManager 并每分钟运行一次以将您的请求发送到服务器。
https://developer.android.com/reference/android/app/AlarmManager
关于android - 服务每分钟发送位置,即使应用程序在后台或系统重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57421571/