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