如何检查安卓设备是否连接到互联网?

25

我如何知道我的设备是否已连接到互联网?如何检测网络连接性?有示例代码吗?


可能是Android检查互联网连接的重复问题。 - Sobhan Moradi
4个回答

54

首先,您需要获取权限以知道设备是否连接到网络。这需要在您的清单文件中的<manifest>元素中声明:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

接下来,您需要获取对ConnectivityManager的引用:

ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE);

从那里,您需要获取一个NetworkInfo对象。对于大多数情况来说,这将意味着使用ConnectivityManager.getActiveNetworkInfo()

NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
    // There are no active networks.
    return false;
}

接下来,您只需要使用NetworkInfo的方法之一来确定设备是否连接到互联网:

boolean isConnected = ni.isConnected();

3
为什么会出现空指针异常?因为 ni 对象是 null,而在尝试访问其 isConnected() 方法时导致了异常。 - Muhammad Maqsoodur Rehman
3
@Maxood,它意味着没有活动网络。换句话说,设备未连接到互联网。我会更改代码。 - Tyler Collier
它只检查网络,而不是互联网。当我尝试连接一个没有移动数据的热点时,它返回true并使我的应用程序崩溃。 - Zin Win Htet

6

首先,您需要获得权限,以了解设备是否连接到互联网。这需要在您的清单文件中,在<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />元素中声明:

然后:

ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if (connec != null && (
    (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) || 
    (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED))) { 

        //You are connected, do something online.

} else if (connec != null && (
    (connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) ||
    (connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED ))) {            

        //Not connected.    
        Toast.makeText(getApplicationContext(), "You must be connected to the internet", Toast.LENGTH_LONG).show();

} 

4
请在您的AppManifest.xml文件中添加以下权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

检查网络是否可用的方法:

在IT技术中,我们可以使用以下代码来检查网络是否可用:

boolean isNetworkAvailable() {
  ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

  NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
  boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
  return isConnected;
}

Source



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接