你如何检查android中的互联网连接?

UMA*_*MAR 59 android network-state android-activity

我想检查每项活动的互联网连接.如果丢失,则应显示消息.

任何人都可以指导我如何实现这一目标吗?

Wil*_*iam 125

任何一个点上只能有一个连接处于活动状态.所以更简单的答案是:

final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected()) {
    // notify user you are online
} else {
    // notify user you are not online
} 
Run Code Online (Sandbox Code Playgroud)

它还适用于任何新类型的网络,如ConnectivityManager#TYPE_WIMAX


还要确保您具有监视网络状态所需的权限.您需要将此权限添加到AndroidManifest.xml:

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

  • 不要忘记在AndroidManifest.xml中添加`<uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE"/>` (9认同)
  • 最好的回应.+1 (2认同)

Dan*_*Dan 63

您可以使用ConnectivityManager检查网络状态.

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

if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED ) {

    // notify user you are online

}
else if ( conMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
    || conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) {

    // notify user you are not online
}
Run Code Online (Sandbox Code Playgroud)

请注意,常量ConnectivityManager.TYPE_MOBILE和ConnectivityManager.TYPE_WIFI表示连接类型,这两个值并非详尽无遗.请参阅此处以获取详尽的清单.


还要确保您具有监视网络状态所需的权限.您需要将此权限添加到AndroidManifest.xml:

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

  • 您必须将此行添加到AndroidManifest.xml:<uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE"> </ uses-permission> (29认同)
  • 这不会起作用,你需要循环遍历所有网络类型:NetworkInfo infos [] = conMgr.getAllNetworkInfo(); for(NetworkInfo info:infos){}围绕if,而不是其他. (3认同)
  • 好的一件事,我注意到..当wifi连接到无线调制解调器互联网覆盖是否有它总是说是的你被连接它只检查wifi锥度而不是互联网连接所以如何处理这种情况? (2认同)
  • 错误的代码.如果禁用网络号0,则不会检查网络0的状态,但可以连接... (2认同)

小智 10

您可以针对各种类型的网络状态执行此操作

public void  checkNetworkStatus(){

    final ConnectivityManager connMgr = (ConnectivityManager)
     this.getSystemService(Context.CONNECTIVITY_SERVICE);

     final android.net.NetworkInfo wifi =
     connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

     final android.net.NetworkInfo mobile =
     connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

     if( wifi.isAvailable() ){

     Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
     }
     else if( mobile.isAvailable() ){

     Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
     }
     else
     {

         Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
     }

}
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以直接查看Mobile和Wi-Fi的网络覆盖范围和数据可用性

对于网络覆盖可用性,

private boolean isNetworkAvailable()
{
 ConnectivityManager conxMgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);

 NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 NetworkInfo wifiNwInfo   = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

return ((mobileNwInfo== null ? false : mobileNwInfo.isAvailable()) || (wifiNwInfo == null ? false : wifiNwInfo.isAvailable()));

}
Run Code Online (Sandbox Code Playgroud)

对于数据的可用性,如果网络可用

private boolean isDataAvailable()
{
  ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

 NetworkInfo mobileNwInfo = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 NetworkInfo wifiNwInfo   = conxMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

return ((mobileNwInfo== null? false : mobileNwInfo.isConnected() )|| (wifiNwInfo == null? false : wifiNwInfo.isConnected()));
}
Run Code Online (Sandbox Code Playgroud)


Sud*_*ali 5

更正

if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    ||  conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING  ) {
   //notify user you are online
}
Run Code Online (Sandbox Code Playgroud)

应该

if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED 
    ||  conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED ) {
    //notify user you are online
}
Run Code Online (Sandbox Code Playgroud)