欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现WIFI和GPRS网络的切换

程序员文章站 2023-11-14 17:23:16
在项目的开发中因为要使用到wifi和gprs网络的切换,因此就研究了一下通过代码打开wifi和gprs的工作。 无论是切换wifi还是切换gprs网络都需要设置相应的权限,所以需要在...

在项目的开发中因为要使用到wifi和gprs网络的切换,因此就研究了一下通过代码打开wifi和gprs的工作。

无论是切换wifi还是切换gprs网络都需要设置相应的权限,所以需要在androidmanifest.xml文件中加入以下几行代码。

<uses-permission android:name="android.permission.access_wifi_state" />
<uses-permission android:name="android.permission.access_network_state" />
<uses-permission android:name="android.permission.change_wifi_state" />
<uses-permission android:name="android.permission.change_network_state" />

1、切换wifi网络

public static void togglewifi(context context, boolean enabled) {
 wifimanager wm = (wifimanager) context.getsystemservice(context.wifi_service);
 wm.setwifienabled(enabled);
 }

2、切换gprs网络

由于android没有提供直接切换gprs网络的方法,通过查看系统源码发现,系统是调用iconnectivitymanager类中的setmobiledataenabled(boolean)方法来设置gprs网络的,由于方法不可见,只能采用反射来调用,代码如下。

public static void togglemobiledata(context context, boolean enabled) {
 connectivitymanager conmgr = (connectivitymanager) context.getsystemservice(context.connectivity_service);
 
 class<?> conmgrclass = null; // connectivitymanager类
 field conmgrfield = null; // connectivitymanager类中的字段
 object iconmgr = null; // iconnectivitymanager类的引用
 class<?> iconmgrclass = null; // iconnectivitymanager类
 method setmobiledataenabledmethod = null; // setmobiledataenabled方法
 
 try {
 // 取得connectivitymanager类
 conmgrclass = class.forname(conmgr.getclass().getname());
 // 取得connectivitymanager类中的对象mservice
 conmgrfield = conmgrclass.getdeclaredfield("mservice");
 // 设置mservice可访问
 conmgrfield.setaccessible(true);
 // 取得mservice的实例化类iconnectivitymanager
 iconmgr = conmgrfield.get(conmgr);
 // 取得iconnectivitymanager类
 iconmgrclass = class.forname(iconmgr.getclass().getname());
 // 取得iconnectivitymanager类中的setmobiledataenabled(boolean)方法
 setmobiledataenabledmethod = iconmgrclass.getdeclaredmethod("setmobiledataenabled", boolean.type);
 // 设置setmobiledataenabled方法可访问
 setmobiledataenabledmethod.setaccessible(true);
 // 调用setmobiledataenabled方法
 setmobiledataenabledmethod.invoke(iconmgr, enabled);
 }
 catch (classnotfoundexception e) {
 e.printstacktrace();
 }
 catch (nosuchfieldexception e) {
 e.printstacktrace();
 }
 catch (securityexception e) {
 e.printstacktrace();
 }
 catch (nosuchmethodexception e) {
 e.printstacktrace();
 }
 catch (illegalargumentexception e) {
 e.printstacktrace();
 }
 catch (illegalaccessexception e) {
 e.printstacktrace();
 }
 catch (invocationtargetexception e) {
 e.printstacktrace();
 }
 }

根据以上所写就可以做到wifi网络和gprs网络的切换了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。