CanvasWatchFaceService 中的自定义广播接收器

Custom broadcast receiver in CanvasWatchFaceService

我正在为 Android Wear(minSdkVersion=21 和 targetSdkVersion=23)开发一些表盘,并为 Android 集成 Google Fit API。

我想在后台轮询具有给定(用户选择)时间间隔的适合数据,并将其传回我的表盘。所以我创建了一个扩展服务 class、实现 SensorEventListener、GoogleApiClient ConnectionCallbacks、GoogleApiClient.OnConnectionFailedListener 等的服务,并且我使用 Fitness API 来读取适合数据和心脏传感器数据.

然后我将值(卡路里、距离、步数等)传回表盘,这是一个标准 class 扩展 CanvasWatchFaceService,使用自定义 BroadcastReceiver。

我想要实现的是始终更新表盘中可用的健身变量,这样当它因为用户与其交互而离开环境或静音模式时,我需要显示的数据已经存在并且我只需要在屏幕上绘制它而不需要当时使用 Fitness API 阅读它,因为它可能需要几秒钟。

并且有效。数据由表盘中的广播接收器接收,并且变量值已正确设置。我使用简单的 canvas.drawText 在屏幕上输出它们。我看到它们在交互模式下更新(表盘可见且活动),当然根据轮询时间间隔,甚至在调用 onTimeTick 时看到它们在环境模式下更新,如果我正在调试表盘(通过 usb 或蓝牙)。

一旦我断开调试器并且表盘进入环境模式,广播接收器似乎就停止接收消息了。

我做错了什么?对此我真的很沮丧。

AndroidOS会在后台Service处理完后杀掉一个后台;这是其生命周期的基础。您可以在 the documentation.

中阅读更多相关信息

对于您的用例,您可能想要设置一个 BroadcastReceiver,并在 AlarmManager.setExactAndAllowWhileIdle() 的轮询间隔触发它。将它滚动到现有的 BroadcastReceiver 中可能是有意义的,你已经在你的 WatchFaceService 子类中,或者你可能想创建一个新的来替换你的轮询 Service.

此外,我不知道您轮询的频率如何,但在手表处于睡眠状态时过于频繁地进行轮询可能会对电池寿命产生重大影响。只是要记住一些事情;当手表休眠一段时间后,你可能想做一些类似逐渐降低频率的事情。