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>

最后看以下演示效果:

android之wifi开发_第1张图片

点击打开wifi:

android之wifi开发_第2张图片

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

android之wifi开发_第3张图片

原文地址:http://blog.csdn.net/wangkuifeng0118/article/details/7339578

更多相关文章

  1. Android之网络请求5————OkHttp源码2:发送请求
  2. android 变色状态栏
  3. android中检测网络连接状态简单总结
  4. 网络界面Android 网络连接--Wifi/3G
  5. 快速开发框架Afinal的使用(数据库操作,HTTP请求,网络图片加载,控件绑

随机推荐

  1. 浏览器唤起App
  2. Android(安卓)常用的距离单位
  3. Android(安卓)Studio 打包 Jar (将自己的
  4. 如何在android上 使用gif图片(android开源
  5. Mac android 入门初探
  6. Android下自己开发APP实现HID的连接
  7. Android(安卓)RxJava 实际应用讲解:从磁盘
  8. Android官方开发文档Training系列课程中
  9. Android快速实现上传项目到Github
  10. 设计模式——Android(安卓)常用设计模式