服务未收到活动的本地广播

时间:2016-08-26 05:02:08

标签: android android-service android-broadcast android-broadcastreceiver localbroadcastmanager

我有SKCropNode我在本地注册SKShapeNode,如下所示:

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?我做错了什么?

注意:

根据documentation,发送本地广播(范围受限制的 应用内 广播)更有效率更高效应用程序自己的组件)而不是全局广播( 跨应用程序 广播,只要我们不需要广播就可以传输到手机上的每个应用程序)在应用程序之外传播。这就是进行上述改变的原因。

1 个答案:

答案 0 :(得分:11)

  

我在这里缺少什么?

使用LocalBroadcastManager注册LocalBroadcast,当前使用Activity registerReceiver方法注册全局广播:

LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);