Android开发WiFi的基本使用

Android本身自带了一些对WiFi操作的包,在android.net.wifi包里面。简单介绍一下:
大致可以分为四个主要的类ScanResult,wifiConfiguration,WifiInfo,WifiManager:
1、ScanResult:
主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。

2、wifiConfiguration: 在我们连通一个wifi 接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。

3、WifiInfo: 在我们的wifi 已经连通了以后,可以通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:
getBSSID()    //获取BSSID
getDetailedStateOf()    //获取客户端的连通性
getHiddenSSID()    //获得SSID 是否被隐藏
getIpAddress()    //获取IP 地址
getLinkSpeed()    //获得连接的速度
getMacAddress()    //获得Mac 地址
getRssi()    //获得802.11n 网络的信号

getSSID()    //获得SSID

getSupplicanState()    //返回具体客户端状态的信息


4、wifiManager :这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。

Wifi状态有以下几种:(括号内为所对应的的int值)

1. wifiManager.WIFI_STATE_DISABLED (1)      //WIFI网卡不可用
2. wifiManager.WIFI_STATE_ENABLED (3)       //WIFI网卡可用
3. wifiManager.WIFI_STATE_DISABLING (0)       //WIFI网卡正在关闭
4 .wifiManager.WIFI_STATE_ENABLING (2)       //WIFI网卡正在打开
5. wifiManager.WIFI_STATE_UNKNOWN (4)       //WIFI网卡状态不可知



要操作WiFi设备,就要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WiFi设备。

addNetwork(WifiConfiguration config)//添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。

calculateSignalLevel(int rssi , int numLevels)//计算信号的等级 
compareSignalLevel(int rssiA, int rssiB)//对比网络A和网络B的信号强度 
createWifiLock(int lockType, String tag)//创建一个WIFI 锁,锁定当前的WIFI连接 
disableNetwork(int netId)//让一个网络连接失效 
disconnect()//断开当前的WIFI连接 
enableNetwork(int netId, Boolean disableOthers)//连接netId所指的WIFI网络,并是其他的网络都被禁用 
getConfiguredNetworks()//获取网络连接的状态 
getConnectionInfo()//获取当前连接的信息 

getDhcpInfo()//获取DHCP 的信息 

getScanResulats()//获取扫描测试的结果 
getWifiState()//获取当前WIFI设备的状态 
isWifiEnabled()//判断WIFI设备是否打开 
pingSupplicant()//ping操作,和PC的ping操作相同作用 
ressociate()//重新连接WIFI网络,即使该网络是已经被连接上的 
reconnect()//重新连接一个未连接上的WIFI网络 
removeNetwork()//移除某一个网络 
saveConfiguration()//保留一个配置信息 
setWifiEnabled()//让一个连接有效 
startScan()//开始扫描 

updateNetwork(WifiConfiguration config)//更新一个网络连接


其实网上的人已经把WiFiAdmin集成的非常好了,我就直接拿来用:


import java.util.List;    
import android.content.Context;  
import android.net.wifi.ScanResult;  
import android.net.wifi.WifiConfiguration;  
import android.net.wifi.WifiInfo;  
import android.net.wifi.WifiManager;  
import android.net.wifi.WifiManager.WifiLock;  
  
public class WifiAdmin {  
    // 定义WifiManager对象  
    private WifiManager mWifiManager;  
    // 定义WifiInfo对象  
    private WifiInfo mWifiInfo;  
    // 扫描出的网络连接列表  
    private List<ScanResult> mWifiList;  
    // 网络连接列表  
    private List<WifiConfiguration> mWifiConfiguration;  
    // 定义一个WifiLock  
    WifiLock mWifiLock;  
  
    // 构造器  
    public WifiAdmin(Context context) {  
        // 取得WifiManager对象  
        mWifiManager = (WifiManager) context  
                .getSystemService(Context.WIFI_SERVICE);  
        // 取得WifiInfo对象  
        mWifiInfo = mWifiManager.getConnectionInfo();  
    }  
  
    // 打开WIFI  
    public void openWifi() {  
        if (!mWifiManager.isWifiEnabled()) {  
            mWifiManager.setWifiEnabled(true);  
        }  
    }  
  
    // 关闭WIFI  
    public void closeWifi() {  
        if (mWifiManager.isWifiEnabled()) {  
            mWifiManager.setWifiEnabled(false);  
        }  
    }  
  
    // 检查当前WIFI状态  
    public int checkState() {  
        return mWifiManager.getWifiState();  
    }  
  
    // 锁定WifiLock  
    public void acquireWifiLock() {  
        mWifiLock.acquire();  
    }  
  
    // 解锁WifiLock  
    public void releaseWifiLock() {  
        // 判断时候锁定  
        if (mWifiLock.isHeld()) {  
            mWifiLock.acquire();  
        }  
    }  
  
    // 创建一个WifiLock  
    public void creatWifiLock() {  
        mWifiLock = mWifiManager.createWifiLock("Test");  
    }  
  
    // 得到配置好的网络  
    public List<WifiConfiguration> getConfiguration() {  
        return mWifiConfiguration;  
    }  
  
