转自:http://blog.csdn.net/wangkuifeng0118/article/details/7339578


WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点”。

在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。主要包括以下几个类和接口:

1.ScanResult

主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。

2.WifiConfiguration

Wifi网络的配置,包括安全设置等。

3.WifiInfo

wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强度等信息。这里简单介绍一下这里的方法:

getBSSID() 获取BSSID

getDetailedStateOf() 获取客户端的连通性

getHiddenSSID() 获得SSID 是否被隐藏

getIpAddress() 获取IP 地址

getLinkSpeed() 获得连接的速度

getMacAddress() 获得Mac 地址

getRssi() 获得802.11n 网络的信号

getSSID() 获得SSID

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

4.WifiManager

这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。

获取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 : 未知网卡状态

下面先写一个wifi的实例:

首先看以下main.xml:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. >
  6. <LinearLayout
  7. android:orientation="vertical"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. >
  11. <Button
  12. android:id="@+id/scan"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:text="扫描网络"
  16. />
  17. <Button
  18. android:id="@+id/start"
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="打开Wifi"
  22. />
  23. <Button
  24. android:id="@+id/stop"
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content"
  27. android:text="关闭Wifi"
  28. />
  29. <Button
  30. android:id="@+id/check"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:text="Wifi状态"
  34. />
  35. <TextView
  36. android:id="@+id/allNetWork"
  37. android:layout_width="fill_parent"
  38. android:layout_height="wrap_content"
  39. android:text="当前没有扫描到Wifi网络"
  40. />
  41. </LinearLayout>
  42. </ScrollView>

接下来我们吧wifi的相关操作都封装在了一个WifiAdmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:

