1. 程式人生 > >Android 通過程式碼實現控制資料網路的開關(僅適用於5.0以上)

Android 通過程式碼實現控制資料網路的開關(僅適用於5.0以上)

Android 5.0以前使用ConnectivityManager通過反射兩個方法setMobileDataEnabled和getMobileDataEnabled來控制行動網路開和關。  Android 5.0以後使用TelephonyMananger類通過反射獲取setDataEnabled和getDataEnabled類完成操作。  注意:需要使用系統許可權:android:sharedUserId=”android.uid.system”。

public void setMobileDataState(Context context, boolean enabled) {     TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);     try {         Method setDataEnabled = telephonyService.getClass().getDeclaredMethod("setDataEnabled",boolean.class);         if (null != setDataEnabled) {             setDataEnabled.invoke(telephonyService, enabled);         }     } catch (Exception e) {         e.printStackTrace();     } }

public boolean getMobileDataState(Context context) {     TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);     try {         Method getDataEnabled = telephonyService.getClass().getDeclaredMethod("getDataEnabled");         if (null != getDataEnabled) {             return (Boolean) getDataEnabled.invoke(telephonyService);         }     } catch (Exception e) {         e.printStackTrace();     }     return false; }  <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 自適應Android5.0以前及以後的程式碼:

TelephonyManager mTelephonyManager = (TelephonyManager)context                  .getSystemService(Context.TELEPHONY_SERVICE); ConnectivityManager mConnectivityManager =(ConnectivityManager)context                                  .getSystemService(Context.CONNECTIVITY_SERVICE); 1 2 public void setDataEnable(){     Object object = Build.VERSION.SDK_INT >= 21 ?       mTelephonyManager : mConnectivityManager;       String methodName = Build.VERSION.SDK_INT >= 21 ? "setDataEnabled" : "setMobileDataEnabled";       Method setMobileDataEnable;       try {           setMobileDataEnable = object.getClass().getMethod(methodName, boolean.class);           setMobileDataEnable.invoke(object, true);          } catch (Exception e) {               e.printStackTrace();           }   } 1 2 3 4 5 6 7 8 9 10 11 public void checkConnectState(){     while(true){         Object object = Build.VERSION.SDK_INT >= 21 ? mTelephonyManager : mConnectivityManager;           String methodName = Build.VERSION.SDK_INT >= 21 ? "getDataEnabled" : "getMobileDataEnabled";            Method getMobileDataEnable;            boolean isDataEnabled = false;          try {                getMobileDataEnable = object.getClass().getMethod(methodName, null);                isDataEnabled = (Boolean) getMobileDataEnable.invoke(object, null);                } catch (Exception e) {                   e.printStackTrace();                 }               if(isDataEnabled){                 break;             }else{                 sleep(200);             }     } }