gpt4 book ai didi

Android:从 BroadcastReceiver 事件发送 LocalBroadcastManager 的 Intent

转载 作者:太空狗 更新时间:2023-10-29 15:38:32 26 4
gpt4 key购买 nike

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

从 activity|service 发送相同 Intent 的“ self 测试”- 有效。

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


服务定义为:

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

在役:

 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);

}
...

在 list 中:

    <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");
}
}
}

--

主要问题似乎是Should I use android: process =":remote" in my receiver? ; 但是我仍然不确定为什么 MainActivity 的接收器没有更早地工作,也许完全限定的名称是必须的

最佳答案

LocalBroadcastReceiver文档说明它是一个

Helper to register for and send broadcasts of Intents to local objects within your process

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

关于Android:从 BroadcastReceiver 事件发送 LocalBroadcastManager 的 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21036159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com