【问题标题】:My widget sometimes doesn't receive the ACTION_BATTERY_CHANGED intent我的小部件有时没有收到 ACTION_BATTERY_CHANGED 意图
【发布时间】:2011-05-30 19:40:18
【问题描述】:

晚上好, 我写了一篇关于如何编写小部件以在 Android 上显示电池电量的教程,但我发现我的小部件并不总是与“关于手机>状态”屏幕中显示的内容保持同步。我已经安装了一个闭源小部件,以查看它是否始终与“官方”值同步,并且确实如此。

你可以在这里https://github.com/hmrocha/Batteroid访问完整的代码和这里的教程http://androidappdev.org/2011/05/29/androidappdev-batteroid/

出于我的问题的目的,我将在此处发布我的 onReceive 方法,以便您查看问题是否存在:

public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
        Integer level = intent.getIntExtra("level", -1);
        this.views.setTextViewText(R.id.battery_level, level.toString());
        ComponentName cn = 
            new ComponentName(context, BatteroidAppWidgetProvider.class);
        AppWidgetManager.getInstance(context).updateAppWidget(cn, this.views);
    }
    super.onReceive(context, intent);
}

我真的不知道为什么它会在一段时间后停止获取 ACTION_BATTERY_CHANGED 意图。它停止的值是完全随机的,所以调试起来简直就是一场噩梦。

提前感谢您的帮助。

【问题讨论】:

    标签: java android android-widget


    【解决方案1】:

    在 Intent.ACTION_POWER_DISCONNECTED 中意外记录了 ACTION_BATTERY_CHANGED 接收器仅在运行时接收通知,但在 ACTION_BATTERY_CHANGED 部分中未提及。因此,如果您的接收器未连接到正在运行的进程,它将不会接收广播。如果您不希望有一个或多或少永久运行的进程,那么您可以像许多 App Widget 一样按计划更新,但这当然会导致电池电量变化和显示更新之间的潜在和可能的延迟,因为你已经看到了。

    有开源电池小部件应用程序,包括GeekYouUp's Battery WidgetSergej Shafarenka's Quick Battery

    我在http://programmerbruce.blogspot.com/2011/05/fixing-geekyouups-battery-widget.html 发布了对 GeekYouUp 电池小部件的更正和解释。

    【讨论】:

    • 那么,您的建议是我应该有一个与我的 AppWidgetProvider 相关联的配置活动,例如,让我更改数字的颜色,以便我始终附加一个进程?
    • 没有。我看不出配置活动有什么帮助。只要用户运行活动,这将提供一个正在运行的进程。以 GeekYouUp 的 Battery Widget 源代码为例。阅读我在博客中发布的说明。
    • 非常感谢您的帮助。解决方案是拥有一个不间断的服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    相关资源
    最近更新 更多