Android之Wifi学习教程

Android中对Wifi操作,android本身提供了一些有用的包,在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 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。

介绍完了,开始写一个Demo吧。程序已启动效果图如下:

0_1310114837NVrG.gif

看代码,其中有注释,我就不多说了。

布局文件代码:


  1. <scrollview xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     android:id="@+id/mScrollView" android:layout_width="fill_parent"  
  3.     android:layout_height="wrap_content" android:scrollbars="vertical">
  4. <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  5.     android:orientation="vertical"
  6.     android:layout_width="fill_parent"
  7.     android:layout_height="fill_parent"
  8.     >
  9. <textview
  10.     android:id="@+id/allNetWork"
  11.     android:layout_width="fill_parent"
  12.     android:layout_height="wrap_content" 
  13.     android:text="当前没有扫描到Wifi网络"
  14.     />
  15. <button
  16.     android:id="@+id/scan"
  17.     android:layout_width="wrap_content" 
  18.     android:layout_height="wrap_content" 
  19.     android:text="扫描网络"
  20.     />
  21. <button
  22.     android:id="@+id/start"
  23.     android:layout_width="wrap_content" 
  24.     android:layout_height="wrap_content" 
  25.     android:text="打开Wifi"
  26.     />
  27. <button
  28.     android:id="@+id/stop"
  29.     android:layout_width="wrap_content" 
  30.     android:layout_height="wrap_content" 
  31.     android:text="关闭Wifi"
  32.     />
  33. <button
  34.     android:id="@+id/check"
  35.     android:layout_width="wrap_content" 
  36.     android:layout_height="wrap_content" 
  37.     android:text="Wifi状态"
  38.     />
  39. </button
  40. </button
  41. </button
  42. </button
  43. </textview
复制代码
上面布局文件中的ScrollView用来在Activity中显示右侧滚动条,如果数据多的话,则可以往下滑动继续显示未显示完的数据。主页面代码:
  1. package org.sunchao;

  2. import java.util.List;

  3. import android.app.Activity;
  4. import android.net.wifi.ScanResult;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. import android.widget.ScrollView;
  10. import android.widget.TextView;
  11. import android.widget.Toast;

  12. public class Main extends Activity implements OnClickListener {
  13.         // 右侧滚动条按钮
  14.         private ScrollView sView; 
  15.         private TextView allNetWork;
  16.         private Button scan;
  17.         private Button start;
  18.         private Button stop;
  19.         private Button check;
  20.         private WifiAdmin mWifiAdmin;
  21.         // 扫描结果列表
  22.         private List list;
  23.         private ScanResult mScanResult;
  24.         private StringBuffer mStringBuffer = new StringBuffer();

  25.         /** Called when the activity is first created. */
  26.         @Override
  27.         public void onCreate(Bundle savedInstanceState) {
  28.                 super.onCreate(savedInstanceState);
  29.                 setContentView(R.layout.main);
  30.                 mWifiAdmin = new WifiAdmin(Main.this);
  31.                 init();
  32.         }

  33.         // 按钮的初始化
  34.         public void init() {
  35.                 sView = (ScrollView) findViewById(R.id.mScrollView);
  36.                 allNetWork = (TextView) findViewById(R.id.allNetWork);
  37.                 scan = (Button) findViewById(R.id.scan);
  38.                 start = (Button) findViewById(R.id.start);
  39.                 stop = (Button) findViewById(R.id.stop);
  40.                 check = (Button) findViewById(R.id.check);
  41.                 scan.setOnClickListener(Main.this);
  42.                 start.setOnClickListener(Main.this);
  43.                 stop.setOnClickListener(Main.this);
  44.                 check.setOnClickListener(Main.this);
  45.         }

  46.         // WIFI_STATE_DISABLING 0
  47.         // WIFI_STATE_DISABLED 1
  48.         // WIFI_STATE_ENABLING 2
  49.         // WIFI_STATE_ENABLED 3
  50.         public void start() {
  51.                 mWifiAdmin.openWifi();
  52.                 Toast.makeText(Main.this, "当前Wifi网卡状态为" + mWifiAdmin.checkState(),
  53.                                 Toast.LENGTH_SHORT).show();
  54.         }

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

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

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

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

  72.                 if (list != null) {
  73.                         for (int i = 0; i < list.size(); i++) {
  74.                                 mScanResult = list.get(i);
  75.                                 // 得到网络的SSID:the network name
  76.                                 mStringBuffer = mStringBuffer
  77.                                         .append(mScanResult.SSID).append("        ")
  78.                                         .append(mScanResult.BSSID).append("        ")
  79.                                         .append(mScanResult.capabilities).append("        ")
  80.                                         .append(mScanResult.frequency).append("        ")
  81.                                         .append(mScanResult.level).append("        ")
  82.                                         .append("");
  83.                         }
  84.                         allNetWork.setText("扫描到的所有Wifi网络:" + mStringBuffer.toString());
  85.                 }
  86.         }

  87.         @Override
  88.         public void onClick(View v) {
  89.                 switch (v.getId()) {
  90.                 case R.id.scan:
  91.                         getAllNetWorkList();
  92.                         break;
  93.                 case R.id.start:
  94.                         start();
  95.                         break;
  96.                 case R.id.stop:
  97.                         stop();
  98.                         break;
  99.                 case R.id.check:
  100.                         check();
  101.                         break;
  102.                 default:
  103.                         break;
  104.                 }
  105.         }
  106. }
