【问题标题】:IntentService not receiving network state change intentsIntentService 未接收到网络状态更改意图
【发布时间】:2011-04-18 04:17:12
【问题描述】:

在我的 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>

理想情况下,我希望 IntentService 在 wi-fi 或移动互联网服务更改状态时“唤醒”并解释系统广播的 Intent....但它没有。

但是,BroadcastReceiver 确实收到了 Intent,我可以让它发送一个广播 Intent (com.mycompany.myapp.TEST) 来唤醒我的 IntentService 并告诉它网络状态发生了变化。

所以问题是,为什么我的 IntentService 不会从通知网络状态变化的系统意图广播中唤醒,但它会从我的 BroadcastReceiver 的广播中唤醒。困惑。

编辑:这就是你在凌晨 5 点(哎呀)尝试编码的结果。出于某种原因,我认为 com.mycompany.myapp.TEST 意图正在作为广播工作。

我实际上在做的是Intent i = new Intent ("com.mycompany.myapp.TEST"),然后使用startService(i),这是因为&lt;intent-filter&gt; 条目(即使没有在意图中明确指定MyIntentService.class)。这就是令人困惑的问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    您可以将Intent 消息总线视为具有三个通道:

    • 您可以开始活动
    • 您可以启动或绑定到服务
    • 您可以发送广播

    这三个渠道完全相互独立。你不能让服务接收广播,就像你在这里尝试做的那样,你不能让服务接收启动活动Intent

    请从服务中删除&lt;intent-filter&gt;。然后,当广播到达时,让您的BroadcastReceiver 在您的服务上调用startService()(使用new Intent(context, MyIntentService.class))。

    【讨论】:

    • 感谢您澄清我无法通过广播启动服务。请在我的问题结束时查看我的编辑,了解我为什么感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多