当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现WIFI和GPRS网络的切换

Android实现WIFI和GPRS网络的切换

2020年03月09日  | 移动技术网IT编程  | 我要评论

在项目的开发中因为要使用到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网络的切换了。

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网