Android实现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网络的切换了。

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

(0)

相关推荐

  • Android 实现无网络页面切换的示例代码

    本文介绍了Android 实现无网络页面切换的示例代码,分享给大家,具体如下: 实现思路 需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recyclerview或者第三方recyclerview这种需要显示数据的地方,因此决定替换掉页面中所有的recyclerview为无网络页面 实现过程 1 在BaseActivity中,当加载布局成功以后,通过id找到要替换的view,通过indexOfChild()方法,找到要替换的view的位置,再通过remove和add view来

  • Android中wifi与数据流量的切换监听详解

    最近在做一个wifi和移动数据的监控功能,来来回回折腾了一阵子,这个模块的主要功能是监听整个APP的wifi与数据流量的切换,让用户使用专用流量,而不是用wifi,给一个弹窗,点击确认,自动切换数据流量,关闭wifi.我的思路是写一个静态广播,监听在广播里面进行监听,启用系统弹窗,点击确认,自动切换网络,这里面有一个坑就是弹窗会在广播中多次被调用,其实只调用了一次,但是实际上多次调用系统的弹窗会一个叠加一个,搞了好久,终于搞好了,原来是系统广播导致的叠加,详情看代码: 网络封装类Connecti

  • Android实现WIFI和GPRS网络的切换

    在项目的开发中因为要使用到WIFI和GPRS网络的切换,因此就研究了一下通过代码打开WIFI和GPRS的工作. 无论是切换WIFI还是切换GPRS网络都需要设置相应的权限,所以需要在AndroidManifest.xml文件中加入以下几行代码. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="andro

  • Android判断是Wifi还是4G网络代码

    本文实例为大家分享了Android判断是Wifi还是4G网络的具体代码,供大家参考,具体内容如下 package com.chengxinet.bobo.utils; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.telephony.TelephonyManager; /** * Created by Ad

  • Android编程判断是否连接网络的方法【WiFi及3G判断】

    本文实例讲述了Android编程判断是否连接网络的方法.分享给大家供大家参考,具体如下: 判断wifi网络是否链接: public static boolean isWiFiActive(Context inContext) { WifiManager mWifiManager = (WifiManager) inContext .getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = mWifiManager.getConnect

  • Android 连接Wifi和创建Wifi热点的实例

    本文实例讲述了连接Wifi和创建Wifi热点的方法.分享给大家供大家参考,具体如下: android的热点功能不可见,用了反射的技术搞定之外. Eclipse设置语言为utf-8才能查看中文注释 上代码: MainActivity.java package com.widget.hotspot; import android.os.Bundle; import android.app.Activity; import android.content.BroadcastReceiver; impo

  • Android通过wifi连接手机(不需要root)

    Android通过wifi连接手机的方法,供大家参考,具体内容如下 1.首先电脑,手机连接同一个网络 2.在Android studio中Terminal中输入adb devices 3.输入:adb tcpip 5555 4.打开手机,在设置->WLAN->连得wif点击->里查看ip 5.输入:adb connect 192.168.1.108:5555 6.输入:adb devices 在查看下: 完成 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • Android 控制wifi 相关操作实例

    Android 控制WIFI相关操作 WIFI的全称是Wireless Fidelity,又称802.11b标准,是一种高速的无线通信协议,传输速度可以达到11Mb/s. 实际上,对WIFI并不需要过多的控制(当成功连接WIFI后,就可以直接通过IP在WIFI设备之间进行通信了),一般只需要控制打开或关闭WIFI以及获得一些与WIFI相关的信息(例如,MAC地址.IP等). 如果读者的Android手机有WIFI功能,可以在手机上测试本节的例子.要注意的是,WIFI功能不能在Android模拟器

  • Android 7.0 监听网络变化的示例代码

    Android7.0前,Android系统前网络切换时,会发广播,业务只要监听广播即可. public class NetChangeReceiver extends BroadcastReceiver { private static final String ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; @Override public void onReceive(Context conte

  • Android使用BroadcastReceiver监听网络连接状态的改变

    只需要实现下面2段代码即可实现对网络连接状态的监听,千万别忘了在Manifest.xml里面添加网络访问权限哦. 1.定义广播接收器 NetState.java package huaxa.it.map.net; import huaxa.it.map.demo.MapDemo; import com.baidu.mapapi.map.MapView; import android.content.BroadcastReceiver; import android.content.Context

随机推荐