想要 运行 没有后台服务的功能 启用哪个任务来检查位置?

want to run a function without background service which task to check location is enable?

我想以特定的时间间隔执行一个函数。它应该在 GPS 定位被禁用和用户退出应用程序时执行。我想 运行 该功能检查 GPS-Location 是否启用,如果发现启用,那么我需要在某个特定的时间间隔内一次又一次地关闭该功能的执行。

有没有办法在没有后台服务的情况下执行这样的功能?

提前致谢。

I want to run that function to check whether GPS-Location is enable or not

欢迎您设置清单注册 <receiver> 来收听 PROVIDERS_CHANGED_ACTION and/or MODE_CHANGED_ACTION 广播。您可以通过 PackageManagersetComponentEnabledSetting() 有条件地启用和禁用该接收器,因此您只在认为相关时才收听这些广播。

这避免了您建议的轮询解决方案,从而节省了用户的电量。

Is there any way to execute such function without background services ?

您可以通过上述广播了解提供商的变化,而这本身不需要服务。

但是,您还必须考虑收到该广播后您打算做的工作。如果这将执行任何 I/O(磁盘 I/O、网络 I/O 等),您需要将其委托给 Service,可能是 IntentService,从主应用程序线程中获取该工作,但仍可能完成该工作。

而且,如果您坚持定时执行此操作,唯一可靠的解决方案(AlarmManagerJobScheduler 等)需要服务来完成这项工作,尽管不是一直在 运行 服务。