晚上好, 我写了一个关于如何编写小部件以在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意图。它停止的值是完全随机的,因此调试是一场噩梦。
感谢您的帮助。
答案 0 :(得分:2)
ACTION_BATTERY_CHANGED接收器仅在Intent.ACTION_POWER_DISCONNECTED中意外记录时才会在运行时收到通知,但在ACTION_BATTERY_CHANGED部分中未提及。因此,如果您的接收器未连接到正在运行的进程,它将不会接收广播。如果您不想拥有一个或多或少的永久运行进程,那么您可以像许多应用程序小部件一样按计划更新,但当然这会导致电池级别更改和显示更新之间的潜在和可能的延迟,如你已经看到了。
有开源电池小部件应用,包括GeekYouUp's Battery Widget和Sergej Shafarenka's Quick Battery。
我在http://programmerbruce.blogspot.com/2011/05/fixing-geekyouups-battery-widget.html发布了GeekYouUp电池小部件的更正和解释。