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://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /2012年资料/5月/8日/Android GPRS的自动打开与关闭/

   本例子中的GPRS打开与关闭是自动的, 不会出现系统那个手动GPRS设置界面。

   Android中GPRS的打开和关闭比较难搞, 因为它没有专门的方法提供给你。 GPRS打开与关闭的方法都在framework, 所以我们要调用framework里的方法来操作GPRS开关。

  需要调用的方法:

  1. getMobileDataEnabled   检查GPRS是否开启

  2. setMobileDataEnabled   设置GPRS开关

  首先我们需要声明一个网络链接相关操作类

  1. private ConnectivityManager mCM;  

在初始化中实例化

  1. 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里搜索到的方法, 第二个是参数。

相关内容