本例中需要的權限:
<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://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/5月/8日/Android GPRS的自動打開與關閉/
本例子中的GPRS打開與關閉是自動的, 不會出現系統那個手動GPRS設置界面。
Android中GPRS的打開和關閉比較難搞, 因為它沒有專門的方法提供給你。 GPRS打開與關閉的方法都在framework, 所以我們要調用framework裡的方法來操作GPRS開關。
需要調用的方法:
1. getMobileDataEnabled 檢查GPRS是否開啟
2. setMobileDataEnabled 設置GPRS開關
首先我們需要聲明一個網絡鏈接相關操作類
- private ConnectivityManager mCM;
在初始化中實例化
- mCM = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
接下來用到了三個自定義的方法
gprsIsOpenMethod 是從framework中取得getMobileDataEnabled這個方法, 主要用來檢測GPRS是否打開
setGprsEnabled 取得setMobileDataEnabled方法, 用來打開或關閉GPRS
在這裡我們只要調用grpsEnabled即可。
- //打開或關閉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裡搜索到的方法, 第二個是參數。