Android 保持小部件BroadcastReceiver处于活动状态,即使未从清单中实例化

Android 保持小部件BroadcastReceiver处于活动状态,即使未从清单中实例化,android,widget,broadcastreceiver,battery,intentfilter,Android,Widget,Broadcastreceiver,Battery,Intentfilter,我有一个小部件需要侦听BATTERY_CHANGED事件,但是,由于此事件受保护,无法从清单中声明,因此我从应用程序构造函数创建了一个新的BroadcastReceiver: public void onCreate() { super.onCreate(); if (DEBUG) Log.d(TAG, "onCreate()"); // Register receivers if (receiver == null) { rece

我有一个小部件需要侦听BATTERY_CHANGED事件,但是,由于此事件受保护,无法从清单中声明,因此我从应用程序构造函数创建了一个新的BroadcastReceiver:

public void onCreate() {
    super.onCreate();
    if (DEBUG) Log.d(TAG, "onCreate()");
    // Register receivers        
    if (receiver == null) {
        receiver = new MYReceiver(this);
    }
    // Create new intentfilter
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(receiver, intentFilter);
}
然后,从接收器调用AppWidgetProvider的静态方法,该方法实际使用RemoteView更新小部件。直到一个小时过去,一切都正常工作,此后我的接收器消失,小部件不再更新。我正在用2.2.1固件的Droid上测试这个-

我做错了什么?这是更新小部件的正确方法吗?我只需要那个事件,所以如果不需要服务,我就不想要它。我是否应该使用AlarmManager来确保我的接收器仍在那里?我能做这个吗


谢谢。

我不知道为什么你的接收器在一个小时后丢失了,但是用它定期检查它是否还在那里怎么样?如果它丢失了,你可以重新注册

我不知道为什么你的接收器在一个小时后丢失了,但是用它定期检查它是否还在那里怎么样?如果它丢失了,你可以重新注册

是的,这是我到目前为止为避免这种情况而实施的解决方案,但是我需要一个4-5分钟的计时器来完成这项工作,它不是很干净,因为即使小部件接收器仍然打开,它也会运行,我希望有更好的解决方案,无论如何,谢谢。是的,这是我到目前为止为避免这种情况而实施的解决方案,然而,我需要一个4-5分钟的计时器来完成这项工作,它不是那么干净,因为即使小部件接收器仍然打开,它也会运行,我希望有更好的解决方案,无论如何,谢谢。