Android – 无法通过服务接收我的活动中的本地广播

我有我的主要活动,即启动服务(位置服务),我希望每次找到新位置时,该服务都会广播新位置。

由于日志我知道服务正在运行,我每隔几秒就有新的位置,但我从来没有得到广播。

MainActivity.java

public class MainActivity extends Activity { private static final String TAG = "mainActivity"; private CMBroadcastReceiver mMessageReceiver = new CMBroadcastReceiver(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { // Start Service startService(new Intent(this, LocationService.class)); super.onCreate(savedInstanceState); } @Override public void onResume() { LocalBroadcastManager.getInstance(this).registerReceiver( mMessageReceiver, new IntentFilter(CMBroadcastReceiver.RECEIVE_LOCATION_UPDATE)); super.onResume(); } @Override public void onPause() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); super.onPause(); } } 

CMBroadcastReceiver.java

 public class CMBroadcastReceiver extends BroadcastReceiver { private static final String TAG = "CMBroadcastReceiver"; public static final String RECEIVE_LOCATION_UPDATE = "LOCATION_UPDATES"; @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "Received broadcast"); String action = intent.getAction(); if (action.equals(RECEIVE_LOCATION_UPDATE)) { Log.i(TAG, "Received location update from service!"); } } } 

LocationService.java

 /** * Callback that fires when the location changes. */ @Override public void onLocationChanged(Location location) { mCurrentLocation = location; mLastUpdateTime = DateFormat.getTimeInstance().format(new Date()); Log.i(TAG, "onLocationChanged " + location); Intent intent = new Intent(CMBroadcastReceiver.RECEIVE_LOCATION_UPDATE); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); Log.i(TAG, "Broadcast sent"); } 

AndroidManifest.xml中

       android:configChanges="orientation|screenSize">        

我的日志我可以看到“广播发送”但我从来没有得到“广播收到”

任何帮助将不胜感激。

编辑:

编辑Shaishav建议如何在位置服务中创建意图。

仍然无法正常工作。

LocalBroadcastManager不适用于进程。 您的Service在单独的进程中运行。

您可以在与Activity相同的过程中运行Service – 通过从元素中删除process属性 – 或者使用某种类型的IPC – 例如,通过在Context而不是LocalBroadcastManager上发送和接收广播。

在您的LocationService ,使用以下命令发送本地广播:

 Intent intent = new Intent(CMBroadcastReceiver.RECEIVE_LOCATION_UPDATE); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
  

您的服务与活动分开。 LocalBroadcastManager仅用于一个进程。 从删除android:process ,或者使用一些IPC机制(例如,系统广播,正确保护)。