本例中需要的权限:

 

  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
  2.      <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 

本例子中的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即可。

 

  1. //打开或关闭GPRS   
  2.      private boolean gprsEnabled(boolean bEnable)   
  3.      {   
  4.          Object[] argObjects = null;   
  5.                     
  6.          boolean isOpen = gprsIsOpenMethod("getMobileDataEnabled");   
  7.          if(isOpen == !bEnable)   
  8.          {   
  9.              setGprsEnable("setMobileDataEnabled", bEnable);   
  10.          }   
  11.             
  12.          return isOpen;     
  13.      }   
  14.         
  15.      //检测GPRS是否打开   
  16.      private boolean gprsIsOpenMethod(String methodName)   
  17.      {   
  18.          Class cmClass       = mCM.getClass();   
  19.          Class[] argClasses  = null;   
  20.          Object[] argObject  = null;   
  21.             
  22.          Boolean isOpen = false;   
  23.          try   
  24.          {   
  25.              Method method = cmClass.getMethod(methodName, argClasses);   
  26.     
  27.              isOpen = (Boolean) method.invoke(mCM, argObject);   
  28.          } catch (Exception e)   
  29.          {   
  30.              e.printStackTrace();   
  31.          }   
  32.     
  33.          return isOpen;   
  34.      }   
  35.         
  36.      //开启/关闭GPRS   
  37.      private void setGprsEnabled(String methodName, boolean isEnable)   
  38.      {   
  39.          Class cmClass       = mCM.getClass();   
  40.          Class[] argClasses  = new Class[1];   
  41.          argClasses[0]       = boolean.class;   
  42.             
  43.          try   
  44.          {   
  45.              Method method = cmClass.getMethod(methodName, argClasses);   
  46.              method.invoke(mCM, isEnable);   
  47.          } catch (Exception e)   
  48.          {   
  49.              e.printStackTrace();   
  50.          }   
  51.      }  

 

Class.getMethod 是从framework搜索指定的方法, 返回的Method就可以使用该方法, 第二个参数是该方法的参数类型。
Method.invoke 使用从framework里搜索到的方法, 第二个是参数。