    // 指定配置好的网络进行连接  
    public void connectConfiguration(int index) {  
        // 索引大于配置好的网络索引返回  
        if (index > mWifiConfiguration.size()) {  
            return;  
        }  
        // 连接配置好的指定ID的网络  
        mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,  
                true);  
    }  
  
    public void startScan() {  
        mWifiManager.startScan();  
        // 得到扫描结果  
        mWifiList = mWifiManager.getScanResults();  
        // 得到配置好的网络连接  
        mWifiConfiguration = mWifiManager.getConfiguredNetworks();  
    }  
  
    // 得到网络列表  
    public List<ScanResult> getWifiList() {  
        return mWifiList;  
    }  
  
    // 查看扫描结果  
    public StringBuilder lookUpScan() {  
        StringBuilder stringBuilder = new StringBuilder();  
        for (int i = 0; i < mWifiList.size(); i++) {  
            stringBuilder  
                    .append("Index_" + new Integer(i + 1).toString() + ":");  
            // 将ScanResult信息转换成一个字符串包  
            // 其中把包括:BSSID、SSID、capabilities、frequency、level  
            stringBuilder.append((mWifiList.get(i)).toString());  
            stringBuilder.append("/n");  
        }  
        return stringBuilder;  
    }  
  
    // 得到MAC地址  
    public String getMacAddress() {  
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();  
    }  
  
    // 得到接入点的BSSID  
    public String getBSSID() {  
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();  
    }  
    
    // 得到接入点的SSID  
    public String getSSID() {  
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();  
    }  
  
    // 得到IP地址  
    public int getIPAddress() {  
        return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();  
    }  
  
    // 得到连接的ID  
    public int getNetworkId() {  
        return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();  
    }  
  
    // 得到WifiInfo的所有信息包  
    public String getWifiInfo() {  
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();  
    }  
  
    // 添加一个网络并连接  
    public void addNetwork(WifiConfiguration wcg) {  
        int wcgID = mWifiManager.addNetwork(wcg);  
        mWifiManager.enableNetwork(wcgID, true);  
    }  
  
    // 断开指定ID的网络  
    public void disconnectWifi(int netId) {  
        mWifiManager.disableNetwork(netId);  
        mWifiManager.disconnect();  
    }  
} 


新建一个Android项目,activity_main.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/scan"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="扫描网络" />

            <Button
                android:id="@+id/start"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="打开Wifi" />

            <Button
                android:id="@+id/stop"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="关闭WiFi" />

            <Button
                android:id="@+id/check"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Wifi状态" />
        </LinearLayout>

        <TextView
            android:id="@+id/tv_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示点击的信息" />
    </LinearLayout>


MainActivity.Java文件:

public class MainActivity extends ActionBarActivity implements OnClickListener {
	private TextView tv_content;

	private Button scan;
	private Button start;
	private Button stop;
	private Button check;
	private WifiAdmin mWifiAdmin;
	// 扫描结果列表
	private List<ScanResult> list;
	private ScanResult mScanResult;
	private StringBuffer mStringBuffer = new StringBuffer();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mWifiAdmin = new WifiAdmin(MainActivity.this);  
		InitView();
	}

	private void InitView() {
		scan = (Button) findViewById(R.id.scan);
		start = (Button) findViewById(R.id.start);
		stop = (Button) findViewById(R.id.stop);
		check = (Button) findViewById(R.id.check);
		tv_content = (TextView) findViewById(R.id.tv_content);

		scan.setOnClickListener(this);
		start.setOnClickListener(this);
		stop.setOnClickListener(this);
		check.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.scan:
			getAllNetWorkList();
			break;
		case R.id.start:
			start();
			break;
		case R.id.stop:
			stop();
			break;
		case R.id.check:
			check();
			break;

		}

	}

	public void start() {
		mWifiAdmin.openWifi();
		Toast.makeText(MainActivity.this,
				"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
				.show();
	}

	public void stop() {
		mWifiAdmin.closeWifi();
		Toast.makeText(MainActivity.this,
				"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
				.show();
	}

	public void check() {
		Toast.makeText(MainActivity.this,
				"当前Wifi网卡状态为" + mWifiAdmin.checkState(), Toast.LENGTH_SHORT)
				.show();
	}

	public void getAllNetWorkList() {
		// 每次点击扫描之前清空上一次的扫描结果
		if (mStringBuffer != null) {
			mStringBuffer = new StringBuffer();
		}

		// 开始扫描网络
		mWifiAdmin.startScan();
		list = mWifiAdmin.getWifiList();

		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				mScanResult = list.get(i);
				// 得到网络的SSID:the network name
				mStringBuffer = mStringBuffer.append(mScanResult.SSID)
						.append("; ").append(mScanResult.BSSID)
						.append("; ").append(mScanResult.capabilities)
						.append("; ").append(mScanResult.frequency)
						.append("; ").append(mScanResult.level)
						.append("\n\n");
			}
			tv_content.setText("扫描到的所有Wifi网络:\n" + mStringBuffer.toString());
		}
	}

}

别忘了在AndroidManifest.xml中增加相关的权限:



运行结果:


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值