好的,我正在开发一个可以检测电池电量并将其显示在TextView上的AppWidget。我的代码如下所示:
public class BattWidget extends AppWidgetProvider {
private RemoteViews views = new RemoteViews("com.nickavv.cleanwidgets", R.layout.battlayout);
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) {
final int N = appWidgetIds.length;
context.getApplicationContext().registerReceiver(this,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
Log.d("onReceive", "Received intent " + intent);
if (intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {
Integer level = intent.getIntExtra("level", -1);
views.setTextViewText(R.id.batteryText, level+"%");
AppWidgetManager myAWM = AppWidgetManager.getInstance(context);
ComponentName cn = new ComponentName(context, AirWidget.class);
onUpdate(context, myAWM, myAWM.getAppWidgetIds(cn));
}
}
}我开始担心了,因为一旦我把小工具放到我的主屏幕上,它就开始每秒发出大约100个这样的日志呼叫,说它正在接收ACTION_BATTERY_CHANGED。这不是应该在每减少一个百分比的情况下才广播吗?它实际上导致了我的整个启动程序延迟,我必须卸载它。这是不对的。
发布于 2011-10-02 20:25:46
我的代码如下所示:
您无法从另一个BroadcastReceiver注册BroadcastReceiver并获得可靠的结果。Android会终止你的进程,因为它不认为有任何东西在运行。侦听ACTION_BATTERY_CHANGED的唯一方法是从活动或服务注册该接收器。
不是应该每减少一个百分比就广播一次吗?
你在哪里看到这方面的文档?AFAIK,ACTION_BATTERY_CHANGED将在任何硬件需要的时候进行广播。此外,请记住,该Intent中的其他数据也会发生变化,例如温度。
如果您想实现此应用程序小部件,请不要以这种方式注册ACTION_BATTERY_CHANGED。而是:
SharedPreference选择轮询周期(例如,每分钟一次,每15分钟一次)AlarmManager通过getBroadcast() BroadcastReceiver为您提供对该轮询周期的控制,但使用<代码>e224 PendingIntentIntent (注意:您仍需要使用getApplicationContext()完成此操作)AppWidgetManager更新您的应用程序小部件实例,电池电量来自上一步中检索到的Intent (注意:如果您将它们都设置为相同,则不需要遍历IDs -使用接受ComponentName作为参数的ComponentName)<代码>F239
这有几个优点:
应用程序用户可以通过执行这些检查来控制您的耗电量(如果您将轮询时间保持在一分钟或更长时间,则可以忽略不计)
的可能性
发布于 2017-05-31 09:02:13
好的,你的onUpdate正在注册它自己的类作为batteryinfo意图的接收者。然后,对于第一个信息,该意图被立即触发。您的onReceive再次呼叫您的onUpdate。我们称之为循环。因此每秒有100个日志...
https://stackoverflow.com/questions/7624882
复制相似问题