android wifi的管理方法

作者:李灏

一、什么是wifi

wifi是一种无线联网的技术,以前通过网线链接电脑,现在则是通过无线电波来链接网络。常见的发送无线电波的工具是无线路由器,无线路由器的电波覆盖的有效范围都可以采用wifi方式上网。如果wifi链接了asdl上网线路,则又被称作“热点”。


二、wifi网卡的状态

WIFI网卡的状态是由一系列的整形常量来表示的。

WIFI_STATE_DISABLED  1     WIFI无线网卡不可用

WIFI_STATE_DISABLING 0   WIFI正在关闭

WIFI_STATE_ENABLED   3   WIFI可用

WIFI_STATE_ENABLING  2   WIFI正在打开

WIFI_STATE_UNKNOWN   4   未知网卡状态


三、操作WIFI网卡所需要的权限

关于操作权限可以在帮助文档当中找到完整的列表,在这里列出和网络部分相关的权限。

CHANGE_NETWORK_STATE

CHANGE_WIFI_STATE

ACCESS_NETWORK_STATE

ACCESS_WIFI_STATE

英语字面上的意思已经能够解释了这四个变量的具体含义。


四、修改WIFI网卡的状态

对WIFI网卡进行操作需要通过WIFIManager对象进行,获取该对象的方法如下:

wifiManager =(WifiManager)Context.getSystemService(Service.WIFI_SERVICE);

getSystemService是获取当前环境的系统服务。同理可以用此方法来获取其他系统服务。

打开无线网卡:

            wifiManager.setWifiEnabled(true);

关闭无线网卡:

            wifiManager.setWifiEnabled(false);

获取无线网卡状态:

            wifiManager.getWifiState()


五、示例代码

首先需要在AndroidManifest.xml中添加获取无线网卡状态所需要的权限:


<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>


此实验需要在真机条件下运行,因为模拟器没有办法模拟出无线网卡。如果在模拟器下启动无线网卡之后,无线网卡的状态会被置为4,也就是未知网卡状态(WIFI_STATE_UNKNOWN)。而且在模拟器下运行的时候还需要加一条权限:


<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

具体原因也不知道为什么,运行代码后android日志里面说需要添加这个权限。

主程序中的代码如下:


package com.wifi;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class WIFITestActivity extends Activity {
    /** Called when the activity is first created. */
	private Button startButton = null;
	private Button stopButton = null;
	private Button checkButton = null;
	private WifiManager wifiManager = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        startButton = (Button)this.findViewById(R.id.startButton);
        stopButton = (Button)this.findViewById(R.id.stopButton);
        checkButton = (Button)this.findViewById(R.id.checkButton);
        startButton.setOnClickListener(new StartListener());
        stopButton.setOnClickListener(new StopListener());
        checkButton.setOnClickListener(new CheckListener());
    }
    class StartListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);
			wifiManager.setWifiEnabled(true);
			System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());
		}    	
    }
    class StopListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);
			wifiManager.setWifiEnabled(false);
			System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());
		}    	
    }
    class CheckListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			wifiManager = (WifiManager)WIFITestActivity.this.getSystemService(Context.WIFI_SERVICE);
			System.out.println("当前的网卡状态为:" + wifiManager.getWifiState());
		}    	
    }
           
}


六、运行结果及总结


事件            输出状态

按下start       2(WIFI_STATE_ENABLING)

按下check       3(WIFI_STATE_ENABLED)

按下stop        0(WIFI_STATE_DISABLING)

按下check       1(WIFI_STATE_DISABLED)

对无线网络的监管其实还是有挺大用处的。比如一个需要和网络大量交互的程序,在运行之前可以先判断一下无线网卡的状态,然后对用户进行提醒操作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值