网络连接ConnectivityManager

1 网络连接类型 ConnectivityManager


监听网络变化broadcat <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

ConnectivityManager connec =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);  
NetworkInfo info = connec.getActiveNetworkInfo();
//倘若手机目前不在网络的服务范围,则connec.getActiveNetworkInfo()会返回null
//NetworkInfo []allinfo=  connec.getAllNetworkInfo();
/*5种联网类型*/
String typeName = info.getTypeName(); //cmwap/cmnet/wifi/uniwap/uninet 
info.getTypeName();     // 以何种方式连线 [WIFI]
info.getState();        // 连线状态 [CONNECTED]
info.isAvailable();     // 网络是否可用 [true]
info.isConnected();     // 网络是否已经连接 [true]
info.isConnectedOrConnecting(); // 网络是否已经连接或者连接中 [true]
info.isFailover();      // 网络是否有问题 [false]
info.isRoaming();       // 网络是否在漫游中 [false]
需要加的权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
2  PhoneStateListener
很多应用PhoneStateListener都是监听来电去电,PhoneStateListener还可以监听网络断开、正在连接和连接成功。
final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);   
mTelephonyMgr.listen(new PhoneStateListener(){ 
                     
    @Override 
    public void onDataConnectionStateChanged(int state) { 
        switch(state){ 
            case TelephonyManager.DATA_DISCONNECTED://网络断开 
                break; 
            case TelephonyManager.DATA_CONNECTING://网络正在连接 
                break; 
            case TelephonyManager.DATA_CONNECTED://网络连接上 
                break; 
        } 
    } 
                         
    }, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);


/** 
  * 测试ConnectivityManager 
  * ConnectivityManager主要管理和网络连接相关的操作 
  * 相关的TelephonyManager则管理和手机、运营商等的相关信息;WifiManager则管理和wifi相关的信息。 
  * 想访问网络状态,首先得添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  * NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过其getState()方法获取的State对象则代表着 
  * 连接成功与否等状态。 
  *  
  */ 
public void testConnectivityManager() {  
  ConnectivityManager connManager = (ConnectivityManager) this 
    .getSystemService(CONNECTIVITY_SERVICE);  
  // 获取代表联网状态的NetWorkInfo对象  
  NetworkInfo networkInfo = connManager.getActiveNetworkInfo();  
  // 获取当前的网络连接是否可用  
  boolean available = networkInfo.isAvailable();  
  if(available){  
   Log.i("通知", "当前的网络连接可用");  
  }  
  else{  
   Log.i("通知", "当前的网络连接可用");  
  }  
 
  State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();  
  if(State.CONNECTED==state){  
   Log.i("通知", "GPRS网络已连接");  
  }  
    
  state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();  
  if(State.CONNECTED==state){  
   Log.i("通知", "WIFI网络已连接");  
  }  
    
  // 跳转到无线网络设置界面  
  startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));  
  // 跳转到无限wifi网络设置界面  
  startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));  
    

/**
  * 测试ConnectivityManager
  * ConnectivityManager主要管理和网络连接相关的操作
  * 相关的TelephonyManager则管理和手机、运营商等的相关信息;WifiManager则管理和wifi相关的信息。
  * 想访问网络状态,首先得添加权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  * NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过其getState()方法获取的State对象则代表着
  * 连接成功与否等状态。
  *
  */
public void testConnectivityManager() {
  ConnectivityManager connManager = (ConnectivityManager) this
    .getSystemService(CONNECTIVITY_SERVICE);
  // 获取代表联网状态的NetWorkInfo对象
  NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
  // 获取当前的网络连接是否可用
  boolean available = networkInfo.isAvailable();
  if(available){
   Log.i("通知", "当前的网络连接可用");
  }
  else{
   Log.i("通知", "当前的网络连接可用");
  }

  State state = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
  if(State.CONNECTED==state){
   Log.i("通知", "GPRS网络已连接");
  }
 
  state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
  if(State.CONNECTED==state){
   Log.i("通知", "WIFI网络已连接");
  }
 
  // 跳转到无线网络设置界面
  startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
  // 跳转到无限wifi网络设置界面
  startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
 
}


(注意:上面的代码只是示例,直接运行的话有待修改。)

上面判断网络类型的方法只是为了展示用法,其实完全可以通过networkInfo.getType()的返回值来判断。

如:

view plaincopy to clipboardprint?
Context context = listActivity.getApplicationContext();//获取应用上下文  
ConnectivityManager connectivityManager = (ConnectivityManager) context  
.getSystemService(Context.CONNECTIVITY_SERVICE);//获取系统的连接服务  
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();//获取网络的连接情况  
if(activeNetInfo.getType()==ConnectivityManager.TYPE_WIFI){  
//判断WIFI网  
}else if(activeNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) {  
//判断3G网  


你可能感兴趣的:(android,网络应用,mobile)