如何检查Android设备是否连接到网络?

Muh*_*man 25 android

我怎么知道我的设备是否连接到网络?我如何检测连接?任何示例代码?

Dan*_*Lew 54

首先,您需要获得许可才能知道设备是否已连接到网络.这需要在您的清单中,在<manifest>元素中:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)

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

ConnectivityManager cm = (ConnectivityManager) Context.getSystemService(Context.CONNECTIVITY_SERVICE);
Run Code Online (Sandbox Code Playgroud)

从那里你需要获得一个NetworkInfo对象.对于大多数人来说,这将意味着使用ConnectivityManager.getActiveNetworkInfo():

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

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

boolean isConnected = ni.isConnected();
Run Code Online (Sandbox Code Playgroud)

  • 我在这个语句中得到一个空指针异常:boolean isConnected = ni.isConnected(); 为什么? (3认同)
  • @Maxood,这意味着没有活跃的网络.换句话说,设备未连接到网络.我会改变代码. (3认同)

Tim*_*Tim 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();

} 
Run Code Online (Sandbox Code Playgroud)