【问题标题】:Keep widget BroadcastReceiver alive even if not instantiated from Manifest即使没有从 Manifest 实例化,也保持小部件 BroadcastReceiver 处于活动状态
【发布时间】:2010-11-29 12:28:46
【问题描述】:

我有一个需要监听 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);
}

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

我做错了什么?这是更新小部件的正确方法吗(我只需要那个事件,所以如果不需要它我不想拥有服务)。我应该不时使用 AlarmManager 来确保我的接收器还在吗?我可以这样做吗?

谢谢。

【问题讨论】:

    标签: android widget broadcastreceiver battery intentfilter


    【解决方案1】:

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

    【讨论】:

    • 是的,这是我迄今为止为避免这种情况而实施的解决方案,但是我需要一个 4-5 分钟的计时器来执行此操作,而且它不是那么干净,因为即使小部件接收器是它也会运行仍然,我希望有一个更好的解决方案,无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多