Android之Wifi学习(2)——连接Wifi

  1. package org.sunchao;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.ScrollView;
  9. import android.widget.TextView;
  10. public class Main extends Activity implements OnClickListener {
  11.     // 右侧滚动条按钮
  12.     private ScrollView sView;
  13.     private Button openNetCard;
  14.     private Button closeNetCard;
  15.     private Button checkNetCardState;
  16.     private Button scan;
  17.     private Button getScanResult;
  18.     private Button connect;
  19.     private Button disconnect;
  20.     private Button checkNetWorkState;
  21.     private TextView scanResult;
  22.     private String mScanResult;
  23.     private WifiAdmin mWifiAdmin;
  24.     /** Called when the activity is first created. */
  25.     @Override
  26.     public void onCreate(Bundle savedInstanceState) {
  27.         super.onCreate(savedInstanceState);
  28.         setContentView(R.layout.main);
  29.         mWifiAdmin = new WifiAdmin(Main.this);
  30.         init();
  31.     }
  32.     /**
  33.      * 按钮等控件的初始化
  34.      */
  35.     public void init() {
  36.         sView = (ScrollView) findViewById(R.id.mScrollView);
  37.         openNetCard = (Button) findViewById(R.id.openNetCard);
  38.         closeNetCard = (Button) findViewById(R.id.closeNetCard);
  39.         checkNetCardState = (Button) findViewById(R.id.checkNetCardState);
  40.         scan = (Button) findViewById(R.id.scan);
  41.         getScanResult = (Button) findViewById(R.id.getScanResult);
  42.         scanResult = (TextView) findViewById(R.id.scanResult);
  43.         connect = (Button) findViewById(R.id.connect);
  44.         disconnect = (Button) findViewById(R.id.disconnect);
  45.         checkNetWorkState = (Button) findViewById(R.id.checkNetWorkState);
  46.         openNetCard.setOnClickListener(Main.this);
  47.         closeNetCard.setOnClickListener(Main.this);
  48.         checkNetCardState.setOnClickListener(Main.this);
  49.         scan.setOnClickListener(Main.this);
  50.         getScanResult.setOnClickListener(Main.this);
  51.         connect.setOnClickListener(Main.this);
  52.         disconnect.setOnClickListener(Main.this);
  53.         checkNetWorkState.setOnClickListener(Main.this);
  54.     }
  55.     /**
  56.      * WIFI_STATE_DISABLING 0 WIFI_STATE_DISABLED 1 WIFI_STATE_ENABLING 2
  57.      * WIFI_STATE_ENABLED 3
  58.      */
  59.     public void openNetCard() {
  60.         mWifiAdmin.openNetCard();
  61.     }
  62.     public void closeNetCard() {
  63.         mWifiAdmin.closeNetCard();
  64.     }
  65.     public void checkNetCardState() {
  66.         mWifiAdmin.checkNetCardState();
  67.     }
  68.     public void scan() {
  69.         mWifiAdmin.scan();
  70.     }
  71.     public void getScanResult() {
  72.         mScanResult = mWifiAdmin.getScanResult();
  73.         scanResult.setText(mScanResult);
  74.     }
  75.     public void connect() {
  76.         mWifiAdmin.connect();
  77. //      startActivityForResult(new Intent(
  78. //              android.provider.Settings.ACTION_WIFI_SETTINGS), 0);
  79.         startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
  80.     }
  81.     public void disconnect() {
  82.         mWifiAdmin.disconnectWifi();
  83.     }
  84.     public void checkNetWorkState() {
  85.         mWifiAdmin.checkNetWorkState();
  86.     }
  87.     @Override
  88.     public void onClick(View v) {
  89.         switch (v.getId()) {
  90.         case R.id.openNetCard:
  91.             openNetCard();
  92.             break;
  93.         case R.id.closeNetCard:
  94.             closeNetCard();
  95.             break;
  96.         case R.id.checkNetCardState:
  97.             checkNetCardState();
  98.             break;
  99.         case R.id.scan:
  100.             scan();
  101.             break;
  102.         case R.id.getScanResult:
  103.             getScanResult();
  104.             break;
  105.         case R.id.connect:
  106.             connect();
  107.             break;
  108.         case R.id.disconnect:
  109.             disconnect();
  110.             break;
  111.         case R.id.checkNetWorkState:
  112.             checkNetWorkState();
  113.             break;
  114.         default:
  115.             break;
  116.         }
  117.     }
  118. }

