经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android实现WIFI和GPRS网络的切换
来源:jb51  时间:2019/11/5 10:37:50  对本文有异议

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

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

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

1、切换WIFI网络

  1. public static void toggleWiFi(Context context, boolean enabled) {
  2. WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
  3. wm.setWifiEnabled(enabled);
  4. }

2、切换GPRS网络

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

  1. public static void toggleMobileData(Context context, boolean enabled) {
  2. ConnectivityManager conMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  3. Class<?> conMgrClass = null; // ConnectivityManager类
  4. Field conMgrField = null; // ConnectivityManager类中的字段
  5. Object iConMgr = null; // IConnectivityManager类的引用
  6. Class<?> iConMgrClass = null; // IConnectivityManager类
  7. Method setMobileDataEnabledMethod = null; // setMobileDataEnabled方法
  8. try {
  9. // 取得ConnectivityManager类
  10. conMgrClass = Class.forName(conMgr.getClass().getName());
  11. // 取得ConnectivityManager类中的对象mService
  12. conMgrField = conMgrClass.getDeclaredField("mService");
  13. // 设置mService可访问
  14. conMgrField.setAccessible(true);
  15. // 取得mService的实例化类IConnectivityManager
  16. iConMgr = conMgrField.get(conMgr);
  17. // 取得IConnectivityManager类
  18. iConMgrClass = Class.forName(iConMgr.getClass().getName());
  19. // 取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法
  20. setMobileDataEnabledMethod = iConMgrClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
  21. // 设置setMobileDataEnabled方法可访问
  22. setMobileDataEnabledMethod.setAccessible(true);
  23. // 调用setMobileDataEnabled方法
  24. setMobileDataEnabledMethod.invoke(iConMgr, enabled);
  25. }
  26. catch (ClassNotFoundException e) {
  27. e.printStackTrace();
  28. }
  29. catch (NoSuchFieldException e) {
  30. e.printStackTrace();
  31. }
  32. catch (SecurityException e) {
  33. e.printStackTrace();
  34. }
  35. catch (NoSuchMethodException e) {
  36. e.printStackTrace();
  37. }
  38. catch (IllegalArgumentException e) {
  39. e.printStackTrace();
  40. }
  41. catch (IllegalAccessException e) {
  42. e.printStackTrace();
  43. }
  44. catch (InvocationTargetException e) {
  45. e.printStackTrace();
  46. }
  47. }

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

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号