WIFI和移动数据(2G/3G)的打开和关闭的代码实现

MainActivity如下:

package cc.vv;

import java.lang.reflect.Method;

import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Context;
/**
 * Demo描述:
 * 1 打开和关闭Wifi
 * 2 打开和关闭设备的移动数据(2G/3G)
 *
 *
 * 注意权限:
 * <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 * <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 * <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 * <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 * <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 *
 * 参考资料:
 * 1 http://blog.csdn.net/u011485531/article/details/18016351
 * 2 http://blog.csdn.net/li_star/article/details/38758453
 *   Thank you very much
 */
public class MainActivity extends Activity {
    private Button mOpenWifiButton;
    private Button mCloseWifiButton;
    private Button mOpenMobileDataButton;
    private Button mCloseMobileDataButton;
    private Context mContext;
    private ClickListenerImpl mClickListenerImpl;
    private WifiManager mWifiManager;
    private TelephonyManager mTelephonyManager;
    private ConnectivityManager mConnectivityManager;
    private boolean isMobileDataEnabled=false;
    private Method mMethod;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mContext=this;
		mClickListenerImpl=new ClickListenerImpl();

		mWifiManager=(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
		mConnectivityManager=(ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
		mTelephonyManager=(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
		//判断当前手机是否在使用MobileData(移动数据)
		if (mTelephonyManager.getDataState()==TelephonyManager.DATA_CONNECTED) {
			isMobileDataEnabled=true;
		}

		mOpenWifiButton=(Button) findViewById(R.id.openWifiButton);
		mOpenWifiButton.setOnClickListener(mClickListenerImpl);

		mCloseWifiButton=(Button) findViewById(R.id.closeWifiButton);
		mCloseWifiButton.setOnClickListener(mClickListenerImpl);

		mOpenMobileDataButton=(Button) findViewById(R.id.openMobileDataButton);
		mOpenMobileDataButton.setOnClickListener(mClickListenerImpl);

		mCloseMobileDataButton=(Button) findViewById(R.id.closeMobileDataButton);
		mCloseMobileDataButton.setOnClickListener(mClickListenerImpl);

	}

	private class ClickListenerImpl implements OnClickListener {
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.openWifiButton:
				openWifi();
				break;
			case R.id.closeWifiButton:
				closeWifi();
				break;
			case R.id.openMobileDataButton:
				openMobileData();
				break;
			case R.id.closeMobileDataButton:
				closeMobileData();
				break;
			default:
				break;
			}
		}

	}

	//打开Wifi
	private void openWifi(){
		if (!mWifiManager.isWifiEnabled()) {
			mWifiManager.setWifiEnabled(true);
		}
	}

	//关闭Wifi
	private void closeWifi(){
		if (mWifiManager.isWifiEnabled()) {
			mWifiManager.setWifiEnabled(false);
		}
	}

	//打开移动数据
	private void openMobileData(){
		if (!isMobileDataEnabled) {
			try {
				mMethod=ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
				mMethod.invoke(mConnectivityManager, true);
				isMobileDataEnabled=true;
			} catch (Exception e) {
			}

		}
	}

	//关闭移动数据
    private void closeMobileData(){
    	if (isMobileDataEnabled) {
			try {
				mMethod=ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
				mMethod.invoke(mConnectivityManager, false);
				isMobileDataEnabled=false;
			} catch (Exception e) {
			}

		}
	}

}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <Button
        android:id="@+id/openWifiButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dip"
        android:text="打开wifi" />

     <Button
        android:id="@+id/closeWifiButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/openWifiButton"
        android:layout_marginTop="30dip"
        android:text="关闭wifi" />

      <Button
        android:id="@+id/openMobileDataButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/closeWifiButton"
        android:layout_marginTop="30dip"
        android:text="打开移动数据" />

       <Button
        android:id="@+id/closeMobileDataButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/openMobileDataButton"
        android:layout_marginTop="30dip"
        android:text="关闭移动数据" />

</RelativeLayout>
时间: 2024-09-18 22:32:52

WIFI和移动数据(2G/3G)的打开和关闭的代码实现的相关文章

android 如何使用代码切换2G/3G网络?

