Ok, quindi sto lavorando ad un AppWidget che controlla il livello della batteria e lo visualizza su un TextView. Il mio codice è simile al seguente:ACTION_BATTERY_CHANGED sparando come un matto
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));
}
}
}
e sto ottenendo preoccupato perché non appena mi cade il widget sul mio homescreen comincia sparando circa 100 di quelli Log chiama un secondo, dicendo che sta ricevendo ACTION_BATTERY_CHANGED. Questo non dovrebbe essere trasmesso solo per ogni diminuzione percentuale? In realtà ha causato il ritardo dell'intero programma di avvio, ho dovuto disinstallarlo. Non può essere giusto.
Non so davvero nulla su questo, ma vale la pena creare un servizio per monitorare la batteria e inviarlo al Widgit ad intervalli predefiniti? – mAndroid