Android開發中數據連接的開啟和關閉


  轉載請注明出處:http://www.cnblogs.com/frank-zouxu/p/4118806.html

  最近在做Android開發的過程中,我想要通過代碼來實現數據連接的開啟和關閉,最初我將目標鎖定為ConnectivityManager類,但是在翻閱了Android官方API后並沒有找到相關的方法,如圖1。

            

                    圖1

  但是據說Android的一些類的某些方法的API是非公開的,所以我又做了如下嘗試:獲得ConnectivityManager在加載時的Class對象,並查看了其中的方法;代碼如下(這是一個方法中的全部代碼):

 1         ConnectivityManager connectivityManager = null;  2         Class connectivityManagerClz = null;  3         try {  4             connectivityManager = (ConnectivityManager) cxt  5  .getSystemService(Context.CONNECTIVITY_SERVICE);  6             connectivityManagerClz = connectivityManager.getClass();  7             Method[] methods = connectivityManagerClz.getMethods();  8             for(Method method : methods){  9                 Log.i("Android數據連接管理",method.toGenericString()); 10  } 11             Method method = connectivityManagerClz.getMethod( 12                     "setMobileDataEnabled", new Class[] { boolean.class }); 13  method.invoke(connectivityManager, state); 14         } catch (Exception e) { 15  e.printStackTrace(); 16         }


  通過代碼的第4-6行:我獲取到了ConnectivityManager的Class對象引用;

  通過代碼的第7行:我獲得了ConnectivityManager類的所有方法(包括公開的和未公開的);

  通過代碼的第8-10行:我將ConnectivityManager的方法的信息打印到了LogCat窗口,其中的片段如下圖,可以看到,圖中第一和第三個方法是圖1中沒有的;很明顯第一個方法是設置數據連接的,通過boolean型參數設置開啟與關閉;至此處理問題的方法找到了。由於該方法未被公開,通過實例化普通方法調用(實例化、靜態調用)行不通,所以我這兒使用java的反射機制進行調用

  通過代碼的第11-12行:我獲得了第一個方法setMobileDataEnabled的Method對象,在第12行代碼中傳入setMobileDataEnabled方法所屬類的實例和他的boolean型參數,好了,到此能夠管理數據連接的方法setMobileDataEnabled已經可以被使用了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM