Android:从BroadcastReceiver事件发送LocalBroadcastManager的意图

kag*_*san 2 android android-intent android-context

我遇到了一个奇怪的情况,即从服务或MainActivity向LocalBroadcastManager注册一个intent接收器,当从PHONE_STATE接收器发送intent(在AndroidManifest.xml中定义)时,它从未收到过.

从活动|服务发送相同意图的"自我测试" - 起作用.

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


服务定义为:

    <service
     android:name=".AppService"
     android:process=":remote">
      <intent-filter>
       <action android:name="me.cmp.app.AppService" />
      </intent-filter>
    </service>
Run Code Online (Sandbox Code Playgroud)

在服务中:

 public class AppService extends Service {
 @Override
 public void onCreate() {
        super.onCreate();
        LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("me.cmp.app.statechange"));

            // self-test uses same intent sending code:
            Intent intent2 = new Intent("me.cmp.app.statechange");
            intent2.putExtra("message", "selfsend");
            LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent2);

 }  
 ...
Run Code Online (Sandbox Code Playgroud)

在清单中:

    <receiver android:name="me.cmp.app.PhoneReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" >
            </action>
        </intent-filter>
    </receiver>        
Run Code Online (Sandbox Code Playgroud)

监听器:

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");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

-

主要问题似乎是我应该在我的接收器中使用android:process =":remote"吗?; 但是我仍然不确定为什么MainActivity的接收器没有提前工作,也许完全合格的名字是必须的.

A--*_*--C 11

LocalBroadcastReceiver文件指出,这是一个

帮助程序注册并向您的进程中的本地对象发送Intent广播

这意味着如果您正在使用在单独进程(例如android:process=":remote")中运行的服务,LocalBroadcastManager则很可能会失败(尽管是静默的),因为您可能正在获取此类的两个单独实例(每个进程一个).