【问题标题】:Update android widget on condition根据条件更新 android 小部件
【发布时间】:2010-08-09 17:21:36
【问题描述】:

我刚开始进行 android 开发并编写了一个应用程序来显示有关电池状态的详细信息。 现在我想把整个东西放到一个小部件中——这就是问题所在: 我真的需要在后台更新服务来监听 ACTION_BATTERY_CHANGED 意图吗?我的第一个想法是放一个 进入 AndroidManifest.xml 中小部件的 intet-filter 标记 - 但显然它不是那么简单。 如果 UpdateService 是正确的方法,我会这样做 - 但我只是想确定正确的解决方案是什么

【问题讨论】:

    标签: android widget android-appwidget onupdate


    【解决方案1】:

    我真的需要更新服务吗 聆听的背景 ACTION_BATTERY_CHANGED 意图?

    您不能将清单注册的BroadcastReceiver 用于ACTION_BATTERY_CHANGED。它只能由活动或服务通过registerReceiver()注册。

    如果由于其他原因在内存中没有服务,更好的方法是轮询。设置AlarmManager 以每隔一段时间检查一次电池电量(请配置!)。要检查电池电量,请调用registerReceiver() 获取ACTION_BATTERY_CHANGED IntentFilter 而不使用BroadcastReceivernull 用于第一个参数)。这将返回最后一次广播ACTION_BATTERY_CHANGEDIntent,您可以从中获取最新的电量。

    【讨论】:

      【解决方案2】:

      我建议您定期轮询电池状态,例如每 30 分钟为此,您只需在 AppWidgetProviderInfo 中为 updatePeriodMillis 指定一个值

      <appwidget-provider
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:updatePeriodMillis="1800000" />
      

      ..并通过覆盖 AppWidgetProvideronUpdate 方法来更新您的小部件。

      edit:正如 Martin 所指出的,30 分钟实际上是您可以通过这种方式接收更新的最短时间间隔。

      【讨论】:

      • 谢谢 - 但这将限制在至少 30 分钟,因为这是 updatePeriodMillis 的最小值,不是吗?
      • 你是对的!这很有趣,因为这种限制并非一直存在 (android.git.kernel.org/?p=platform/frameworks/…)
      • 我推测它是因为程序员使用它来进行频繁更新(就像时钟小部件每秒更新一次)——这对电池寿命来说可能不是一件好事
      【解决方案3】:

      信不信由你,以下工作:

      cont.getApplicationContext().registerReceiver(rec, filter);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 2012-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多