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-10-07 00:14:50

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

iPhone 打开和关闭闪光灯代码

//打开闪光灯-(void)turnOnLed {   AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];   if ([device hasTorch]) {   [device lockForConfiguration:nil];   [device setTorchMode: AVCaptureTorchModeOn];   [device unlockForCon

BUG现象与对应0001文件打开没关闭

 从今天开始,我将发表一系列博闻 和大家探讨一下我以前遇到的一些BUG,这些BUG可能你们遇到过,或者还没有遇到. 希望给后来者提供一些帮助. BUG0001文件打开没关闭 开发语言: C++ 现象: 突然LOG不能输出出了,(刚开始的时候LOG不能写,后来,配置文件也不能读了,程序就什么都做不了了) 后来调试过程中发现下列英文信息: Too many open files. No more file descriptors are available, so no more files c

Android通过tcpdump抓包(wifi, 2g, 3g都可以)

http://blog.csdn.net/deng529828/article/details/20646197 1. 手机要有root权限 2. 下载tcpdump   http://www.strazzere.com/android/tcpdump 3. adb push c:\wherever_you_put\tcpdump /data/local/tcpdump 如果这一步真机无法push,可以用adb push c:\where_you_put\tcpdump /sdcard,即先将文

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

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

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

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

IOS的网络提示(E\2G\3G\4G\WIFI\无网)

1.介绍 网络提示是App开发中不可缺少的模块.现在App需求智能化,要求根据网络的变化可以自动做出合理的处理(包括提示.下载...等).对于网络的处理也非常简单,实现也就几行代码(这是因为,苹果对网络变化进行了整理). 苹果官方提供一个监控网络变化的文件名字为 Reachability.对于Reachability也有其不足的地方,它不能更详细的判断用户是那种手机网络,只是提供给开发者一个统称的表示. 2.官方 Reachability 的介绍 Reachability(官方)的获取方法是打开

Android 统计Wifi/2G/3G/4G流量

需求: 统计Wifi/2G/3G/4G流量各多少 Issue: 一. 怎么判断2G/3G/4G 系统源码TelephonyManager类里提供了方法,只是隐藏了,所以可以参源码 二.怎么统计 Android 2.2后提供TrafficStats类,用来进行流量统计,具体使用参考手册 这里我用到了 static long  getTotalRxBytes()  //获取总的接受字节数,包含Mobile和WiFi等 static long  getTotalTxBytes()  //总的发送字节数

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

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

android如何判断当前网络类型(联网,2g,3g,wifi等)

一般对网络的判断都是判断是否联网,不过有时候我们需要知道具体的网络类型,比如在3g网络下,百度地图的定位功能存在很大的偏差,这就需要提前判断网络类型针对3g网络情况做特殊的处理. 关于Android如何检测网络的类型,网上代码很多,但是有用的不多,真正解决了问题的我只找到一篇(见文章末尾网址),为了更好的方便自己理解,对这片文章做了解释和整理. 在android中判断网络需要用到ConnectivityManager,下面的方法演示了如何用ConnectivityManager判断当前是否联网: