Android系统下的wifi
来源:互联网 发布:打印机网络共享器 编辑:程序博客网 时间:2024/06/05 09:36
WIFI是WLAN的一个标准,WIFI包含于 WLAN中,属于采用WLAN协议中的一项新技术。通俗地讲,WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点”。
在Android中对Wifi操作,要依靠Android提供的关于WIFI的包,在android.NET.wifi包下面。主要包括以下几个类和接口:
- ScanResult
- WifiConfiguration
- WifiInfo
getBSSID() 获取BSSID
getDetailedStateOf() 获取客户端的连通性
getHiddenSSID() 获得SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获得连接的速度
getMacAddress() 获得Mac 地址
getRssi() 获得802.11n 网络的信号
getSSID() 获得SSID
getSupplicanState() 返回具体客户端状态的信息
- WifiManager
获取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 : 未知网卡状态
示例:
1、main_layout.xml
01.<?xml version="1.0" encoding="utf-8"?> 02.<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 03. android:layout_width="fill_parent" 04. android:layout_height="fill_parent" 05. > 06. 07. <LinearLayout 08. android:orientation="vertical" 09. android:layout_width="fill_parent" 10. android:layout_height="fill_parent" 11. > 12.<Button 13. android:id="@+id/scan" 14. android:layout_width="wrap_content" 15. android:layout_height="wrap_content" 16. android:text="扫描网络" 17. /> 18.<Button 19. android:id="@+id/start" 20. android:layout_width="wrap_content" 21. android:layout_height="wrap_content" 22. android:text="打开Wifi" 23. /> 24.<Button 25. android:id="@+id/stop" 26. android:layout_width="wrap_content" 27. android:layout_height="wrap_content" 28. android:text="关闭Wifi" 29. /> 30.<Button 31. android:id="@+id/check" 32. android:layout_width="wrap_content" 33. android:layout_height="wrap_content" 34. android:text="Wifi状态" 35. /> 36. <TextView 37. android:id="@+id/allNetWork" 38. android:layout_width="fill_parent" 39. android:layout_height="wrap_content" 40. android:text="当前没有扫描到Wifi网络" 41. /> 42. </LinearLayout> 43.</ScrollView>
01.import java.util.List; 02. 03.import android.content.Context; 04.import android.net.wifi.ScanResult; 05.import android.net.wifi.WifiConfiguration; 06.import android.net.wifi.WifiInfo; 07.import android.net.wifi.WifiManager; 08.import android.net.wifi.WifiManager.WifiLock; 09. 10.public class WifiAdmin { 11. //定义一个WifiManager对象 12. private WifiManager mWifiManager; 13. //定义一个WifiInfo对象 14. private WifiInfo mWifiInfo; 15. //扫描出的网络连接列表 16. private List<ScanResult> mWifiList; 17. //网络连接列表 18. private List<WifiConfiguration> mWifiConfigurations; 19. WifiLock mWifiLock; 20. public WifiAdmin(Context context){ 21. //取得WifiManager对象 22. mWifiManager=(WifiManager) context.getSystemService(Context.WIFI_SERVICE); 23. //取得WifiInfo对象 24. mWifiInfo=mWifiManager.getConnectionInfo(); 25. } 26. //打开wifi 27. public void openWifi(){ 28. if(!mWifiManager.isWifiEnabled()){ 29. mWifiManager.setWifiEnabled(true); 30. } 31. } 32. //关闭wifi 33. public void closeWifi(){ 34. if(!mWifiManager.isWifiEnabled()){ 35. mWifiManager.setWifiEnabled(false); 36. } 37. } 38. // 检查当前wifi状态 39. public int checkState() { 40. return mWifiManager.getWifiState(); 41. } 42. //锁定wifiLock 43. public void acquireWifiLock(){ 44. mWifiLock.acquire(); 45. } 46. //解锁wifiLock 47. public void releaseWifiLock(){ 48. //判断是否锁定 49. if(mWifiLock.isHeld()){ 50. mWifiLock.acquire(); 51. } 52. } 53. //创建一个wifiLock 54. public void createWifiLock(){ 55. mWifiLock=mWifiManager.createWifiLock("test"); 56. } 57. //得到配置好的网络 58. public List<WifiConfiguration> getConfiguration(){ 59. return mWifiConfigurations; 60. } 61. //指定配置好的网络进行连接 62. public void connetionConfiguration(int index){ 63. if(index>mWifiConfigurations.size()){ 64. return ; 65. } 66. //连接配置好指定ID的网络 67. mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true); 68. } 69. public void startScan(){ 70. mWifiManager.startScan(); 71. //得到扫描结果 72. mWifiList=mWifiManager.getScanResults(); 73. //得到配置好的网络连接 74. mWifiConfigurations=mWifiManager.getConfiguredNetworks(); 75. } 76. //得到网络列表 77. public List<ScanResult> getWifiList(){ 78. return mWifiList; 79. } 80. //查看扫描结果 81. public StringBuffer lookUpScan(){ 82. StringBuffer sb=new StringBuffer(); 83. for(int i=0;i<mWifiList.size();i++){ 84. sb.append("Index_" + new Integer(i + 1).toString() + ":"); 85. // 将ScanResult信息转换成一个字符串包 86. // 其中把包括:BSSID、SSID、capabilities、frequency、level 87. sb.append((mWifiList.get(i)).toString()).append("\n"); 88. } 89. return sb; 90. } 91. public String getMacAddress(){ 92. return (mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress(); 93. } 94. public String getBSSID(){ 95. return (mWifiInfo==null)?"NULL":mWifiInfo.getBSSID(); 96. } 97. public int getIpAddress(){ 98. return (mWifiInfo==null)?0:mWifiInfo.getIpAddress(); 99. } 100. //得到连接的ID 101. public int getNetWordId(){ 102. return (mWifiInfo==null)?0:mWifiInfo.getNetworkId(); 103. } 104. //得到wifiInfo的所有信息 105. public String getWifiInfo(){ 106. return (mWifiInfo==null)?"NULL":mWifiInfo.toString(); 107. } 108. //添加一个网络并连接 109. public void addNetWork(WifiConfiguration configuration){ 110. int wcgId=mWifiManager.addNetwork(configuration); 111. mWifiManager.enableNetwork(wcgId, true); 112. } 113. //断开指定ID的网络 114. public void disConnectionWifi(int netId){ 115. mWifiManager.disableNetwork(netId); 116. mWifiManager.disconnect(); 117. } 118.}
3、创建Android应用类:WifiActivity
01.import java.util.List; 02. 03.import android.app.Activity; 04.import android.net.wifi.ScanResult; 05.import android.os.Bundle; 06.import android.view.View; 07.import android.view.View.OnClickListener; 08.import android.widget.Button; 09.import android.widget.TextView; 10.import android.widget.Toast; 11. 12.public class WifiActivity extends Activity { 13. /** Called when the activity is first created. */ 14. private TextView allNetWork; 15. private Button scan; 16. private Button start; 17. private Button stop; 18. private Button check; 19. private WifiAdmin mWifiAdmin; 20. // 扫描结果列表 21. private List<ScanResult> list; 22. private ScanResult mScanResult; 23. private StringBuffer sb=new StringBuffer(); 24. @Override 25. public void onCreate(Bundle savedInstanceState) { 26. super.onCreate(savedInstanceState); 27. setContentView(R.layout.main); 28. mWifiAdmin = new WifiAdmin(WifiActivity.this); 29. init(); 30. } 31. public void init(){ 32. allNetWork = (TextView) findViewById(R.id.allNetWork); 33. scan = (Button) findViewById(R.id.scan); 34. start = (Button) findViewById(R.id.start); 35. stop = (Button) findViewById(R.id.stop); 36. check = (Button) findViewById(R.id.check); 37. scan.setOnClickListener(new MyListener()); 38. start.setOnClickListener(new MyListener()); 39. stop.setOnClickListener(new MyListener()); 40. check.setOnClickListener(new MyListener()); 41. } 42. private class MyListener implements OnClickListener{ 43. 44. @Override 45. public void onClick(View v) { 46. // TODO Auto-generated method stub 47. switch (v.getId()) { 48. case R.id.scan://扫描网络 49. getAllNetWorkList(); 50. break; 51. case R.id.start://打开Wifi 52. mWifiAdmin.openWifi(); 53. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show(); 54. break; 55. case R.id.stop://关闭Wifi 56. mWifiAdmin.closeWifi(); 57. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show(); 58. break; 59. case R.id.check://Wifi状态 60. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show(); 61. break; 62. default: 63. break; 64. } 65. } 66. 67. } 68. public void getAllNetWorkList(){ 69. // 每次点击扫描之前清空上一次的扫描结果 70. if(sb!=null){ 71. sb=new StringBuffer(); 72. } 73. //开始扫描网络 74. mWifiAdmin.startScan(); 75. list=mWifiAdmin.getWifiList(); 76. if(list!=null){ 77. for(int i=0;i<list.size();i++){ 78. //得到扫描结果 79. mScanResult=list.get(i); 80. sb=sb.append(mScanResult.BSSID+" ").append(mScanResult.SSID+" ") 81. .append(mScanResult.capabilities+" ").append(mScanResult.frequency+" ") 82. .append(mScanResult.level+"\n\n"); 83. } 84. allNetWork.setText("扫描到的wifi网络:\n"+sb.toString()); 85. } 86. } 87.}
4、修改AndroidMenifest.xml文件,加入wifi访问网络所需的权限
01.<!-- 以下是使用wifi访问网络所需的权限 --> 02. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> 03. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 04. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 05. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
5、运行结果
0 0
- Android系统下的wifi
- Android 系统下的Wifi密码存储
- android系统下的wifi代码架构及路径
- 浅谈Android下的Wifi
- android 下的wifi使用
- Linux_kali系统下的wifi破解
- 【分享】基于三星S3C6410开发板android系统下USB wifi的 驱动配置
- android 系统基于wifi 定位的实现
- Android 系统中WiFi的部署
- 基于Android的WiFi聊天系统
- 浅谈Android下的Wifi&&安卓WIFI 移植
- Android 系统下支持wifi和蓝牙共存通讯
- 日常笔记之Android系统下移植WIFI驱动
- Android下的Wifi (上层流程)
- wifi下的android手机访问tomcat
- Android 获取Wifi下的IP地址
- wifi下的android手机访问tomcat
- Android系统Wifi移植
- hadoop2配置文件参数说明
- JS动态修改单网页web应用在微信浏览器中的title
- ArcGIS Pro SDK 1.4
- dao持久层通用泛型接口模板
- 【Python】利用tkFileDialog打开文件对话框
- Android系统下的wifi
- 端口号的分类
- 关于微信图片上传时出现uloadImage:fail
- Spark Graphx
- P帧
- 你可记得曾经的-------- C#面向对象的“基础”
- elasticsearch Java API Maven配置
- shell命令重定向与管道
- 运行时缺msvcp100d.dll和msvcr100d.dll