[html] view plain copy
  1. importjava.util.List;
  2. importandroid.content.Context;
  3. importandroid.net.wifi.ScanResult;
  4. importandroid.net.wifi.WifiConfiguration;
  5. importandroid.net.wifi.WifiInfo;
  6. importandroid.net.wifi.WifiManager;
  7. importandroid.net.wifi.WifiManager.WifiLock;
  8. publicclassWifiAdmin{
  9. //定义一个WifiManager对象
  10. privateWifiManagermWifiManager;
  11. //定义一个WifiInfo对象
  12. privateWifiInfomWifiInfo;
  13. //扫描出的网络连接列表
  14. privateList<ScanResult>mWifiList;
  15. //网络连接列表
  16. privateList<WifiConfiguration>mWifiConfigurations;
  17. WifiLockmWifiLock;
  18. publicWifiAdmin(Contextcontext){
  19. //取得WifiManager对象
  20. mWifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
  21. //取得WifiInfo对象
  22. mWifiInfo=mWifiManager.getConnectionInfo();
  23. }
  24. //打开wifi
  25. publicvoidopenWifi(){
  26. if(!mWifiManager.isWifiEnabled()){
  27. mWifiManager.setWifiEnabled(true);
  28. }
  29. }
  30. //关闭wifi
  31. publicvoidcloseWifi(){
  32. if(!mWifiManager.isWifiEnabled()){
  33. mWifiManager.setWifiEnabled(false);
  34. }
  35. }
  36. //检查当前wifi状态
  37. publicintcheckState(){
  38. returnmWifiManager.getWifiState();
  39. }
  40. //锁定wifiLock
  41. publicvoidacquireWifiLock(){
  42. mWifiLock.acquire();
  43. }
  44. //解锁wifiLock
  45. publicvoidreleaseWifiLock(){
  46. //判断是否锁定
  47. if(mWifiLock.isHeld()){
  48. mWifiLock.acquire();
  49. }
  50. }
  51. //创建一个wifiLock
  52. publicvoidcreateWifiLock(){
  53. mWifiLock=mWifiManager.createWifiLock("test");
  54. }
  55. //得到配置好的网络
  56. publicList<WifiConfiguration>getConfiguration(){
  57. returnmWifiConfigurations;
  58. }
  59. //指定配置好的网络进行连接
  60. publicvoidconnetionConfiguration(intindex){
  61. if(index>mWifiConfigurations.size()){
  62. return;
  63. }
  64. //连接配置好指定ID的网络
  65. mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId,true);
  66. }
  67. publicvoidstartScan(){
  68. mWifiManager.startScan();
  69. //得到扫描结果
  70. mWifiList=mWifiManager.getScanResults();
  71. //得到配置好的网络连接
  72. mWifiConfigurations=mWifiManager.getConfiguredNetworks();
  73. }
  74. //得到网络列表
  75. publicList<ScanResult>getWifiList(){
  76. returnmWifiList;
  77. }
  78. //查看扫描结果
  79. publicStringBufferlookUpScan(){
  80. StringBuffersb=newStringBuffer();
  81. for(inti=0;i<mWifiList.size();i++){
  82. sb.append("Index_"+newInteger(i+1).toString()+":");
  83. //将ScanResult信息转换成一个字符串包
  84. //其中把包括:BSSID、SSID、capabilities、frequency、level
  85. sb.append((mWifiList.get(i)).toString()).append("\n");
  86. }
  87. returnsb;
  88. }
  89. publicStringgetMacAddress(){
  90. return(mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
  91. }
  92. publicStringgetBSSID(){
  93. return(mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
  94. }
  95. publicintgetIpAddress(){
  96. return(mWifiInfo==null)?0:mWifiInfo.getIpAddress();
  97. }
  98. //得到连接的ID
  99. publicintgetNetWordId(){
  100. return(mWifiInfo==null)?0:mWifiInfo.getNetworkId();
  101. }
  102. //得到wifiInfo的所有信息
  103. publicStringgetWifiInfo(){
  104. return(mWifiInfo==null)?"NULL":mWifiInfo.toString();
  105. }
  106. //添加一个网络并连接
  107. publicvoidaddNetWork(WifiConfigurationconfiguration){
  108. intwcgId=mWifiManager.addNetwork(configuration);
  109. mWifiManager.enableNetwork(wcgId,true);
  110. }
  111. //断开指定ID的网络
  112. publicvoiddisConnectionWifi(intnetId){
  113. mWifiManager.disableNetwork(netId);
  114. mWifiManager.disconnect();
  115. }
  116. }
最后看以下WifiActivity类:

[html] view plain copy
  1. importjava.util.List;
  2. importandroid.app.Activity;
  3. importandroid.net.wifi.ScanResult;
  4. importandroid.os.Bundle;
  5. importandroid.view.View;
  6. importandroid.view.View.OnClickListener;
  7. importandroid.widget.Button;
  8. importandroid.widget.TextView;
  9. importandroid.widget.Toast;
  10. publicclassWifiActivityextendsActivity{
  11. /**Calledwhentheactivityisfirstcreated.*/
  12. privateTextViewallNetWork;
  13. privateButtonscan;
  14. privateButtonstart;
  15. privateButtonstop;
  16. privateButtoncheck;
  17. privateWifiAdminmWifiAdmin;
  18. //扫描结果列表
  19. privateList<ScanResult>list;
  20. privateScanResultmScanResult;
  21. privateStringBuffersb=newStringBuffer();
  22. @Override
  23. publicvoidonCreate(BundlesavedInstanceState){
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. mWifiAdmin=newWifiAdmin(WifiActivity.this);
  27. init();
  28. }
  29. publicvoidinit(){
  30. allNetWork=(TextView)findViewById(R.id.allNetWork);
  31. scan=(Button)findViewById(R.id.scan);
  32. start=(Button)findViewById(R.id.start);
  33. stop=(Button)findViewById(R.id.stop);
  34. check=(Button)findViewById(R.id.check);
  35. scan.setOnClickListener(newMyListener());
  36. start.setOnClickListener(newMyListener());
  37. stop.setOnClickListener(newMyListener());
  38. check.setOnClickListener(newMyListener());
  39. }
  40. privateclassMyListenerimplementsOnClickListener{
  41. @Override
  42. publicvoidonClick(Viewv){
  43. //TODOAuto-generatedmethodstub
  44. switch(v.getId()){
  45. caseR.id.scan://扫描网络
  46. getAllNetWorkList();
  47. break;
  48. caseR.id.start://打开Wifi
  49. mWifiAdmin.openWifi();
  50. Toast.makeText(WifiActivity.this,"当前wifi状态为:"+mWifiAdmin.checkState(),1).show();
  51. break;
  52. caseR.id.stop://关闭Wifi
  53. mWifiAdmin.closeWifi();
  54. Toast.makeText(WifiActivity.this,"当前wifi状态为:"+mWifiAdmin.checkState(),1).show();
  55. break;
  56. caseR.id.check://Wifi状态
  57. Toast.makeText(WifiActivity.this,"当前wifi状态为:"+mWifiAdmin.checkState(),1).show();
  58. break;
  59. default:
  60. break;
  61. }
  62. }
  63. }
  64. publicvoidgetAllNetWorkList(){
  65. //每次点击扫描之前清空上一次的扫描结果
  66. if(sb!=null){
  67. sb=newStringBuffer();
  68. }
  69. //开始扫描网络
  70. mWifiAdmin.startScan();
  71. list=mWifiAdmin.getWifiList();
  72. if(list!=null){
  73. for(inti=0;i<list.size();i++){
  74. //得到扫描结果
  75. mScanResult=list.get(i);
  76. sb=sb.append(mScanResult.BSSID+"").append(mScanResult.SSID+"")
  77. .append(mScanResult.capabilities+"").append(mScanResult.frequency+"")
  78. .append(mScanResult.level+"\n\n");
  79. }
  80. allNetWork.setText("扫描到的wifi网络:\n"+sb.toString());
  81. }
  82. }
  83. }

不要忘了加入权限:

[html] view plain copy
  1. <!--以下是使用wifi访问网络所需的权限-->
  2. <uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
  3. <uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
  4. <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  5. <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

最后看以下演示效果:


点击打开wifi:

状态为3说明WIFI网卡可用(3)。点击扫描网络:


这些就是扫描到的wifi,具体参数参见上面介绍。

没有图片啊,可能是网络不好,下次再去看看,嘿嘿。

更多相关文章

  1. Android(安卓)沉浸式状态栏 头部可拉伸带有一键置顶功能
  2. 用Fiddler抓取Android、Iphone网络数据包
  3. Android自定义Button按钮显示样式
  4. android的selector,背景选择器
  5. Android(安卓)Studio设置 标题栏隐藏, 状态栏隐藏, 改变状态栏文
  6. 浅谈android的selector,背景选择器
  7. Android(安卓)之 Retrofit 入门介绍
  8. 按钮状态选择(选中,取消)
  9. 浅谈android的selector,背景选择器

随机推荐

  1. 如何下载并编译Android(安卓)4.0内核源码
  2. AndroVM 可以让你在虚拟机环境中运行 And
  3. 微信头像圣诞帽来啦,分享给 TA 戴帽子吧
  4. Develop--Training(七)Getting Started--
  5. 酷炫轮播广告
  6. 使用MySQL和Servlet编写Android接口样例
  7. 【PaddlePaddle】测试Paddle-Lite mobile
  8. debug安装包无效的解决办法
  9. To fetch EDID from android device
  10. android之listView定位到指定行同时隐藏