如何在其他任何正在运行时监视连接更改

时间:2011-06-25 17:30:59

标签: android

我有几个定时器从互联网上查询信息。当我尝试这样做时出错,我检查网络连接,如果它不可用,那么我停止计时器。我的问题是,当网络再次可用时,我想重新启动计时器。

问题在于,如果网络消失并且长时间没有回来,那么我的应用程序中运行的每个部分现在都已被杀死了。我的问题是......我在哪里创建我的网络连接更改接收器,以便它始终能够响应这些事件?显然不在活动中。

我最初将它放在扩展的Application类中。我不确定这是否正确,我现在发现,即使这样也会消失,但只要你的应用程序的某些部分被利用,就会再次创建。那还是正确的地方吗?

我也有点困惑......我曾想过创建一个独立的接收器类来监控网络变化,然后在有连接消息的情况下重启计时器。但后来我想......什么会实例化呢?如果什么也没做,那它将如何运作?但同样的问题则转到我的OnBootReceived类....我没有做任何事情来实例化该类并注册它,但它仍然有效! (除了将它放在AndroidManifest和BOOT_COMPLETED意图过滤器中)。那种接收器特别吗?我尝试使用我的网络更改接收器做同样的事情,但它从未响应任何网络更改。当我最终把它放在我的应用程序类中,实例化它并注册它时,它就收到了广播。

我有代码,但这是一个与代码无关的问题。我正在努力清理我的代码所在的位置。如果我过了那个但它仍然不起作用,我可以发布它。

所以,我几乎理解。如果我在代码中只执行此操作,在连接状态发生变化时是否会收到消息?因为如果是这样,我接收任何,这就是我所拥有的。

或者我是否需要在启动时以某种方式注册?该视频提到使用清单意图过滤器在您的应用程序未运行时获取更新,但未显示是否仍需要以某种方式在某处注册(如果您注册,则不是您注册实例,如果所以,当你注册它的任何对象消失时,那个实例不会消失吗?)

代码:

public class NetworkConnectivityReceiver extends BroadcastReceiver {

    Context context;

    @Override
    public void onReceive(Context context, Intent intent) {



        Log.d(TAG, "Connection message received.");

    }

}


    <receiver android:name=".NetworkConnectivityReceiver" >
        <intent-filter>
            <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION"></action>
        </intent-filter>
    </receiver>

1 个答案:

答案 0 :(得分:1)

看一下google io 2011下面的视频,它大约28分钟就会涵盖连接变化,并在我这样做的时候帮了我很多。

http://youtu.be/twmuBbC_oB8

您可能需要使用Intent来监控连接更改,在连接更改时设置广播的待处理意图,然后设置广播接收器来处理更改。 (视频显示类似但位置变化大约22分钟)