如何检查网络是否可用

时间:2014-05-17 17:30:56

标签: java android networking connection

我正在编写一个应用程序,它通过POST方法将一些数据发送到服务器并收到响应。为此,我首先需要检查网络是否可用。我正在使用这种方法:

private boolean isNetworkAvailable() {
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo();

    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

但是,这个功能不是很准确。例如,有时状态栏中的设备网络指示器显示它当前已连接到EDGE网络或3G网络,但当我尝试访问网络时,它会立即开始更改为另一个网络键入并更改回来并且没有实际的有效连接,但此函数仍返回true。如何确保网络连接有效并且可以通过它发送数据?

2 个答案:

答案 0 :(得分:1)

我认为没有直接的API来检查连接是否有效。你只能检测你是否连接到路由器。 您可以尝试连接到已知的稳定域以检查它是否连接。但是你做了这个检查会增加额外的延迟

答案 1 :(得分:0)

您必须尝试连接到服务器并获取响应代码以检查连接。

试试这个。

select county, COUNT(*)
from person
where person_id in (select distinct person_id from person_encounter)
and create_timestamp >= CONVERT(datetime,'2015-08-01')
and create_timestamp <= CONVERT(datetime,'2015-08-31')
and county in ('1','2','3')
group by county
UNION ALL
select 'other' AS county, COUNT(*)
from person
where person_id in (select distinct person_id from person_encounter)
and create_timestamp >= CONVERT(datetime,'2015-08-01')
and create_timestamp <= CONVERT(datetime,'2015-08-31')
and county not in ('1','2','3')

}