即使没有从Manifest实例化,也要保持widget BroadcastReceiver存活

时间:2010-11-29 12:28:47

标签: android widget broadcastreceiver battery intentfilter

我有一个需要监听BATTERY_CHANGED事件的小部件,但是,由于此事件受到保护且无法从清单声明,我从Application构造函数创建一个新的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);
}

然后,从Receiver我调用AppWidgetProvider的静态方法,它实际上使用RemoteViews更新小部件。一切都完美无缺,直到1小时过去,之后我的接收器消失,小部件不再更新。我正在使用2.2.1固件的Droid进行测试 -

我做错了什么?这是更新窗口小部件的正确方法(我只需要该事件,因此如果不需要,我不想拥有服务)。我应该使用AlarmManager来确定我的接收器仍然存在吗?我可以这样做吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我不知道为什么你的接收器在一小时后丢失但是如果使用AlarmManager定期检查它是否仍在那里呢?因此,如果丢失,您可以重新注册。