android 開關資料流量

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   os   ar   java   for   

在網上找了很長時間,找到了一種通過反射的方法,將ConnectivityManager裡面的一個對象IConnectivityManager中的setMobileDataEnabled方法反射出來,因為IConnectivityManager是private的,不能直接調用setMobileDataEnabled

這個方法,具體代碼如下:


[java] view plaincopyprint?

  1. /** 

  2.      * gprs狀態 

  3.      * @param getMobileDataEnabled 

  4.      * @return  

  5.      */  

  6.     public boolean getMobileDataStatus(String getMobileDataEnabled){    

  7.         ConnectivityManager cm;    

  8.         cm = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);    

  9.     

  10.         Class cmClass = cm.getClass();    

  11.         Class[] argClasses = null;    

  12.         Object[] argObject = null;    

  13.         Boolean isOpen = false;    

  14.         try{    

  15.            Method method = cmClass.getMethod(getMobileDataEnabled, argClasses);    

  16.            isOpen = (Boolean)method.invoke(cm, argObject);    

  17.         }catch(Exception e){   

  18.             e.printStackTrace();    

  19.         }  

  20.         return isOpen;    

  21.     }  

/**     * gprs狀態     * @param getMobileDataEnabled     * @return     */    public boolean getMobileDataStatus(String getMobileDataEnabled){      ConnectivityManager cm;        cm = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);          Class cmClass = cm.getClass();        Class[] argClasses = null;         Object[] argObject = null;         Boolean isOpen = false;         try{         Method method = cmClass.getMethod(getMobileDataEnabled, argClasses);         isOpen = (Boolean)method.invoke(cm, argObject);         }catch(Exception e){        e.printStackTrace();         }    return isOpen;      }



[java] view plaincopyprint?

  1. /** 

  2.     * 移動網路開關 

  3.     */  

  4.    private void setMobileDataEnabled(Context context, boolean enabled) {  

  5.      ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  

  6.       

  7.      Class<?> conMgrClass = null; // ConnectivityManager類  

  8.      Field iConMgrField = null; // ConnectivityManager類中的欄位  

  9.      Object iConMgr = null; // IConnectivityManager類的引用  

  10.      Class<?> iConMgrClass = null; // IConnectivityManager類  

  11.      Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法  

  12.       

  13.      try {  

  14.       // 取得ConnectivityManager類  

  15.       conMgrClass = Class.forName(conMgr.getClass().getName());  

  16.       // 取得ConnectivityManager類中的對象mService  

  17.       iConMgrField = conMgrClass.getDeclaredField("mService");  

  18.       // 設定mService可訪問  

  19.       iConMgrField.setAccessible(true);  

  20.       // 取得mService的執行個體化類IConnectivityManager  

  21.       iConMgr = iConMgrField.get(conMgr);  

  22.       // 取得IConnectivityManager類  

  23.       iConMgrClass = Class.forName(iConMgr.getClass().getName());  

  24.       // 取得IConnectivityManager類中的setMobileDataEnabled(boolean)方法  

  25.       setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);  

  26.       // 設定setMobileDataEnabled方法可訪問  

  27.       setMobileDataEnabledMethod.setAccessible(true);  

  28.       // 調用setMobileDataEnabled方法  

  29.       setMobileDataEnabledMethod.invoke(iConMgr, enabled);  

  30.      } catch (ClassNotFoundException e) {  

  31.       e.printStackTrace();  

  32.      } catch (NoSuchFieldException e) {  

  33.       e.printStackTrace();  

  34.      } catch (SecurityException e) {  

  35.       e.printStackTrace();  

  36.      } catch (NoSuchMethodException e) {  

  37.       e.printStackTrace();  

  38.      } catch (IllegalArgumentException e) {  

  39.       e.printStackTrace();  

  40.      } catch (IllegalAccessException e) {  

  41.       e.printStackTrace();  

  42.      } catch (InvocationTargetException e) {  

  43.       e.printStackTrace();  

  44.      }  

  45.    }  

 /**     * 移動網路開關     */    private void setMobileDataEnabled(Context context, boolean enabled) { ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); Class<?> conMgrClass = null; // ConnectivityManager類 Field iConMgrField = null; // ConnectivityManager類中的欄位 Object iConMgr = null; // IConnectivityManager類的引用 Class<?> iConMgrClass = null; // IConnectivityManager類 Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法 try {  // 取得ConnectivityManager類  conMgrClass = Class.forName(conMgr.getClass().getName());  // 取得ConnectivityManager類中的對象mService  iConMgrField = conMgrClass.getDeclaredField("mService");  // 設定mService可訪問  iConMgrField.setAccessible(true);  // 取得mService的執行個體化類IConnectivityManager  iConMgr = iConMgrField.get(conMgr);  // 取得IConnectivityManager類  iConMgrClass = Class.forName(iConMgr.getClass().getName());  // 取得IConnectivityManager類中的setMobileDataEnabled(boolean)方法  setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);  // 設定setMobileDataEnabled方法可訪問  setMobileDataEnabledMethod.setAccessible(true);  // 調用setMobileDataEnabled方法  setMobileDataEnabledMethod.invoke(iConMgr, enabled); } catch (ClassNotFoundException e) {  e.printStackTrace(); } catch (NoSuchFieldException e) {  e.printStackTrace(); } catch (SecurityException e) {  e.printStackTrace(); } catch (NoSuchMethodException e) {  e.printStackTrace(); } catch (IllegalArgumentException e) {  e.printStackTrace(); } catch (IllegalAccessException e) {  e.printStackTrace(); } catch (InvocationTargetException e) {  e.printStackTrace(); }    }


出現這個錯誤找了半天~~~ 沒找到解決的方法

[html] view plaincopyprint?

  1. java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]  

java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]


後來終於網上找到一個方法  試下發現可以 

[java] view plaincopyprint?

  1. private void toggleMobileData(Context context, boolean enabled){      

  2.             ConnectivityManager connectivityManager =     

  3.             (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);    

  4.             Method setMobileDataEnabl;  

  5.             try {  

  6.                 setMobileDataEnabl = connectivityManager.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class);  

  7.                 setMobileDataEnabl.invoke(connectivityManager, enabled);  

  8.             } catch (Exception e) {  

  9.                 e.printStackTrace();  

  10.             }  

  11.      }  

private void toggleMobileData(Context context, boolean enabled){    ConnectivityManager connectivityManager =   (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  Method setMobileDataEnabl;try {setMobileDataEnabl = connectivityManager.getClass().getDeclaredMethod("setMobileDataEnabled", boolean.class);setMobileDataEnabl.invoke(connectivityManager, enabled);} catch (Exception e) {e.printStackTrace();} }

android 開關資料流量

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.