MainActivity如下:

packagewy.testnetwork;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importandroid.net.ConnectivityManager;importandroid.net.wifi.WifiManager;importandroid.os.Bundle;importandroid.app.Activity;importandroid.content.Context;/***Demo描述:*通过代码打开wifi或者移动网络**学习资料:*1http://blog.csdn.net/way_ping_li/article/details/8493700*2http://stackoverflow.com/questions/12535101/how-can-i-turn-off-3g-data-programmatically-on-android*3http://www.cnblogs.com/willyan/archive/2012/07/03/2574513.html*4http://ask.csdn.net/questions/152*5http://blog.csdn.net/lfdfhl/article/details/10311505*6http://blog.csdn.net/tu_bingbing/article/details/8469871*7http://blog.csdn.net/stevenhu_223/article/details/9052083*Thankyouverymuch**备注说明:*1在学习资料1中还涉及到利用代码打开GPS*2通过代码打开wifi和移动网络在某些机型上是不可实现的**/publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);toggleWiFi(this,false);toggleMobileData(this,true);}//设置是否打开WifiprivatevoidtoggleWiFi(Contextcontext,booleanenabled){WifiManagerwifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(enabled);}/***设置是否打开移动网络**但没有直接的API可调用,但是我们发现:*在ConnectivityManager中有一隐藏的方法setMobileDataEnabled()*源码如下:*publicvoidsetMobileDataEnabled(booleanenabled){*try{*mService.setMobileDataEnabled(enabled);*}catch(RemoteExceptione){*}*}**这里的重点就是mService,查看其声明:*privateIConnectivityManagermService;*继续查看源码可知IConnectivityManager为了一个AIDL(接口interfaceIConnectivityManager)***调用过程:*ConnectivityManager中有一隐藏的方法setMobileDataEnabled()*在setMobileDataEnabled()中调用了IConnectivityManager中的setMobileDataEnabled(boolean)**所以我们首先需要反射出ConnectivityManager类的成员变量mService(IConnectivityManager类型)*/privatevoidtoggleMobileData(Contextcontext,booleanenabled){ConnectivityManagerconnectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);//ConnectivityManager类Class<?>connectivityManagerClass=null;//ConnectivityManager类中的字段FieldconnectivityManagerField=null;//IConnectivityManager接口Class<?>iConnectivityManagerClass=null;//IConnectivityManager接口的对象ObjectiConnectivityManagerObject=null;//IConnectivityManager接口的对象的方法MethodsetMobileDataEnabledMethod=null;try{//取得ConnectivityManager类connectivityManagerClass=Class.forName(connectivityManager.getClass().getName());//取得ConnectivityManager类中的字段mServiceconnectivityManagerField=connectivityManagerClass.getDeclaredField("mService");//取消访问私有字段的合法性检查//该方法来自java.lang.reflect.AccessibleObjectconnectivityManagerField.setAccessible(true);//实例化mService//该get()方法来自java.lang.reflect.Field//一定要注意该get()方法的参数://它是mService所属类的对象//完整例子请参见://http://blog.csdn.net/lfdfhl/article/details/13509839iConnectivityManagerObject=connectivityManagerField.get(connectivityManager);//得到mService所属接口的ClassiConnectivityManagerClass=Class.forName(iConnectivityManagerObject.getClass().getName());//取得IConnectivityManager接口中的setMobileDataEnabled(boolean)方法//该方法来自java.lang.Class.getDeclaredMethodsetMobileDataEnabledMethod=iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);//取消访问私有方法的合法性检查//该方法来自java.lang.reflect.AccessibleObjectsetMobileDataEnabledMethod.setAccessible(true);//调用setMobileDataEnabled方法setMobileDataEnabledMethod.invoke(iConnectivityManagerObject,enabled);}catch(ClassNotFoundExceptione){e.printStackTrace();}catch(NoSuchFieldExceptione){e.printStackTrace();}catch(SecurityExceptione){e.printStackTrace();}catch(NoSuchMethodExceptione){e.printStackTrace();}catch(IllegalArgumentExceptione){e.printStackTrace();}catch(IllegalAccessExceptione){e.printStackTrace();}catch(InvocationTargetExceptione){e.printStackTrace();}}}

AndroidManifest.xml如下:

<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="wy.testnetwork"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="10"android:targetSdkVersion="10"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name="wy.testnetwork.MainActivity"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>


更多相关文章

  1. Android(安卓)AsyncTask
  2. Android简单实现更换桌面背景的方法
  3. android远程绑定与本地绑定区别
  4. Android(安卓)更新升级版本
  5. Android属性动画(ObjectAnimation)
  6. Android(安卓)实现SHA1加密算法代码
  7. Android彻底退出应用程序
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. cocos2d_android 第一个游戏
  2. 分享Android Studio官方最新版下载(828M)
  3. Android 推荐博客 网站
  4. Intent简介及属性
  5. Android如何使用样式创建半透明窗体
  6. Android(安卓)display system overview
  7. 使用apktool + idea 调试smali
  8. Android 自定义 ListView
  9. Android Eclipse 重启adb and Eclipse AD
  10. Android 监听EditText是否为空,控制按钮是