复制代码
上面用到了一个WifiAdmin类,这是我自己写的一个类,用于对Wifi的操作进行一次封装,里面的方法很多,我们本次Demo只用到了其中几种,但我还是先全部放上去吧,以后会用到的。WifiAdmin工具类代码:
  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. public class WifiAdmin {
  10.         // 定义WifiManager对象
  11.         private WifiManager mWifiManager;
  12.         // 定义WifiInfo对象
  13.         private WifiInfo mWifiInfo;
  14.         // 扫描出的网络连接列表
  15.         private List mWifiList;
  16.         // 网络连接列表
  17.         private List mWifiConfiguration;
  18.         // 定义一个WifiLock
  19.         WifiLock mWifiLock;

  20.         // 构造器
  21.         public WifiAdmin(Context context) {
  22.                 // 取得WifiManager对象
  23.                 mWifiManager = (WifiManager) context
  24.                                 .getSystemService(Context.WIFI_SERVICE);
  25.                 // 取得WifiInfo对象
  26.                 mWifiInfo = mWifiManager.getConnectionInfo();
  27.         }

  28.         // 打开WIFI
  29.         public void openWifi() {
  30.                 if (!mWifiManager.isWifiEnabled()) {
  31.                         mWifiManager.setWifiEnabled(true);
  32.                 }
  33.         }

  34.         // 关闭WIFI
  35.         public void closeWifi() {
  36.                 if (mWifiManager.isWifiEnabled()) {
  37.                         mWifiManager.setWifiEnabled(false);
  38.                 }
  39.         }

  40.         // 检查当前WIFI状态
  41.         public int checkState() {
  42.                 return mWifiManager.getWifiState();
  43.         }

  44.         // 锁定WifiLock
  45.         public void acquireWifiLock() {
  46.                 mWifiLock.acquire();
  47.         }

  48.         // 解锁WifiLock
  49.         public void releaseWifiLock() {
  50.                 // 判断时候锁定
  51.                 if (mWifiLock.isHeld()) {
  52.                         mWifiLock.acquire();
  53.                 }
  54.         }

  55.         // 创建一个WifiLock
  56.         public void creatWifiLock() {
  57.                 mWifiLock = mWifiManager.createWifiLock("Test");
  58.         }

  59.         // 得到配置好的网络
  60.         public List getConfiguration() {
  61.                 return mWifiConfiguration;
  62.         }

  63.         // 指定配置好的网络进行连接
  64.         public void connectConfiguration(int index) {
  65.                 // 索引大于配置好的网络索引返回
  66.                 if (index > mWifiConfiguration.size()) {
  67.                         return;
  68.                 }
  69.                 // 连接配置好的指定ID的网络
  70.                 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
  71.                                 true);
  72.         }

  73.         public void startScan() {
  74.                 mWifiManager.startScan();
  75.                 // 得到扫描结果
  76.                 mWifiList = mWifiManager.getScanResults();
  77.                 // 得到配置好的网络连接
  78.                 mWifiConfiguration = mWifiManager.getConfiguredNetworks();
  79.         }

  80.         // 得到网络列表
  81.         public List getWifiList() {
  82.                 return mWifiList;
  83.         }

  84.         // 查看扫描结果
  85.         public StringBuilder lookUpScan() {
  86.                 StringBuilder stringBuilder = new StringBuilder();
  87.                 for (int i = 0; i < mWifiList.size(); i++) {
  88.                         stringBuilder
  89.                                         .append("Index_" + new Integer(i + 1).toString() + ":");
  90.                         // 将ScanResult信息转换成一个字符串包
  91.                         // 其中把包括:BSSID、SSID、capabilities、frequency、level
  92.                         stringBuilder.append((mWifiList.get(i)).toString());
  93.                         stringBuilder.append("/n");
  94.                 }
  95.                 return stringBuilder;
  96.         }

  97.         // 得到MAC地址
  98.         public String getMacAddress() {
  99.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
  100.         }

  101.         // 得到接入点的BSSID
  102.         public String getBSSID() {
  103.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
  104.         }

  105.         // 得到IP地址
  106.         public int getIPAddress() {
  107.                 return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
  108.         }

  109.         // 得到连接的ID
  110.         public int getNetworkId() {
  111.                 return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
  112.         }

  113.         // 得到WifiInfo的所有信息包
  114.         public String getWifiInfo() {
  115.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
  116.         }

  117.         // 添加一个网络并连接
  118.         public void addNetwork(WifiConfiguration wcg) {
  119.                 int wcgID = mWifiManager.addNetwork(wcg);
  120.                 mWifiManager.enableNetwork(wcgID, true);
  121.         }

  122.         // 断开指定ID的网络
  123.         public void disconnectWifi(int netId) {
  124.                 mWifiManager.disableNetwork(netId);
  125.                 mWifiManager.disconnect();
  126.         }
  127. }
