Android:发送LocalBroadcastManager';广播接收者事件的意图

Android:发送LocalBroadcastManager';广播接收者事件的意图,android,android-intent,android-context,Android,Android Intent,Android Context,我遇到了一个奇怪的情况,意图接收者从service或MainActivity向LocalBroadcastManager注册,当意图从PHONE_STATE receiver(在AndroidManifest.xml中定义)发送时,从未收到 一个“自我测试”,从活动|服务-工作中发送相同的意图 是否值得尝试指定通过AndroidManifest.xml接收LocalBroadcastManager的意图 服务定义为: <service android:name=".Ap

我遇到了一个奇怪的情况,意图接收者从service或MainActivity向LocalBroadcastManager注册,当意图从PHONE_STATE receiver(在AndroidManifest.xml中定义)发送时,从未收到

一个“自我测试”,从活动|服务-工作中发送相同的意图

是否值得尝试指定通过AndroidManifest.xml接收LocalBroadcastManager的意图


服务定义为:

    <service
     android:name=".AppService"
     android:process=":remote">
      <intent-filter>
       <action android:name="me.cmp.app.AppService" />
      </intent-filter>
    </service>
在舱单中:

    <receiver android:name="me.cmp.app.PhoneReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" >
            </action>
        </intent-filter>
    </receiver>        
--

主要问题似乎是;然而,我仍然不确定为什么MainActivity的接收器没有在更早的时候工作,也许完全限定的名称是必须的。

文档说明它是一个

助手注册并向本地对象发送意图广播 在您的流程中


这意味着,如果您使用的服务运行在一个单独的进程中(例如
android:process=“:remote”
),则
LocalBroadcastManager
很可能会失败(尽管是无声的),因为您可能会得到该类的两个单独实例(每个进程一个).

发布每个广播发送的代码。当前代码不起作用(因此,完全限定的意向名称或sendBroadcastSync)都没有多大帮助。我看到的差异是,您的服务是
App
,而清单中有
AppService
。我会确保服务正在运行,但我会拿出
android:process=“:remote”
看看这是否有用。@A--c App/Appservice是一个输入错误;删除android:process=“:remote”成功了,你能回答这个问题吗?我看到了你的编辑,你说的
MainActivity的接收器之前没有工作是什么意思?
如果该服务是唯一的
remote
,那么
LocalBroadcasts
将无法按预期工作是有道理的
    <receiver android:name="me.cmp.app.PhoneReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" >
            </action>
        </intent-filter>
    </receiver>        
public class PhoneReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras != null) {
      Log.e("test", extras.getString(TelephonyManager.EXTRA_STATE));

      Intent intent2 = new Intent("me.cmp.app.statechange");
      intent2.putExtra("message", state.toString());
      LocalBroadcastManager.getInstance(context).sendBroadcastSync(intent2);
      Log.w("test", "Broadcast sent");
    }
  }
}