android - 服务每分钟发送位置,即使应用程序在后台或系统重新启动

标签 android service androidx

我需要创建一个应用程序来跟踪用户位置。该位置必须每隔一分钟发送一次到服务器(延迟不是问题)。但是我在设置一个永远持续的任务/服务时遇到了很多麻烦(即使我关闭了我的应用程序或重新启动了系统)

*获取“最后位置”不是问题,唯一的问题是有一个“永远”运行的任务/服务)

我尝试使用服务。但是 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/

相关文章:

android - 如何知道youtube正在通过我的android应用程序播放?

apache - 使用 php open dir 访问网络驱动器

c++ - 在不调用 uac 的情况下启动服务

android-fragments - 与底部导航栏android一起使用导航时,片段已添加问题

react-native - React Native Youtube androidx.annotation.Nullable错误

android - 如何使用Trinea Android Auto Scroll ViewPager库?

android - 更新小部件 onClick,启动服务似乎不起作用

java - 初学者 android studio 程序员

java - 在服务中使用 startActivityForResult 启动 Activity

android - 在模块中找到重复的类 com.google.android.a.a?