【发布时间】:2016-09-27 05:00:08
【问题描述】:
如果您想在 android 中检查 互联网连接,有很多方法可以做到这一点 例如:
public boolean isConnectingToInternet(){
ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null)
{
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null)
for (int i = 0; i < info.length; i++)
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
return false;
}
getAllNetworkInfo(); 在 api 级别 23 中已弃用,因此我需要一个解决方案来检查 api 级别 23 和之前的互联网连接,我找到了另一种方法来做到这一点
private boolean isConnectedToInternet()
{
ConnectivityManager cm = (ConnectivityManager) SplashActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
Toast.makeText(SplashActivity.this, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
return true;
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider's data plan
Toast.makeText(SplashActivity.this, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
return true;
}
}
return false;
}
我的问题是关于 getActiveNetworkInfo() 和 isConnected() 谷歌为此方法提供的文档是here
返回有关当前活动的默认数据网络的详细信息。连接后,此网络是传出连接的默认路由。在启动网络流量之前,您应该始终检查 isConnected()。当没有默认网络时,这可能会返回 null。
为什么我们需要在 getActiveNetworkInfo() 上调用 isConnected() 来检查互联网连接,而我们可以用 null 检查 getActiveNetworkInfo() 的返回值 strong> 如果不为 null,我们有互联网连接,否则如果返回 null,则在运行时调用 getActiveNetworkInfo() 上的 isConnected() 会引发 空指针异常?
【问题讨论】:
标签: android internet-connection