NetworkAvailability检查返回false但手机已联机

时间:2010-07-19 18:19:54

标签: android android-networking connectivity

在检查网络是否可用时,我遇到了获得一致结果的问题。

我在AppPreferences类中使用此代码段来检查网络的可用性。

/**
     * @return the networkAvailable
     */
    public boolean isNetworkAvailable() {
        connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        networkAvailable = connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected();
        return networkAvailable;
    }

在每次运行之前,我将上下文设置如下:

timer.scheduleAtFixedRate(

                new TimerTask() {

                    public void run() {

                        appPreferences.setContext(getBaseContext());

                        if (appPreferences.isNetworkAvailable()){

                            // perform task

                        }

                    }
                },
                0,
                UPDATE_INTERVAL);

我知道它没有绑定到后台线程,因为我有一个onReceive调用做同样的逻辑,但仍然检查失败。

当它在蜂窝数据连接和wifi之间移动时,似乎主要发生,反之亦然。即使我更新它,它启动的上下文似乎仍然存在。

有谁知道这里有什么问题?

1 个答案:

答案 0 :(得分:1)

似乎活动网络信息将保持服务/活动/接收器的上下文启动时的状态。因此,如果您在网络上启动它,然后再断开连接(即从3G移动到Wifi并断开3G连接),它将保持第一个活动连接,使应用程序认为手机处于脱机状态,即使它不是。

在我看来,最好的解决方案是使用getApplicationContext,因为当你启动特定的“任务”时,它不会被束缚。

更新:相关的是,如果您在连接到Wifi时长时间在Androids(特别是Nexus One)上运行应用程序请检查您是否确保不要让Wifi睡眠当屏幕睡觉时您可以在无线网络下的高级选项中进行设置。