由于打開或者關閉GPRS的API是隐藏的,這裡采用JAVA反射機制來實作打開或者關閉移動資料開關。
private void setNetEnabled(Context context, boolean enabled)
throws Exception {
final ConnectivityManager conman = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
@SuppressWarnings("rawtypes")
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field iConnectivityManagerField = conmanClass
.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField
.get(conman);
@SuppressWarnings("rawtypes")
final Class iConnectivityManagerClass = Class
.forName(iConnectivityManager.getClass().getName());
@SuppressWarnings("unchecked")
final Method setMobileDataEnabledMethod = iConnectivityManagerClass
.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
經測試,在2.3、4.0、4.1版本的手機上可以實作打開或者關閉GPRS,其他版本的手機沒有測試。