Android-如何使用本地广播接收器?

7

我想使用本地广播接收器。

为此,我已经完成了以下步骤 -

1)在一个活动中,我想要发生某些事情,我创建了一个类 -

private class NewGroupReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("The group ", "GOT IN THE RECIVING");
        Toast.makeText(this, "Working",Toast.LENGTH_SHORT).show();  
    }

}

2)在同一活动中,我使用了以下代码来创建接收器 -

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    NewGroupReceiver receiver = new NewGroupReceiver();

    //the intent filter will be action = "com.example.demo_service.action.SERVICE_FINISHED"
    IntentFilter filter= new IntentFilter("com.example.apps.action.NEW_GROUP");

    // register the receiver:
    registerReceiver(receiver, filter);
}

3) 在一个服务类中,我使用了下面的代码来知道何时发生了某些事情 -

Intent resultsIntent=new Intent("com.example.apps.action.NEW_GROUP");

LocalBroadcastManager localBroadcastManager =LocalBroadcastManager.getInstance(this);

localBroadcastManager.sendBroadcast(resultsIntent);

现在的问题是,当我想知道的事情发生时,我看到它进入了我在第三步使用的代码,但似乎没有进入广播接收器 - 第一步的代码。

您有什么想法吗?我在这里做错了什么吗? 感谢任何形式的帮助。


由于您正在一个活动中,尝试通过上下文发送广播;this.sendBroadcast(resultIntent); - zgc7009
第三步的代码位于“Service”类中。 - 4this
应该仍然在服务中以那种方式工作。 - zgc7009
可能是如何使用LocalBroadcastManager?的重复问题。 - jww
1个回答

14
您正在使用 LocalBroadcastManager 发送请求,但是您在“全局”Intent上注册了接收器。您应该使用 LocalBroadcastManager 注册接收器或者在应用上下文中发送广播: 步骤2
LocalBroadcastManager.getInstance(this).registerReceiver (receiver, filter);

你能提供证明这是真的吗?也就是说,通过LocalBroadcastManager发送的广播不会被通过Context.registerReceiver()注册的BroadcastReceiver接收,即使该BroadcastReceiver在同一个应用程序中?我一直在寻找这方面的确认,但文档似乎并没有明确说明。 - LarsH
1
很遗憾,@LarsH,我没有这样的经验,但那是我在2014年的经历。 - JohnnyAW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接