问题描述 android 如何使用代码切换2G/3G网络? android 如何使用代码切换2G/3G网络?试着在settings里找,但没找到,不知道在哪个地方.求高手赐教!谢谢! 解决方案 好像比较困难 如果你能自主切换这个 需要改到telephony层还有ril层的东西 的确modem给上层提供这个接口了 但是telephony层并没有给你提供 在rild是可以看到的 你搜一下 requestQueryNetworkSelectionMode 这个是查询网络的 但是没有开放+cops的设置

Android判断用户2G/3G/4G移动数据网络_Android

在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据. 通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,

Android判断网络类型的方法(2g,3g还是wifi)_Android

本文实例讲述了Android判断网络类型的方法.分享给大家供大家参考,具体如下: 判断网络类型是wifi,还是3G,还是2G网络,对不同的网络进行不同的处理,现将判断方法整理给大家,以供参考 说明:下面用到的数据移动2G,联通2G,联通3G,wifi我都已经测试过,暂时手上没有电信的卡,所以没有验证,有电信手机的同事,可以验证一下,验证后将结果发送给大家. ConnectivityManager connectMgr = (ConnectivityManager) this .getSystem

android 代码实现 wifi切换到2G,3G,4G网络

问题描述 android 代码实现 wifi切换到2G,3G,4G网络 求android 代码实现 wifi切换到2G,3G,4G网络,不知道能不能实现,求各位大神解答下, 不甚感激 解决方案 参考Android 判断用户2G/3G/4G移动数据网络开发(一)" rel="nofollow">android之wifi开发(一)android开发(12) 使用无线网络和切换到GPRS连接

Android判断用户2G/3G/4G移动数据网络

在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G / 3G / 4G 网络条件下,是否允许请求一些流量比较大的数据. 通过 Android 提供的 TelephonyManager 和 ConnectivityManager 都可以获取到 NetworksInfo 对象,可以通过 getType() 获取类型,判断是 wifi 还是 mobile ,

android 强制2G/3G或WIFI 优先上网

android开发中有时候需要设定程序连接网络优先 2G/3G 或 WIFI,下面片段代码给出设置方法: public void setPreferredNetwork(int networkType) { ConnectivityManager connMgr = (ConnectivityManager) this.context.getSystemService("connectivity"); if (networkType == NetworkType.TYPE_MOBILE

中兴实现LTE网与2G/3G网手机IP语音通话

腾讯科技讯(郭晓峰)11月17日消息,腾讯科技从中兴通讯获悉,中兴通讯通过CSL的LTE网络,展示了基于IMS的IPhttp://www.aliyun.com/zixun/aggregation/9064.html">语音通话,不但实现了IMS软终端之间的VoLTE(Voice over LTE)通话,同时实现了IMS软终端与2G/3G现网手机之间的IP语音,这是业界首次成功实现LTE网络与2G/3G现网之间的互通. 今年7月,中兴通讯为CSL部署全球首个商用1800MHz/2600MHz

华为成沃达丰捷克2G/3G网络独家供应商

7月10日消息,华为与沃达丰近日联合宣布,沃达丰选择华为作为其在捷克的2G/3G网络的唯一供应商. 沃达丰授予华为的合同为期5年,内容为华为将采用业界领先的SingleRAN解决方案为沃达丰在捷克的3G网络进行扩容,以满足当地用户对移动数据业务的强烈需求.项目首先将持续扩大对捷克首都布拉格和捷克第二大城市布尔诺的3G网络覆盖,同时将对沃达丰捷克现有的2G EDGE网络进行升级和扩容. "在捷克,有近五十万的用户通过手机和笔记本电脑在使用我们的移动数据业务.为了满足用户的需求,我们将持续建设我们的

人大代表郑杰建议2G+3G+WLAN发展无线

新浪科技讯 3月6日消息,全国"两会"期间,全国人大代表.中国移动安徽公司总经理郑杰表示,大力发展无线城市将可使百姓享受到无时不在的无线互联信息服务,有百益而无一害.郑杰此次带来了2个议案.4个建议,涉及宽带建设.社会管理.文化建设.食品安全监管以及中小企业信用担保.见义勇为立法等多个方面,他尤其关注无线城市领域."将云计算.物联网.移动互联网等技术和无线城市结合起来,可以为各行各业.百姓生活提供更低的成本.更高的效率和更好的信息化解决方案",郑杰如此表示.他以安徽