复制代码
最后,我们看一下AndroidManifest.xml配置文件的代码,里面有需要用到的权限。这个比较重要,我刚开始就是忘记添加这些权限,程序一启动就挂。后来看LogCat才知道少了这些权限的。
AndroidManifest.xml:
  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  2.         package="org.sunchao" android:versionCode="1" android:versionName="1.0">
  3.         

  4.         
  5.                 
  6.                         
  7.                                 
  8.                                 
  9.                         
  10.                 

  11.         
  12.         
  13.         
  14.         
  15.         
  16.         
复制代码
至此这个Demo就完成了,看效果图。  0_1310115176iIsi.gif0_1310115193LT6t.gif0_1310115212ZB6M.gif 





```````````````````````````````````````````````


本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡、关闭无线网卡、检查网卡状态、扫描网络、扫描结果、连接Wifi、断开Wifi、Wifi连接状态。
运行效果图如下:


0_1310915583ieQc.gif 

其中连接Wifi是比较让我头疼的。需要在程序中进行连接,这会有两种情况。第一,Wifi没有密码,可以直接连接;第二,Wifi有密码,在程序中给出密码,然后连接。第一种我查阅相关资料好像确实是可以实现的,第二种我没找到,我自己也不知道该怎么去搞。最后想出一个办法,直接让程序跳到系统设置的Wifi的页面,然后让人手动去设置。观察了一下Android版的QQ,也确实是这么做的。不信你瞧:


0_1310915936Mb8T.gif 

点击设置网络后跳转到系统设置页面:


0_1310915995bGQq.gif 

所以此处设置网络我也可以这么做,不过还是有点不爽,可能自己对Wifi这块还不是很熟悉,我会继续查阅相关API文档,到时候再跟大家分享,好了,下面贴一下源代码:
主页面:


  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 listResult;
  14.         private ScanResult mScanResult;
  15.         // 定义WifiManager对象
  16.         private WifiManager mWifiManager;
  17.         // 定义WifiInfo对象
  18.         private WifiInfo mWifiInfo;
  19.         // 网络连接列表
  20.         private List 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("");
  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.          */
  111.         public void disconnectWifi() {
  112.                 int netId = getNetworkId();
  113.                 mWifiManager.disableNetwork(netId);
  114.                 mWifiManager.disconnect();
  115.                 mWifiInfo = null;
  116.         }

  117.         /**
  118.          * 检查当前网络状态
  119.          * 
  120.          * @return String
  121.          */
  122.         public void checkNetWorkState() {
  123.                 if (mWifiInfo != null) {
  124.                         Log.i(TAG, "网络正常工作");
  125.                 } else {
  126.                         Log.i(TAG, "网络已断开");
  127.                 }
  128.         }

  129.         /**
  130.          * 得到连接的ID
  131.          */
  132.         public int getNetworkId() {
  133.                 return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
  134.         }

  135.         /**
  136.          * 得到IP地址
  137.          */
  138.         public int getIPAddress() {
  139.                 return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
  140.         }

  141.         // 锁定WifiLock
  142.         public void acquireWifiLock() {
  143.                 mWifiLock.acquire();
  144.         }

  145.         // 解锁WifiLock
  146.         public void releaseWifiLock() {
  147.                 // 判断时候锁定
  148.                 if (mWifiLock.isHeld()) {
  149.                         mWifiLock.acquire();
  150.                 }
  151.         }

  152.         // 创建一个WifiLock
  153.         public void creatWifiLock() {
  154.                 mWifiLock = mWifiManager.createWifiLock("Test");
  155.         }

  156.         // 得到配置好的网络
  157.         public List getConfiguration() {
  158.                 return mWifiConfiguration;
  159.         }

  160.         // 指定配置好的网络进行连接
  161.         public void connectConfiguration(int index) {
  162.                 // 索引大于配置好的网络索引返回
  163.                 if (index >= mWifiConfiguration.size()) {
  164.                         return;
  165.                 }
  166.                 // 连接配置好的指定ID的网络
  167.                 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
  168.                                 true);
  169.         }

  170.         // 得到MAC地址
  171.         public String getMacAddress() {
  172.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
  173.         }

  174.         // 得到接入点的BSSID
  175.         public String getBSSID() {
  176.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
  177.         }

  178.         // 得到WifiInfo的所有信息包
  179.         public String getWifiInfo() {
  180.                 return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
  181.         }

  182.         // 添加一个网络并连接
  183.         public int addNetwork(WifiConfiguration wcg) {
  184.                 int wcgID = mWifiManager.addNetwork(mWifiConfiguration.get(3));
  185.                 mWifiManager.enableNetwork(wcgID, true);
  186.                 return wcgID;
  187.         }
  188. }
复制代码
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://www.apkbus.com/android-23881-1-1.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值