Я сейчас пишу виджет батареи для Android.Но вот проблема, я зарегистрировал два BroadcastReceivers в моем сервисе.Я запускаю свой сервис с помощью метода onEnable () моего AppWidgetProvider и останавливаю его в onDisable ().Служба предназначена для прослушивания обновлений состояния батареи и изменения ориентации и уведомления виджета об обновлении себя путем отправки моего пользовательского намерения в мой AppWidgetProvider.Поскольку и широковещательная рассылка (battery_state_changed и configuration_changed) не может быть принята обычным AppWidgetProvider, а AppWidgetProvider не может зарегистрировать BroadcastReceivers сам по себе.
Все работает правильно в течение дня или двух.Но иногда виджет просто не обновлялся, когда менялось состояние батареи, кажется, что или приемник в моем сервисе не работал, или пользовательское намерение внезапно перестало успешно достигать моего AppWidgetProvider.
AnyИдея, почему это происходит?
package com.carllee.widgets.kittenbatterywidget;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
public class BatteryStateMoniterService extends Service {
private static final String TAG = "BatteryStateMoniterService";
private BatteryStateReceiver batteryStateReceiver;
private OrientationChangeReceiver orientationChangeReceiver;
@Override
public void onCreate() {
super.onCreate();
Logger.log(TAG, "onCreate");
}
@Override
public void onDestroy() {
super.onDestroy();
if (batteryStateReceiver == null) {
this.unregisterReceiver(batteryStateReceiver);
}
if (orientationChangeReceiver == null) {
this.unregisterReceiver(orientationChangeReceiver);
}
Logger.log(TAG, "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (batteryStateReceiver == null) {
registerBatteryStateReceiver();
}
if (orientationChangeReceiver == null) {
registerOrientationChangeReceiver();
}
Logger.log(TAG, "onStartCommand");
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void registerBatteryStateReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_BATTERY_LOW);
filter.addAction(Intent.ACTION_BATTERY_OKAY);
batteryStateReceiver = new BatteryStateReceiver();
this.registerReceiver(batteryStateReceiver, filter);
}
private void registerOrientationChangeReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
orientationChangeReceiver = new OrientationChangeReceiver();
this.registerReceiver(orientationChangeReceiver, filter);
}
}