Nic*_*ick 12 android battery broadcastreceiver android-appwidget
好的,所以我正在开发一个AppWidget来检查电池电量并将其显示在TextView上.我的代码看起来像这样:
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
而且我很担心,因为只要我将小部件放到我的主屏幕上,就会开始关闭大约100个这样的Log调用,说它正在接收ACTION_BATTERY_CHANGED.这不应该只为每减少百分比广播吗?它实际上导致我的整个发射器滞后,我不得不卸载它.这不可能是正确的.
Com*_*are 23
我的代码看起来像这样:
您无法BroadcastReceiver从另一个注册,BroadcastReceiver并获得可靠的结果.Android会终止你的进程,因为它认为没有任何东西在运行.监听的唯一方法ACTION_BATTERY_CHANGED是从活动或服务中注册该接收者.
这不应该只为每减少百分比广播吗?
你在哪里看到记录?ACTION_BATTERY_CHANGED只要硬件感觉如此,AFAIK 就会播出.另外,请记住其他数据会发生变化Intent,例如温度.
如果您想实现此应用小部件,请不要注册您ACTION_BATTERY_CHANGED的方式.代替:
SharedPreference(例如,每分钟一次,每15分钟一次)AlarmManager通过a来控制该轮询周期getBroadcast() PendingIntentBroadcastReceiver,呼吁registerReceiver()对ACTION_BATTERY_CHANGED 但有null广播接收器,因为这会回报给你的最后Intent这是该行动广播(注:你仍然需要使用getApplicationContext()这个)AppWidgetManager带有电池电量来更新您的应用程序控件实例拉出的Intent您在前面的步骤中检索(注:如果要设置他们都一样,你并不需要遍历的标识-使用updateAppWidget()的是需要a ComponentName作为参数)这有几个好处:
ACTION_BATTERY_CHANGED广播的频率| 归档时间: |
|
| 查看次数: |
5747 次 |
| 最近记录: |