2014-01-20 63 views
14

我正在开发一个android应用程序,我想在互联网(wifi或分组数据连接)连接丢失时收到通知。在我的方法,我可以得到的连接为一体的状态:android如何在互联网连接丢失时得到指示?

private boolean isNetworkAvailable() { 
ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

而在清单有这样的:当连接丢失

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

我怎么会自动通知?

+0

上面的代码是检查是否有互联网的标准方式,所以你的问题是什么? –

+0

see here http://stackoverflow.com/questions/3119607/how-to-be-notified-on-wifi-network-status-change –

+0

@ user2310289:它需要调用'isNetworkAvailable();'方法来获取了解连接状态。它确定何时启动应用程序。但是当应用程序运行它没有太多的好方法来处理要求 –

回答

8

对于WIFI,你可以注册一个广播接收器:

IntentFilter intentFilter = new IntentFilter(); 
intentFilter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); 
registerReceiver(broadcastReceiver, intentFilter); 

您还可以注册在清单中的接收器。

@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); 
    if (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) { 
     if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)){ 
      //do stuff 
     } else { 
      // wifi connection was lost 
     } 
    } 
} 

对于注册为任何类型的,你可以使用下面的接收器的数据连接监听器:

在接收机

然后

<receiver android:name=".receiver.ConnectivityReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    </intent-filter> 
</receiver> 

和你ConnectivityReceiver

public class ConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    } 
} 

onReceive方法y你可以检查你是否有互联网连接或不使用this developer article

+0

可以请你解释'registerReceiver(broadcastReceiver,intentFilter);' –

+0

如果你有兴趣知道'registerReceiver'的生命周期, Activity' /'Service'。否则,你直接在清单中注册一个'BroadcastReceiver',所以无论应用程序是否在运行,你都可以随时获得更新。 ['registerReceiver'](http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,android.content.IntentFilter))可在'Context'类中找到。如果您在'Context'类中注册,请不要忘记调用unregisterReceiver。 – gunar

+0

非常感谢... –

-2

您应该根据您的要求使用BroadcastReceivers。创建一个侦听网络变化的BroadcastReceiver。

如果对网络进行任何更改,它将自动触发该事件,并且您可以执行相关操作。

0

您需要设置一个广播接收器。

将这些添加为意图过滤器。

  <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
      </intent-filter> 
3

使用下面的代码:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import classes.NetworkUtil; 

public class NetworkChangeReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(final Context context, final Intent intent) { 

      boolean IsConnected = NetworkUtil.getConnectivityStatusString(context); 
      // Toast in here, you can retrieve other value like String from NetworkUtil 
      // but you need some change in NetworkUtil Class 
     } 
    } 

NetworkUtil是:

package classes; 

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 

public class NetworkUtil { 

    public static int TYPE_WIFI = 1; 
    public static int TYPE_MOBILE = 2; 
    public static int TYPE_NOT_CONNECTED = 0; 


    public static int getConnectivityStatus(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     if (null != activeNetwork) { 
      if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) 
       return TYPE_WIFI; 

      if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) 
       return TYPE_MOBILE; 
     } 
     return TYPE_NOT_CONNECTED; 
    } 

    public static boolean getConnectivityStatusString(Context context) { 
     int conn = NetworkUtil.getConnectivityStatus(context); 
     boolean status = false ; 
     if (conn == NetworkUtil.TYPE_WIFI) { 
      status = true; 
     } else if (conn == NetworkUtil.TYPE_MOBILE) { 
      status = true; 
     } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { 
      status = false; 
     } 
     return status; 
    } 
} 

,并在清单文件:

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

与此权限:

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

这对我来说非常合适!谢谢 –

相关问题