你如何检查在Android的互联网连接?

我想检查每个活动的互联网连接。 如果丢失了,应该显示一条消息。

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

您可以使用ConnectivityManager来检查networking状态。

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 } 

请注意,常量ConnectivityManager.TYPE_MOBILE和ConnectivityManager.TYPE_WIFI表示连接types,这两个值并不详尽。 在这里查看详尽的列表。


另外请确保您具有监视networking状态所需的权限。 您需要将此权限添加到您的AndroidManifest.xml中:

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

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

 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 } 

它也迎合任何新型的networking,如ConnectivityManager#TYPE_WIMAX


另外请确保您具有监视networking状态所需的权限。 您需要将此权限添加到您的AndroidManifest.xml中:

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

你可以做到这一点,为各种types的networking状态

 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(); } } 

您可以直接查看移动和Wi-Fi的networking覆盖范围和数据可用性

对于networking覆盖可用性,

 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())); } 

数据可用性,如果networking可用

 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())); } 

更正

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

应该

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

注册一个广播接收器来处理CONNECTIVITY_ACTION 。 看到这个完整的例子 。 你应该更新一个静态variables“connectionAvailable”,这个静态variables可以随时随地通过它的getter来访问。

请记住在清单文件中声明广播接收器:

 <receiver android:name=".NetworkConnectivityReceiver" android:enabled="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> 

在“检查每个活动”的问题上,可能会有兴趣使用由活动扩展BaseActivity,并pipe理连通性testing和显示消息。

另外请注意, 使用事件 (不是来自活动的投票)将更有效率。

您正确使用ConnectivityManager.getNetworkInfo(0).getState()ConnectivityManager.getNetworkInfo(1).getState() ,而不是使用ConnectivityManager.TYPE_WIFIConnectivityManager.TYPE_MOBILE对值(1)和(0)进行硬编码

这是一个布尔检查,看看你是否有networking访问。 它不确定什么样的networking访问 – 手机,WiFi …,它只是检查,看看你是否在线。

 boolean mobileNwInfo = false; ConnectivityManager conxMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); try { mobileNwInfo = conxMgr.getActiveNetworkInfo().isConnected(); } catch (NullPointerException e) { mobileNwInfo = false; } if ( mobileNwInfo == false ) { // Your code goes here... }