12

我有一个Activity我正在BroadcastReceiver本地注册的一个,如下所示:

public class SomeActivity extends Activity{

    public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";

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

        .....
        .....

        IntentFilter filter = new IntentFilter();
        filter.addAction(PERFORM_SOME_ACTION);

        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // perform some action ...
            }
        };

        registerReceiver(receiver, filter);
    }

    .....
    .....
}

我有一个Service广播Intent如下:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {        

    Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
    sendBroadcast(i);   /* Send global broadcast. */

    return START_STICKY;
}

这按预期工作。在实现了这个之后,我意识到本地广播更适合这种情况:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {        

    Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
    LocalBroadcastManager.getInstance(this).sendBroadcast(i);   /* Send local broadcast. */

    return START_STICKY;
}

不幸的是,上述方案不起作用。每次都发送全局广播,而显然从未发送/接收本地广播。

我在这里想念什么?本地广播不能在两个不同的应用程序组件之间发送,比如两个单独Activity的 s 或从 aService到 aActivity吗?我究竟做错了什么??

笔记:

根据文档,发送本地广播(范围仅限于应用程序自己的组件的应用程序内广播)而不是全局广播传输到手机上的每个应用程序)只要我们不需要广播在应用程序之外传播。这就是进行上述更改的原因。

4

1 回答 1

22

我在这里想念什么?

用于LocalBroadcastManager注册LocalBroadcast,目前使用registerReceiverActivity的方法注册全局Broadcast:

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);
于 2016-08-26T05:09:03.583 回答