初探WiFi - Wifi开关、信息扫描

接触了很久前端控件的东西,要改改口味,学学后台相关的东西,就先看看WiFi呗。

1.1 Android中的WiFi基本框架

Java应用层     Java应用
Java框架层     Android.net.wifi     
             
                     WiFi的JNI 
C框架层         WAP适配层
                     Wap_supplicant程序
 
内核空间        WiFi内核驱动程序


1.2 Android中WiFi的基本操作

1.2.1 WiFi相关类和接口

(1)ScanResult
主要是通过WiFi来扫描获取机器周边的WiFi热点信息。包括接入点名称、信号强弱、加密模式、频率等。其构造函数中包含几个参数:
  BSSID:接入点的Mac地址
  SSID:接入点的名字
  Capabilities:接入点的加密方式
  Frequency:频率,每一个频道交互的MHz数
  Level:等级,主要来判断网络连接的优先数

(2)WifiConfiguration 配置WiFi 网络,设置加密方式等信息。

(3)WifiInfo 得到WiFi信息
  getBSSID() 获取BSSID
  getDetailedStateOf() 获取客户端的连通性
  getHiddenSSID() 获得SSID 是否被隐藏
  getIpAddress() 获取IP 地址
  getLinkSpeed() 获得连接的速度
  getMacAddress() 获得Mac 地址
  getRssi() 获得802.11n 网络的信号
  getSSID() 获得SSID
  getSupplicanState() 返回具体客户端状态的信息


(4)WifiManage 管理WiFi连接


1.2.2 查询WiFi网卡状态

WIFI网卡的状态是由一系列的整形常量来表示的。
  1.WIFI_STATE_DISABLED : WIFI网卡不可用     (1)
  2.WIFI_STATE_DISABLING : WIFI网卡正在关闭 (0)
  3.WIFI_STATE_ENABLED : WIFI网卡可用         (3)
  4.WIFI_STATE_ENABLING : WIFI网正在打开     (2) (WIFI启动需要一段时间)

  5.WIFI_STATE_UNKNOWN  : 未知网卡状态

1.2.3 注册权限

<!-- 以下是使用wifi访问网络所需的权限 --> 
//修改网络状态的权限 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>  
//修改WiFi状态的权限
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
//访问网络权限 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  
//访问WiFi权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 


1.3 WiFi实例  设置WiFi状态,扫描热点信息

appstart.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

 <LinearLayout
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
<Button  
    android:id="@+id/scan"  
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="扫描网络"  
    />  
<Button  
    android:id="@+id/start"  
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="打开Wifi"  
    />  
<Button  
    android:id="@+id/stop"  
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="关闭Wifi"  
    />  
<Button  
    android:id="@+id/check"  
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:text="Wifi状态"  
    />  
  <TextView  
    android:id="@+id/allNetWork"  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"   
    android:text="当前没有扫描到Wifi网络"  
    />  
    </LinearLayout>
</ScrollView>