Wifi工具类:

  1. package org.sunchao;
  2. import java.util.List;
  3. import android.content.Context;
  4. import android.net.wifi.ScanResult;
  5. import android.net.wifi.WifiConfiguration;
  6. import android.net.wifi.WifiInfo;
  7. import android.net.wifi.WifiManager;
  8. import android.net.wifi.WifiManager.WifiLock;
  9. import android.util.Log;
  10. public class WifiAdmin {
  11.     private final static String TAG = “WifiAdmin”;
  12.     private StringBuffer mStringBuffer = new StringBuffer();
  13.     private List<ScanResult> listResult;
  14.     private ScanResult mScanResult;
  15.     // 定义WifiManager对象
  16.     private WifiManager mWifiManager;
  17.     // 定义WifiInfo对象
  18.     private WifiInfo mWifiInfo;
  19.     // 网络连接列表
  20.     private List<WifiConfiguration> mWifiConfiguration;
  21.     // 定义一个WifiLock
  22.     WifiLock mWifiLock;
  23.     /**
  24.      * 构造方法
  25.      */
  26.     public WifiAdmin(Context context) {
  27.         mWifiManager = (WifiManager) context
  28.                 .getSystemService(Context.WIFI_SERVICE);
  29.         mWifiInfo = mWifiManager.getConnectionInfo();
  30.     }
  31.     /**
  32.      * 打开Wifi网卡
  33.      */
  34.     public void openNetCard() {
  35.         if (!mWifiManager.isWifiEnabled()) {
  36.             mWifiManager.setWifiEnabled(true);
  37.         }
  38.     }
  39.     /**
  40.      * 关闭Wifi网卡
  41.      */
  42.     public void closeNetCard() {
  43.         if (mWifiManager.isWifiEnabled()) {
  44.             mWifiManager.setWifiEnabled(false);
  45.         }
  46.     }
  47.     /**
  48.      * 检查当前Wifi网卡状态
  49.      */
  50.     public void checkNetCardState() {
  51.         if (mWifiManager.getWifiState() == 0) {
  52.             Log.i(TAG, “网卡正在关闭”);
  53.         } else if (mWifiManager.getWifiState() == 1) {
  54.             Log.i(TAG, “网卡已经关闭”);
  55.         } else if (mWifiManager.getWifiState() == 2) {
  56.             Log.i(TAG, “网卡正在打开”);
  57.         } else if (mWifiManager.getWifiState() == 3) {
  58.             Log.i(TAG, “网卡已经打开”);
  59.         } else {
  60.             Log.i(TAG, “—_—晕……没有获取到状态—_—“);
  61.         }
  62.     }
  63.     /**
  64.      * 扫描周边网络
  65.      */
  66.     public void scan() {
  67.         mWifiManager.startScan();
  68.         listResult = mWifiManager.getScanResults();
  69.         if (listResult != null) {
  70.             Log.i(TAG, “当前区域存在无线网络,请查看扫描结果”);
  71.         } else {
  72.             Log.i(TAG, “当前区域没有无线网络”);
  73.         }
  74.     }
  75.     /**
  76.      * 得到扫描结果
  77.      */
  78.     public String getScanResult() {
  79.         // 每次点击扫描之前清空上一次的扫描结果
  80.         if (mStringBuffer != null) {
  81.             mStringBuffer = new StringBuffer();
  82.         }
  83.         // 开始扫描网络
  84.         scan();
  85.         listResult = mWifiManager.getScanResults();
  86.         if (listResult != null) {
  87.             for (int i = 0; i < listResult.size(); i++) {
  88.                 mScanResult = listResult.get(i);
  89.                 mStringBuffer = mStringBuffer.append(“NO.”).append(i + 1)
  90.                         .append(” :”).append(mScanResult.SSID).append(“->”)
  91.                         .append(mScanResult.BSSID).append(“->”)
  92.                         .append(mScanResult.capabilities).append(“->”)
  93.                         .append(mScanResult.frequency).append(“->”)
  94.                         .append(mScanResult.level).append(“->”)
  95.                         .append(mScanResult.describeContents()).append(“nn”);
  96.             }
  97.         }
  98.         Log.i(TAG, mStringBuffer.toString());
  99.         return mStringBuffer.toString();
  100.     }
  101.     /**
  102.      * 连接指定网络
  103.      */
  104.     public void connect() {
  105.         mWifiInfo = mWifiManager.getConnectionInfo();
  106.     }
  107.     /**
  108.      * 断开当前连接的网络
  109.      */
  110.     public void disconnectWifi() {
  111.         int netId = getNetworkId();
  112.         mWifiManager.disableNetwork(netId);
  113.         mWifiManager.disconnect();
  114.         mWifiInfo = null;
  115.     }
  116.     /**
  117.      * 检查当前网络状态
  118.      * 
  119.      * @return String
  120.      */
  121.     public void checkNetWorkState() {
  122.         if (mWifiInfo != null) {
  123.             Log.i(TAG, “网络正常工作”);
  124.         } else {
  125.             Log.i(TAG, “网络已断开”);
  126.         }
  127.     }
  128.     /**
  129.      * 得到连接的ID
  130.      */
  131.     public int getNetworkId() {
  132.         return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
  133.     }
  134.     /**
  135.      * 得到IP地址
  136.      */
  137.     public int getIPAddress() {
  138.         return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
  139.     }
  140.     // 锁定WifiLock
  141.     public void acquireWifiLock() {
  142.         mWifiLock.acquire();
  143.     }
  144.     // 解锁WifiLock
  145.     public void releaseWifiLock() {
  146.         // 判断时候锁定
  147.         if (mWifiLock.isHeld()) {
  148.             mWifiLock.acquire();
  149.         }
  150.     }
  151.     // 创建一个WifiLock
  152.     public void creatWifiLock() {
  153.         mWifiLock = mWifiManager.createWifiLock(“Test”);
  154.     }
  155.     // 得到配置好的网络
  156.     public List<WifiConfiguration> getConfiguration() {
  157.         return mWifiConfiguration;
  158.     }
  159.     // 指定配置好的网络进行连接
  160.     public void connectConfiguration(int index) {
  161.         // 索引大于配置好的网络索引返回
  162.         if (index >= mWifiConfiguration.size()) {
  163.             return;
  164.         }
  165.         // 连接配置好的指定ID的网络
  166.         mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
  167.                 true);
  168.     }
  169.     // 得到MAC地址
  170.     public String getMacAddress() {
  171.         return (mWifiInfo == null) ? “NULL” : mWifiInfo.getMacAddress();
  172.     }
  173.     // 得到接入点的BSSID
  174.     public String getBSSID() {
  175.         return (mWifiInfo == null) ? “NULL” : mWifiInfo.getBSSID();
  176.     }
  177.     // 得到WifiInfo的所有信息包
  178.     public String getWifiInfo() {
  179.         return (mWifiInfo == null) ? “NULL” : mWifiInfo.toString();
  180.     }
  181.     // 添加一个网络并连接
  182.     public int addNetwork(WifiConfiguration wcg) {
  183.         int wcgID = mWifiManager.addNetwork(mWifiConfiguration.get(3));
  184.         mWifiManager.enableNetwork(wcgID, true);
  185.         return wcgID;
  186.     }
  187. }

AndroidManifest.xml:(注意需要添加的权限)

  1. <?xml version=“1.0” encoding=“utf-8”?>
  2. <manifest xmlns:android=“http://schemas.android.com/apk/res/android”
  3.     package=“org.sunchao” android:versionCode=“1” android:versionName=“1.0”>
  4.     <uses-sdk android:minSdkVersion=“8” />
  5.     <application android:icon=“@drawable/icon” android:label=“@string/app_name”>
  6.         <activity android:name=“.Main” android:label=“@string/app_name”>
  7.             <intent-filter>
  8.                 <action android:name=“android.intent.action.MAIN” />
  9.                 <category android:name=“android.intent.category.LAUNCHER” />
  10.             </intent-filter>
  11.         </activity>
  12.     </application>
  13.     <!– 以下是使用wifi访问网络所需的权限 –>
  14.     <uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE”></uses-permission>
  15.     <uses-permission android:name=“android.permission.CHANGE_WIFI_STATE”></uses-permission>
  16.     <uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”></uses-permission>
  17.     <uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”></uses-permission>
  18. </manifest>

布局文件就不贴了,我想看界面你都可以自己写出来,如果有需要,这里可以下载源代码:http://download.csdn.net/source/3449837