【问题标题】:Adding BroadcastReceiver to MainActivity is not working将 BroadcastReceiver 添加到 MainActivity 不起作用
【发布时间】:2015-05-20 20:59:37
【问题描述】:

在我的项目中,我有 2 个活动。从主要活动中,我将启动带有本机 VideoView 的第二个活动,并在 onCreate 方法中调用完成,以便我将在后台运行。但我想将更新发送回 MainActivity,例如暂停、启动、停止等。我发现 BroadcastReceiver 是解决此问题的最佳方法。这是我正在做的事情,但是 MainActivity 没有收到第二个 Activity 发送的广播,这是我的代码。

在 MainActivity.java 中,

BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        System.out.println("In onReceive");
    }
};
private IntentFilter filter = new IntentFilter("com.example.broadcast");

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    registerReceiver(broadcastReceiver, filter);
}

在第二个活动中,

Intent intent = new Intent("com.example.broadcast");
intent.putExtra("Status", status);
sendBroadcast(intent);

我做错了什么?

【问题讨论】:

  • 注册接收者如:LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, filter);
  • 很可能,当显示第二个 Activity 时,MainActivity 不活动。您在哪里取消注册接收器?
  • @bigdestroyer,我无法添加LocalBroadcastManager,因为它无法在 Android Studio 中解析。
  • @323go,当我在 2nd Activity 上调用 finish() 时,它正在显示 MainActivity,所以我认为 MainActivity 处于活动状态。
  • @Krish : Urrm,如果第二个 Activity 已使用 finish() 终止,它如何发送广播?

标签: android android-activity broadcastreceiver


【解决方案1】:

在您发送该广播的那一刻,第一个活动已暂停,因此无法接收。只有在您使用 finish() 终止第二个活动后,它才会恢复。

如果你想在后台计算一些东西,你可以使用Service

我不知道您为什么要在后台播放视频,但您可以将视图放在您的第一个活动中并将视图可见性设置为不可见。

(其实我刚才想到了一个原因,如果你能想到我的想法就好了)

【讨论】:

  • 如果我将视图的可见性设为不可见,视频还会播放吗?
  • 没试过,但我认为它会,因为它仍然存在。仅当您将其设置为“消失”时,它才会完全消失,然后我不确定它是否会继续。 “不可见” = 仍然存在,但你看不到它 “消失” = 不再存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2015-02-27
  • 2019-05-17
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多