也许这很容易,但到目前为止我还无法真正弄清楚这一点......我有一个 BroadcastReceiver 等待被 AlarmMangager 触发 - 这工作正常。

现在:因为该事件(如果发生)需要刷新主 Activity 屏幕上的一些元素,我想从后台 BroadcastReceiver 向我的 Activity 发送一个 Intent - 但只有 如果它当前位于前台,也称为活动状态。

如果它没有运行或不可见,我不在乎 - 我想做的最后一件事就是按照我的意图启动活动!我在 onResume() 方法中处理视图的重新绘制,所以我根本不在乎。

关于如何做到这一点有任何提示吗?谢谢!

编辑: 我的广播接收器正在等待必须通知用户的警报。因此,它必须存在并在清单中声明。问题是:它必须决定所提到的 Activity 当前是否位于前面。

有帮助吗?

解决方案

所以这几乎是比诺的答案,但是:不要将接收器移动到活动中,而是使用两个具有不同意图的接收器。第一个是您的原始警报意图,在清单中注册了一个接收器,就像您已经拥有的一样,然后该接收器发送第二个广播意图,该接收器由活动注册的接收器处理,如 Bino 所说。

我已经在 github 上自己的计时器项目中完成了此操作。这里有 报警接收器重新查询接收者. 。希望有帮助。

其他提示

我相信你熟悉AlarmManager现在(创建一个新的警报,注册一个接收器...),所以我不会谈论这一点。只要给你的问题的解决方案。

而不是在一个类文件,并在清单中注册广播接收器,你只能在你的活动创建一个新的广播接收器,然后在的onResume方法注册,并在onPause方法注销它,某事像这样在你的活动:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //do something       
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("your alarm action");
    ...
}

@Override
protected void onResume() {
registerReceiver(mIntentReceiver, mIntentFilter);
    ...
super.onResume();
}

@Override
protected void onPause() {
unregisterReceiver(mIntentReceiver);
    ...
super.onPause();
}

在接收器将只接收报警意图当你的活性在前景:)

(很抱歉,如果我的英语不明确)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top