AppWidgetProvider - 在小部件中跟踪用户位置

Posted

技术标签:

【中文标题】AppWidgetProvider - 在小部件中跟踪用户位置【英文标题】:AppWidgetProvider - Tracking User Location in a Widget 【发布时间】:2017-12-28 13:31:06 【问题描述】:

我刚刚开始了解 android 小部件生命周期的工作原理,而且它似乎几乎是事件驱动的(广播驱动)。没有真正的持久会话;您的小部件在更新期间被唤醒,您需要更新小部件的视图。

我可以猜到这个问题的答案,但是我可以在小部件中跟踪用户位置吗?如果我正确理解了生命周期,我在 LocationRequest 类中注册的回调将不起作用很久以来,我使用的课程将被垃圾收集。我唯一的选择是在更新期间获取一次位置。

框架允许最大(或最小)30 分钟的更新间隔。这是否意味着用户必须等待 30 分钟才能看到更新的位置?有什么解决方法吗?

谢谢。

【问题讨论】:

【参考方案1】:

您的小部件在更新期间被唤醒,您应该更新小部件的视图

欢迎您随时使用AppWidgetManager 更新应用小部件的RemoteViews。如果需要,更新机制只是一种安排定期更新的方法。

我可以在小部件中跟踪用户位置吗?

不直接。应用小部件是RemoteViews;它没有逻辑。 AppWidgetProviderBroadcastReceiver 的子类,您无法在其中轻松执行异步、可能很长的操作。

我唯一的选择是在更新期间获取一次位置。

没有。您唯一的可靠选项是启动服务并让它获取位置数据,根据需要更新应用小部件。

请注意,持续监控位置会消耗电池电量,这也是在 Android 8.0+ 上减少后台位置更新的原因之一。

【讨论】:

非常清楚,感谢@CommonsWare。最后一个问题:关于 AppWidgetManager 的任何指针?是否可以从我的应用程序中更新我的小部件? 此外,任何关于“启动服务”的指针也会很棒。只需一个类名或文档就足够了。 @Guven:“是否可以从我的应用程序中更新我的小部件?” - 是的。 Use updateAppWidget()。 “任何关于‘启动服务’的建议也很棒”——Service 包含在 the documentation 和任何关于 Android 应用程序开发的体面书籍中。

以上是关于AppWidgetProvider - 在小部件中跟踪用户位置的主要内容,如果未能解决你的问题,请参考以下文章

在 AppWidgetProvider 中执行 UnregisterReceiver() 时出错

在从 AppWidgetProvider 调用的异步任务中将字符串分配给文本值

桌面小部件AppWidgetProvider简单分析

Android 桌面小部件(AppWidgetProvider)的应用

在不同的包名称下移动 AppWidgetProvider 会破坏活动的小部件

Check Widget放置在Android屏幕上