Android GPRS的自動打開與關閉

本例中需要的權限:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />

工程源碼下載:http://up.aiwalls.com/2012/0508/20120508021512712.rar
      
 
   本例子中的GPRS打開與關閉是自動的, 不會出現系統那個手動GPRS設置界面。
   Android中GPRS的打開和關閉比較難搞, 因為它沒有專門的方法提供給你。 GPRS打開與關閉的方法都在framework, 所以我們要調用framework裡的方法來操作GPRS開關。
  需要調用的方法:
  1. getMobileDataEnabled   檢查GPRS是否開啟
  2. setMobileDataEnabled   設置GPRS開關
  首先我們需要聲明一個網絡鏈接相關操作類
[java]
private ConnectivityManager mCM; 

  在初始化中實例化
[java]
mCM = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

接下來用到瞭三個自定義的方法
gprsIsOpenMethod  是從framework中取得getMobileDataEnabled這個方法, 主要用來檢測GPRS是否打開
setGprsEnabled  取得setMobileDataEnabled方法, 用來打開或關閉GPRS
在這裡我們隻要調用grpsEnabled即可。
[java]
//打開或關閉GPRS 
    private boolean gprsEnabled(boolean bEnable) 
    { 
        Object[] argObjects = null; 
                 
        boolean isOpen = gprsIsOpenMethod("getMobileDataEnabled"); 
        if(isOpen == !bEnable) 
        { 
            setGprsEnable("setMobileDataEnabled", bEnable); 
        } 
         
        return isOpen;   
    } 
     
    //檢測GPRS是否打開 
    private boolean gprsIsOpenMethod(String methodName) 
    { 
        Class cmClass       = mCM.getClass(); 
        Class[] argClasses  = null; 
        Object[] argObject  = null; 
         
        Boolean isOpen = false; 
        try 
        { 
            Method method = cmClass.getMethod(methodName, argClasses); 
 
            isOpen = (Boolean) method.invoke(mCM, argObject); 
        } catch (Exception e) 
        { 
            e.printStackTrace(); 
        } 
 
        return isOpen; 
    } 
     
    //開啟/關閉GPRS 
    private void setGprsEnabled(String methodName, boolean isEnable) 
    { 
        Class cmClass       = mCM.getClass(); 
        Class[] argClasses  = new Class[1]; 
        argClasses[0]       = boolean.class; 
         
        try 
        { 
            Method method = cmClass.getMethod(methodName, argClasses); 
            method.invoke(mCM, isEnable); 
        } catch (Exception e) 
        { 
            e.printStackTrace(); 
        } 
    } 
Class.getMethod   是從framework搜索指定的方法,  返回的Method就可以使用該方法, 第二個參數是該方法的參數類型。
Method.invoke  使用從framework裡搜索到的方法, 第二個是參數。

 

摘自 KnowHeart-Kress

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。