连接变更接收器在启动后存活/启动?

时间:2012-06-05 09:26:55

标签: android connectivity bootcompleted

我有一个简单的广播接收器,可以监听连接的变化,如果网络可用,它会设置一个重复的警报,启动一个短暂的服务。如果没有网络连接,它将禁用重复发生的警报:

public class ConnectivityChange extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(getClass().getName(), "Connectivity changed! :/");

        MyApplication app = (MyApplication ) context
                .getApplicationContext();


        if (app.isConnected()) {
            // setup repeating alarms, since we are connected.
            app.setCurrencyRatesServiceRepeatingAlarm(context);
            Log.d(getClass().getName(), "Connected :D");
        } else {
            // cancel any repeating alarm, since we are NOT connected.
            app.unsetCurrencyRatesServiceRepeatingAlarm(context);
            Log.d(getClass().getName(), "Not connected :(");
        }


    }

}

清单看起来像:

<receiver android:name="ConnectivityChange">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter> 
</receiver>

所有这些都很好。

但是,即使重新启动模拟器后,此代码似乎仍然运行。我不是要求BOOT_COMPLETE。我确保我没有从快照恢复模拟器。这是预期的行为吗?我不确定这是记录在哪里。当我遇到这个时,我正要求BOOT_COMPLETE。

2 个答案:

答案 0 :(得分:1)

我知道这是一个有点老问题,但我认为无论如何我都要权衡。每次启动时,您的连接很可能会发生变化,例如设备从无连接变为连接。因此,每次设备启动时,您的代码都会运行。

答案 1 :(得分:0)

您可以注册一个BOOT_COMPLETED广播接收器,即使未作为权限请求RECEIVE_BOOT_COMPLETED,也会获得控制权。

该Bug已经报告here

即使您可以查看this SO帖子