在我的AndroidManifest.xml中,我有以下内容......
<service
android:name=".MyIntentService" >
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />"
<action android:name="com.mycompany.myapp.TEST" />
</intent-filter>
</service>
<receiver
android:name=".MyNetworkMonitor" >
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />"
</intent-filter>
</receiver>
理想情况下,当Wi-Fi或移动互联网服务改变状态时,我希望IntentService“唤醒”并解释系统广播的意图......但事实并非如此。
然而,BroadcastReceiver确实收到了Intents,我可以让它发送一个广播意图(com.mycompany.myapp.TEST
)来唤醒我的IntentService并告诉它网络状态发生了变化。
所以问题是,为什么我的IntentService不会从系统意图广播唤醒通知网络状态变化,但它将从我的BroadcastReceiver的广播唤醒。困惑。
编辑:这是您在接近凌晨5点(oops)尝试编码时获得的结果。出于某种原因,我认为com.mycompany.myapp.TEST
意图是作为广播工作。
我实际做的是Intent i = new Intent ("com.mycompany.myapp.TEST")
然后使用startService(i)
因为<intent-filter>
条目而工作(即使没有在Intent中明确指定MyIntentService.class
)。这就是令人困惑的问题。
答案 0 :(得分:5)
您可以将Intent
消息总线视为具有三个通道:
这三个渠道完全相互独立。您不能让服务接收广播,就像您在此处尝试的那样,只要您可以让服务接收启动活动Intent
。
请从服务中删除<intent-filter>
。然后,在广播到达时,在您的服务上BroadcastReceiver
拨打startService()
(使用new Intent(context, MyIntentService.class)
)。