首页 > 代码库 > Android网络开启、关闭整理

Android网络开启、关闭整理

近段时间由于要对手机网络状况进行判断、开启和关闭,从网上找了些资料,现整理如下


包含了对WiFi、GPRS、飞行模式的开启、关闭以及一些状态的检测,在小米和三星平板上测试均通过

[java] view plaincopy
    1. package com.my.device_admin.business;  
    2.   
    3. import java.lang.reflect.Method;  
    4.   
    5. import android.content.Context;  
    6. import android.content.Intent;  
    7. import android.net.ConnectivityManager;  
    8. import android.net.NetworkInfo;  
    9. import android.net.wifi.WifiManager;  
    10. import android.provider.Settings;  
    11.   
    12. public class NetworkManager {  
    13.   
    14.     private Context context;  
    15.     private ConnectivityManager connManager;  
    16.   
    17.     public NetworkManager(Context context) {  
    18.         this.context = context;  
    19.         connManager = (ConnectivityManager) this.context  
    20.                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
    21.     }  
    22.   
    23.     /** 
    24.      * @return 网络是否连接可用 
    25.      */  
    26.     public boolean isNetworkConnected() {  
    27.   
    28.         NetworkInfo networkinfo = connManager.getActiveNetworkInfo();  
    29.   
    30.         if (networkinfo != null) {  
    31.             return networkinfo.isConnected();  
    32.         }  
    33.   
    34.         return false;  
    35.     }  
    36.   
    37.     /** 
    38.      * @return wifi是否连接可用 
    39.      */  
    40.     public boolean isWifiConnected() {  
    41.   
    42.         NetworkInfo mWifi = connManager  
    43.                 .getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
    44.   
    45.         if (mWifi != null) {  
    46.             return mWifi.isConnected();  
    47.         }  
    48.   
    49.         return false;  
    50.     }  
    51.   
    52.     /** 
    53.      * 当wifi不能访问网络时,mobile才会起作用 
    54.      * @return GPRS是否连接可用 
    55.      */  
    56.     public boolean isMobileConnected() {  
    57.   
    58.         NetworkInfo mMobile = connManager  
    59.                 .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);  
    60.   
    61.         if (mMobile != null) {  
    62.             return mMobile.isConnected();  
    63.         }  
    64.         return false;  
    65.     }  
    66.   
    67.     /** 
    68.      * GPRS网络开关 反射ConnectivityManager中hide的方法setMobileDataEnabled 可以开启和关闭GPRS网络 
    69.      *  
    70.      * @param isEnable 
    71.      * @throws Exception 
    72.      */  
    73.     public void toggleGprs(boolean isEnable) throws Exception {  
    74.         Class<?> cmClass = connManager.getClass();  
    75.         Class<?>[] argClasses = new Class[1];  
    76.         argClasses[0] = boolean.class;  
    77.   
    78.         // 反射ConnectivityManager中hide的方法setMobileDataEnabled,可以开启和关闭GPRS网络  
    79.         Method method = cmClass.getMethod("setMobileDataEnabled", argClasses);  
    80.         method.invoke(connManager, isEnable);  
    81.     }  
    82.   
    83.     /** 
    84.      * WIFI网络开关 
    85.      *  
    86.      * @param enabled 
    87.      * @return 设置是否success 
    88.      */  
    89.     public boolean toggleWiFi(boolean enabled) {  
    90.         WifiManager wm = (WifiManager) context  
    91.                 .getSystemService(Context.WIFI_SERVICE);  
    92.         return wm.setWifiEnabled(enabled);  
    93.   
    94.     }  
    95.       
    96.     /** 
    97.      *  
    98.      * @return 是否处于飞行模式 
    99.      */  
    100.     public boolean isAirplaneModeOn() {    
    101.         // 返回值是1时表示处于飞行模式    
    102.         int modeIdx = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0);    
    103.         boolean isEnabled = (modeIdx == 1);  
    104.         return isEnabled;  
    105.     }    
    106.     /** 
    107.      * 飞行模式开关 
    108.      * @param setAirPlane 
    109.      */  
    110.     public void toggleAirplaneMode(boolean setAirPlane) {    
    111.         Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, setAirPlane ? 1 : 0);    
    112.         // 广播飞行模式信号的改变,让相应的程序可以处理。    
    113.         // 不发送广播时,在非飞行模式下,Android 2.2.1上测试关闭了Wifi,不关闭正常的通话网络(如GMS/GPRS等)。    
    114.         // 不发送广播时,在飞行模式下,Android 2.2.1上测试无法关闭飞行模式。    
    115.         Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);    
    116.         // intent.putExtra("Sponsor", "Sodino");    
    117.         // 2.3及以后,需设置此状态,否则会一直处于与运营商断连的情况    
    118.         intent.putExtra("state", setAirPlane);    
    119.         context.sendBroadcast(intent);    
    120.     }