以下方法前2个在2.3.5和4.1.1中测试成功,第3个方法在2.3.5中测试没问题,但在4.1.1中无效,待解决。详见android.provider.Settings.Secure类。 记得在AndroidManifest.xml中声明相关权限: [html] view plain copy
  1. <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
  2. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
  3. <uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>
  4. <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>
1. 打开WiFi最简单,直接调用系统的方法即可: [java] view plain copy
  1. /**
  2. *WIFI网络开关*/
  3. privatevoidtoggleWiFi(Contextcontext,booleanenabled){
  4. WifiManagerwm=(WifiManager)context
  5. .getSystemService(Context.WIFI_SERVICE);
  6. wm.setWifiEnabled(enabled);
  7. }

2. 打开移动网络比较麻烦,系统没有直接提供开放的方法,只在ConnectivityManager类中有一个不可见的setMobileDataEnabled方法,查看源代码发现,它是调用IConnectivityManager类中的setMobileDataEnabled(boolean)方法。由于方法不可见,只能采用反射来调用: [java] view plain copy
  1. /**
  2. *移动网络开关
  3. */
  4. privatevoidtoggleMobileData(Contextcontext,booleanenabled){
  5. ConnectivityManagerconMgr=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  6. Class<?>conMgrClass=null;//ConnectivityManager类
  7. FieldiConMgrField=null;//ConnectivityManager类中的字段
  8. ObjectiConMgr=null;//IConnectivityManager类的引用
  9. Class<?>iConMgrClass=null;//IConnectivityManager类
  10. MethodsetMobileDataEnabledMethod=null;//setMobileDataEnabled方法
  11. try{
  12. //取得ConnectivityManager类
  13. conMgrClass=Class.forName(conMgr.getClass().getName());
  14. //取得ConnectivityManager类中的对象mService
  15. iConMgrField=conMgrClass.getDeclaredField("mService");
  16. //设置mService可访问
  17. iConMgrField.setAccessible(true);
  18. //取得mService的实例化类IConnectivityManager
  19. iConMgr=iConMgrField.get(conMgr);
  20. //取得IConnectivityManager类
  21. iConMgrClass=Class.forName(iConMgr.getClass().getName());
  22. //取得IConnectivityManager类中的setMobileDataEnabled(boolean)方法
  23. setMobileDataEnabledMethod=iConMgrClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);
  24. //设置setMobileDataEnabled方法可访问
  25. setMobileDataEnabledMethod.setAccessible(true);
  26. //调用setMobileDataEnabled方法
  27. setMobileDataEnabledMethod.invoke(iConMgr,enabled);
  28. }catch(ClassNotFoundExceptione){
  29. e.printStackTrace();
  30. }catch(NoSuchFieldExceptione){
  31. e.printStackTrace();
  32. }catch(SecurityExceptione){
  33. e.printStackTrace();
  34. }catch(NoSuchMethodExceptione){
  35. e.printStackTrace();
  36. }catch(IllegalArgumentExceptione){
  37. e.printStackTrace();
  38. }catch(IllegalAccessExceptione){
  39. e.printStackTrace();
  40. }catch(InvocationTargetExceptione){
  41. e.printStackTrace();
  42. }
  43. }



3. 打开GPS也比较麻烦,与打开移动网络一样,没有直接的方法。在网上搜索了一下,据说采用反射去调用系统的方法仍然会失败,有网友用另外一条路实现了同样的功能,在2.3.5系统测试可以通过,在4.1.1系统中测试无效,待解决: [java] view plain copy
  1. /**
  2. *<p>GPS开关
  3. *<p>当前若关则打开
  4. *<p>当前若开则关闭
  5. */
  6. privatevoidtoggleGPS(){
  7. IntentgpsIntent=newIntent();
  8. gpsIntent.setClassName("com.android.settings","com.android.settings.widget.SettingsAppWidgetProvider");
  9. gpsIntent.addCategory("android.intent.category.ALTERNATIVE");gpsIntent.setData(Uri.parse("custom:3"));
  10. try{
  11. PendingIntent.getBroadcast(this,0,gpsIntent,0).send();
  12. }catch(CanceledExceptione){
  13. e.printStackTrace();
  14. }
  15. }

更多相关文章

  1. Android初级教程_内存分析工具MemoryAnalizer
  2. android fastjson使用方法 fastjson教程
  3. Android(安卓)UI 使用HTML布局(直接打开服务器网页)
  4. [Android(安卓)界面] setContentView和inflate区别
  5. 从Android到IOS,IOS应用生命周期函数
  6. Android调试工具Genymotion的使用
  7. android应用集
  8. Android中CMake的使用之四调用第三方库的实战
  9. Android(安卓)ExpandableListView折叠

随机推荐

  1. Android中获取网络图片的方法(如果手机缓
  2. Android(安卓)Butterknife 8.4.0 使用方
  3. Android学习笔记之cyanogenmod编译篇
  4. ubuntu12.04 android studio 安装(装完后
  5. 实现Android(安卓)ListView 自动加载更多
  6. ionic中android,和ios生成的一些兼容问题-
  7. Android(安卓)TTS学习——保存对你的喜欢
  8. Android安装应用后点击,打开.(Open)带来
  9. android开发环境 国内镜像 及Android(安
  10. Android-Fresco系列3 Producer