WifiAdmin.java   封装了队WIFI的相关操作,例如开启WIFI、关闭WIFI等。
package com.hillfly.com;

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> mWifiConfigurations;
    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.release();
        }
    }
    //创建一个wifiLock
    public void createWifiLock(){
        mWifiLock=mWifiManager.createWifiLock("test");
    }
    //得到配置好的网络
    public List<WifiConfiguration> getConfiguration(){
        return mWifiConfigurations;
    }
    //指定配置好的网络进行连接
    public void connetionConfiguration(int index){
        if(index>mWifiConfigurations.size()){
            return ;
        }
        //连接配置好指定ID的网络
        mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
    }
    public void startScan(){
        mWifiManager.startScan();
        //得到扫描结果
        mWifiList=mWifiManager.getScanResults();
        //得到配置好的网络连接
        mWifiConfigurations=mWifiManager.getConfiguredNetworks();
    }
    //得到网络列表
    public List<ScanResult> getWifiList(){
        return mWifiList;
    }
    //查看扫描结果
    public StringBuffer lookUpScan(){
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<mWifiList.size();i++){
            sb.append("Index_" + new Integer(i + 1).toString() + ":");
             // 将ScanResult信息转换成一个字符串包  
            // 其中把包括:BSSID、SSID、capabilities、frequency、level  
            sb.append((mWifiList.get(i)).toString()).append("\n");
        }
        return sb;  
    }
    public String getMacAddress(){
        return (mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
    }
    public String getBSSID(){
        return (mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
    }
    public int getIpAddress(){
        return (mWifiInfo==null)?0:mWifiInfo.getIpAddress();
    }
    //得到连接的ID
    public int getNetWordId(){
        return (mWifiInfo==null)?0:mWifiInfo.getNetworkId();
    }
    //得到wifiInfo的所有信息
    public String getWifiInfo(){
        return (mWifiInfo==null)?"NULL":mWifiInfo.toString();
    }
    //添加一个网络并连接
    public void addNetWork(WifiConfiguration configuration){
        int wcgId=mWifiManager.addNetwork(configuration);
        mWifiManager.enableNetwork(wcgId, true);
    }
    //断开指定ID的网络
    public void disConnectionWifi(int netId){
        mWifiManager.disableNetwork(netId);
        mWifiManager.disconnect();
    }
}

WifiActivity.java

package com.hillfly.com;

import java.util.List;

import android.app.Activity;
import android.net.wifi.ScanResult;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class WifiActivity extends Activity {
    /** Called when the activity is first created. */
	  private TextView allNetWork;  
	    private Button scan;  
	    private Button start;  
	    private Button stop;  
	    private Button check;  
	    private WifiAdmin mWifiAdmin;  
	    // 扫描结果列表  
	    private List<ScanResult> list;  
	    private ScanResult mScanResult;  
	    private StringBuffer sb=new StringBuffer();  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.appstart);
        mWifiAdmin = new WifiAdmin(WifiActivity.this);  
        init();  
    }
    public void init(){
        allNetWork = (TextView) findViewById(R.id.allNetWork);  
        scan = (Button) findViewById(R.id.scan);  
        start = (Button) findViewById(R.id.start);  
        stop = (Button) findViewById(R.id.stop);  
        check = (Button) findViewById(R.id.check); 
        scan.setOnClickListener(new MyListener());  
        start.setOnClickListener(new MyListener());  
        stop.setOnClickListener(new MyListener());  
        check.setOnClickListener(new MyListener());  
    }
    private class MyListener implements OnClickListener{

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			case R.id.scan://扫描网络
				  getAllNetWorkList();  
				break;
           case R.id.start://打开Wifi
        		mWifiAdmin.openWifi();
				Toast.makeText(WifiActivity.this, "状态:"+mWifiAdmin.checkState(), 1).show();
				break;
           case R.id.stop://关闭Wifi
				mWifiAdmin.closeWifi();
				Toast.makeText(WifiActivity.this, "状态:"+mWifiAdmin.checkState(), 1).show();
				break;
           case R.id.check://Wifi状态
        	   Toast.makeText(WifiActivity.this, "状态:"+mWifiAdmin.checkState(), 1).show();
				break;
			default:
				break;
			}
		}
    	
    }
    public void getAllNetWorkList(){
    	  // 每次点击扫描之前清空上一次的扫描结果  
    	if(sb!=null){
    		sb=new StringBuffer();
    	}
    	//开始扫描网络
    	mWifiAdmin.startScan();
    	list=mWifiAdmin.getWifiList();
    	if(list!=null){
    		for(int i=0;i<list.size();i++){
    			//得到扫描结果
    			mScanResult=list.get(i);
    			sb=sb.append(mScanResult.BSSID+"  ").append(mScanResult.SSID+"   ")
    			.append(mScanResult.capabilities+"   ").append(mScanResult.frequency+"   ")
    			.append(mScanResult.level+"\n\n");
    		}
    		allNetWork.setText("扫描到的wifi网络:\n"+sb.toString());
    	}
    }
}


手机测试结果:
初探WiFi - Wifi开关、信息扫描_第1张图片

你可能感兴趣的:(初探WiFi - Wifi开关、信息扫描)