本例中需要的權限:
<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