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网络的切换了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。