开发者

IntentService not receiving network state change intents

In my AndroidManifest.xml I have the following...

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

Ideally I'd like the IntentService to 'wake' and interpret the Intent(s) broadcast by the system when either the wi-fi or mobile internet services change state....but it doesn't.

The Broadcas开发者_开发知识库tReceiver does receive the Intents, however, and I can get it to send a broadcast intent (com.mycompany.myapp.TEST) to wake my IntentService and tell it there has been a change in network state.

So the question is, why won't my IntentService wake from the system intent broadcasts informing of network state change but it will wake from a broadcast from my BroadcastReceiver. Confused.

EDIT: This is what you get for trying to code at nearly 5am (oops). For some reason I thought the com.mycompany.myapp.TEST intent was working as a broadcast.

What I'm actually doing is Intent i = new Intent ("com.mycompany.myapp.TEST") and then using startService(i) which works because of the <intent-filter> entry (even without explicitly specifying MyIntentService.class in the Intent). This is what was confusing the issue.


You can think of the Intent message bus as having three channels:

  • You can start an activity
  • You can start or bind to a service
  • You can send a broadcast

These three channels are completely independent of one another. You cannot have a service receive a broadcast, as you are trying to do here, any more than you can have a service receive a start-activity Intent.

Please delete the <intent-filter> from the service. Then, have your BroadcastReceiver call startService() on your service (using new Intent(context, MyIntentService.class)) when the broadcast arrives.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