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

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

在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:

<?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"><LinearLayoutandroid: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>

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

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();}//打开wifipublic void openWifi(){if(!mWifiManager.isWifiEnabled()){mWifiManager.setWifiEnabled(true);}}//关闭wifipublic void closeWifi(){if(!mWifiManager.isWifiEnabled()){mWifiManager.setWifiEnabled(false);}}// 检查当前wifi状态  public int checkState() {  return mWifiManager.getWifiState();  }  //锁定wifiLockpublic void acquireWifiLock(){mWifiLock.acquire();}//解锁wifiLockpublic void releaseWifiLock(){//判断是否锁定if(mWifiLock.isHeld()){mWifiLock.acquire();}}//创建一个wifiLockpublic 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();}//得到连接的IDpublic 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类:

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();  @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);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{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.scan://扫描网络
                  getAllNetWorkList();  break;case R.id.start://打开Wifi
                mWifiAdmin.openWifi();Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();break;case R.id.stop://关闭Wifi
                mWifiAdmin.closeWifi();Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();break;case R.id.check://Wifi状态Toast.makeText(WifiActivity.this, "当前wifi状态为:"+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访问网络所需的权限 -->  <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>  

最后看以下演示效果:

最后看以下演示效果:

转载于:https://www.cnblogs.com/zhujiabin/p/5142113.html

android之wifi开发相关推荐

  1. Android中WIFI开发总结(一)

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

  2. 【Android】Android中WIFI开发总结(一)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://smallwoniu.blog.51cto.com/3911954/1334951 ...

  3. Android无线Wifi开发

    一.Wife的基础知识 WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联 ...

  4. 【Android】Android中WIFI开发总结(二)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://smallwoniu.blog.51cto.com/3911954/1338618 ...

  5. android之wifi开发(一)

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

  6. Android设备wifi开发

    前言 三月份新入职的公司,公司的主要业务是只能电视应用,由于公司战略需要,准备做一个tvos,里面包含有设置的系统应用,本人分到的任务是wifi这一块开发.由于之前接手的都是移动端的开发,对于wifi ...

  7. Android入门项目(六)Android的wifi开发,androidwifi开发教程

    boolean isUpdated = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false); Log.i(TAG, &qu ...

  8. Android WiFi开发教程(三)——WiFi热点数据传输

    在上一篇文章中介绍了WiFi的搜索和连接,如果你还没阅读过,建议先阅读上一篇Android WiFi开发教程(二)--WiFi的搜索和连接.本篇接着简单介绍手机上如何通过WiFi热点进行数据传输. 跟 ...

  9. qt android 开发之wifi开发篇

    小编简单介绍如何通过调用android API来获取wifi服务( 非常感谢作者安晓辉发布了qt android 核心编程这本书,让我两天搞懂了很多在qt中开发安卓的要领,现在跟大家分享下!至于还没知 ...

最新文章

  1. Docker初学4:下载运行一些必要的镜像
  2. 暗渡陈仓:用低消耗设备进行破解和渗透测试1.2.2 渗透测试工具集
  3. java 继承 重载_java – 使用继承的重载方法
  4. .NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命
  5. 应用回归分析何晓群课第五版_海外第三方应用市场分析丨出海学院十九期直播课...
  6. 活用变量字符串${var%%.*}
  7. H.264 中很有用的一些概念
  8. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改
  9. tomcat 系统服务 outofmemory
  10. JBoss5开发web service常见问题
  11. REG Delete用法
  12. C语言:百鸡百钱问题
  13. JQuery插件iScroll实现下拉刷新,滚动翻页特效
  14. 手机图标ui设计尺寸:ui设计app图标尺寸规范
  15. 我眼中的架构师:一个优秀的架构师应该具备什么?
  16. java近义词,【LeetCode(Java) - 1258】近义词句子
  17. 置换检验 配对秩和检验
  18. 2020年最好用的手机是哪一款_2020最好用的5G手机是哪一款?热销2020年5g手机推荐及点评...
  19. Xcode(OC):control reaches end of non-void function
  20. Linux内存管理 - slab分配器和kmalloc

热门文章

  1. python manager_详解Python的Django框架中Manager方法的使用
  2. java putall实现_java putAll与addAll的小区别
  3. 使用 Shell 脚本实现安装进度指示器
  4. echarts自定义y轴刻度信息
  5. java 下周的第一天,Java - 如何计算每周的第一天和最后一天
  6. 每次都错部分分怎么办,总是个别点TLE,WA
  7. NOIP2018初赛翻车总结
  8. USACO1.1.3 - Friday the Thirteenth
  9. java 撤销恢复按钮_再涨个姿势,我们常用的撤销和恢复功能,你知道它们使用了什么设计模式实现吗?...
  10. git创建版本库(1)