急问,从IntentService往Fragment发广播消息,怎么收不到呢?

charlesxu 2015-05-20 09:53:31
在IntentService里发消息,调试能够进去

Intent intent_pop = new Intent("com.wei.geofencing.GeofenceIntentService");
intent_pop.putExtra("msg", "Entered");
LocalBroadcastManager.getInstance(this.getApplicationContext()).sendBroadcast(intent);


在Fragment里直接写了个BroadcastReceiver,不用在配置文件里配置了。但是onReceive方法死活不调用

public class Tab_Results extends Fragment {
private final BroadcastReceiver mEnterZoneReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent){
if(intent.getAction().equals("com.wei.geofencing.GeofenceIntentService")){
System.out.println("OK");
Toast.makeText(getActivity(), "Enter Zone", Toast.LENGTH_SHORT).show();
}
}
};
@Override
public void onStart() {
super.onStart();
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.wei.geofencing.GeofenceIntentService");
broadcastManager.registerReceiver(mEnterZoneReceiver, intentFilter);
}

@Override
public void onStop() {
LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mEnterZoneReceiver);
super.onStop();
}
}


是不是Service和Fragment要放在同一个包,或不同的包都不行。
在Service里发消息用this.getApplicationContext()这个上下文,收消息用的fragment里的getActivity(),这样没问题吧。

还有人说是service要配置到主进程里,比如下面这样,也不行。
<service
android:name="com.media.ffmpeg.ffmpegService"
android:enabled="true"
android:process="com.media.ffmpegservice">
</service>
...全文
264 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_22603467 2015-05-26
  • 打赏
  • 举报
回复
!!!太感谢了
charlesxu 2015-05-23
  • 打赏
  • 举报
回复
引用 3 楼 Aria_zuo 的回复:
   broadcastManager.registerReceiver(mEnterZoneReceiver, intentFilter);    直接写成 context..registerReceiver(mEnterZoneReceiver, intentFilter);   ,这个context就是你的getActivity();
谢谢啊!按一楼的方法做出来了,你说的也没错。分就一人一半吧。
charlesxu 2015-05-20
  • 打赏
  • 举报
回复
引用 1 楼 liyuanjinglyj 的回复:
我想说,可能是安卓已经抛弃了这个本地广播。我也试过了,不调用,但换成context直接注册就调用。
怎么换成context直接注册?没明白。。。
李元静 2015-05-20
  • 打赏
  • 举报
回复
我想说,可能是安卓已经抛弃了这个本地广播。我也试过了,不调用,但换成context直接注册就调用。
Aria_zuo 2015-05-20
  • 打赏
  • 举报
回复
   broadcastManager.registerReceiver(mEnterZoneReceiver, intentFilter);    直接写成 context..registerReceiver(mEnterZoneReceiver, intentFilter);   ,这个context就是你的getActivity();

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