android_wifi简介

合集下载

android wifi 点对点传输原理

android wifi 点对点传输原理

android wifi 点对点传输原理
Android WiFi点对点传输原理主要基于WLAN(无线局域网)技术。

点对点传输,也称为P2P传输,允许两个设备在没有中间接入点的情况下,通过WLAN进行直接互联。

这种传输模式的特点是用户介入操作少,传输速度快,对设备的要求相对较低。

在点对点传输中,一个设备作为发射端,另一个设备作为接收端。

发射端将数据发送出去,接收端接收数据。

这种传输模式适用于传输距离较远,或者监控点分布较为广泛,无法做到点对多点传输的情况。

在Android系统中,实现WiFi点对点传输需要使用到WifiP2pManager 等组件。

同时,需要获取相应的权限,包括一些运行时权限,需要用户同意后才能使用。

此外,对于中继传输模式,由于发射端与接收端之间存在阻挡物遮挡了微波信号,需要在中间添加中转设备,让微波信号通过中转设备顺利传输到接收端。

这种模式由于需要增加中转设备,会增大设备费用投入,所以一般不必要时都不会采用。

以上内容仅供参考,如需获取更多信息,建议查阅Android开发相关文档或咨询专业开发人员。

android wifi详细

android wifi详细

Contents1. Wifi扫盲 (2)2. Android Wifi框架的结构图 (3)3. wpa_supplient (3)4. Netd (5)5. FrameWork层架构 (5)6. 情景分析 (5)6.1. 情景1 (5)6.2. 情景2 (8)6.3. 情景3 (8)7.Ad hoc的支持 (10)8.wifi direct (12)9.Soft ap支持 (12)10.Wifi Tethering支持 (15)b Tethering支持 (15)12.Reverse usb Tethering (16)13.Ethernet Tethering (17)14.需要改动的地方 (17)15.测试 (17)16.调试中遇到的问题 (18)1. Wifi扫盲Access point:也叫hotspot(热点),家里的无线路由就是ap。

SoftAp:软ap,用无线网卡模拟ap的功能。

Wifi网络有两种模式:∙Infrastructure mode, in which wireless clients are connected to an access point. This is generally the default mode for 802.11b cards.∙Ad hoc mode, in which clients are connected to one another without any access point.请参考/contents/wifi/wifimodes.php3我们既可以通过Ad hoc也可以通过SoftAp方式来实现共享网络(例如手机可以通过笔记本访问internet),但是原理不同。

这里只是简单的概括,详细的解释请google或百度。

2. Android Wifi框架的结构图上图只是wifi工作于station模式时的图,当工作于soft ap模式时最基本的不同是不通过wpa_supplicant而是Framework层直接通过netd daemon来控制驱动。

Android -wifi 直连 wifi direct

Android -wifi 直连 wifi direct

3、WIFI_P2P_THIS_DEVICE_CHANGED_ACTION :该设备的细节已经改变。
见的WifiP2pManager文档了解更多信息。 也期待在Wi - Fi的直接演示示例应用程序。
/reference/android/net/wifi/p2p/package-summary.html Wi-Fi Direct与ad-hoc模式有哪些不同?
.wifi.p2p ,一个新的软件包,包含所有的API执行同行等连接与Wi - Fi。 你需要与主类是WifiP2pManager ,您可以调用getSystemService(WIFI_P2P_SERVICE)收购。WifiP2pManager包括API,允许您:
1、您P2P连接的应用程序通过调用initialize
ห้องสมุดไป่ตู้
DIGITIMES中文网 原文网址: Wi-Fi Direct 10大问答/tw/dt/n/shwnws.asp?id=0000205310_A224IE390EPO7S191B4CM#ixzz1iDK5ewPn
两者在安全性上有所不同,Wi-Fi Direct采用WPA2(Wi-Fi Protection Access Version 2)加密,在Windows ad-hoc网络下,最高安全支持为WEP。不过Windows 7亦支持WPA2
Android -wifi 直连(wifi direct )2011-12-23 15:02
现在,Android的支持Wi - Fi的直接点对点点对点(P2P)Android系统的供电设备和其他类型的设备,没有一个热点或互联网连接之间的连接。 Android框架提供了一套Wi - Fi的P2P的API,允许你去发现和连接到其他设备时,每个设备的Wi - Fi的直接支持,然后沟通跨越距离远远长于蓝牙连接迅速??连接。

Android开发之wifi

Android开发之wifi

WIFI就是一种无线联网技术,常见的是使用无线路由器。

那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。

如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为“热点”。

在Android中对Wifi操作,android本身提供了一些有用的包,在.wifi包下面。

主要包括以下几个类和接口:1.ScanResult主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。

2.WifiConfigurationWifi网络的配置,包括安全设置等。

3.WifiInfowifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强度等信息。

这里简单介绍一下这里的方法:getBSSID() 获取BSSIDgetDetailedStateOf() 获取客户端的连通性getHiddenSSID() 获得SSID 是否被隐藏getIpAddress() 获取IP 地址getLinkSpeed() 获得连接的速度getMacAddress() 获得Mac 地址getRssi() 获得802.11n 网络的信号getSSID() 获得SSIDgetSupplicanState() 返回具体客户端状态的信息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 plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<ScrollView xmlns:android="/apk/res/android"3.android:layout_width="fill_parent"4.android:layout_height="fill_parent"5.>6.7.<LinearLayout8.android:orientation="vertical"9.android:layout_width="fill_parent"10.android:layout_height="fill_parent"11.>12.<Button13.android:id="@+id/scan"14.android:layout_width="wrap_content"15.android:layout_height="wrap_content"16.android:text="扫描网络"17./>18.<Button19.android:id="@+id/start"20.android:layout_width="wrap_content"21.android:layout_height="wrap_content"22.android:text="打开Wifi"23./>24.<Button25.android:id="@+id/stop"26.android:layout_width="wrap_content"27.android:layout_height="wrap_content"28.android:text="关闭Wifi"29./>30.<Button31.android:id="@+id/check"32.android:layout_width="wrap_content"33.android:layout_height="wrap_content"34.android:text="Wifi状态"35./>36.<TextView37.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>接下来我们吧wifi的相关操作都封装在了一个WifiAdmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:[html]view plaincopy1.import java.util.List;2.3.import android.content.Context;4.import .wifi.ScanResult;5.import .wifi.WifiConfiguration;6.import .wifi.WifiInfo;7.import .wifi.WifiManager;8.import .wifi.WifiManager.WifiLock;9.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. //打开wifi27. public void openWifi(){28. if(!mWifiManager.isWifiEnabled()){29. mWifiManager.setWifiEnabled(true);30. }31. }32. //关闭wifi33. 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. //锁定wifiLock43. public void acquireWifiLock(){44. mWifiLock.acquire();45. }46. //解锁wifiLock47. public void releaseWifiLock(){48. //判断是否锁定49. if(mWifiLock.isHeld()){50. mWifiLock.acquire();51. }52. }53. //创建一个wifiLock54. 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、level87. 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. //得到连接的ID101. 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.}最后看以下WifiActivity类:[html]view plaincopy1.import java.util.List;2.3.import android.app.Activity;4.import .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.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. @Override25. public void onCreate(Bundle savedInstanceState) {26. super.onCreate(savedInstanceState);27. setContentView(yout.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. @Override45. public void onClick(View v) {46. // TODO Auto-generated method stub47. switch (v.getId()) {48. case R.id.scan://扫描网络49. getAllNetWorkList();50. break;51. case R.id.start://打开Wifi52. mWifiAdmin.openWifi();53. Toast.makeText(WifiActivity.this, "当前wifi状态为:"+mWifiAdmin.checkState(), 1).show();54. break;55. case R.id.stop://关闭Wifi56. 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.}不要忘了加入权限:[html]view plaincopy1.<!-- 以下是使用wifi访问网络所需的权限 -->2.<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>3.<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>4.<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>5.<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>最后看以下演示效果:点击打开wifi:状态为3说明WIFI网卡可用(3)。

Android开发入门_WiFi_代码

Android开发入门_WiFi_代码

Android开发入门——WIFI网络操作一.什么是WIFIWIFI 就是一种无线联网技术,常见的一个就是无线路由器。

那么在这个无线路由器的电波覆盖的有效范围内都可以采用WIFI 连接的方式进行联网。

如果无线路由器连接了一个ADLS线路或者别的联网线路,则又被称为“热点”。

流程:初始化---》使能wifi-→查找ap-→配置ap参数-→连接-→配置ip地址1、wifi网卡有以下几种状态:2、要对wifi进行操作,首先要在AndroidMenifest.xml中取得权限的,如下:<!-- 以下是使用wifi访问网络所需要的权限--><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> //修改网络状态的权限<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> //修改wifi状态的权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> //访问网络权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> //访问wifi权限3、对wifi网卡进行操作需要通过WifiManger对象来进行,获取该对象的方法如下:WifiManger wifiManger =(WifiManger)Context.getSystemService(Service.WIFI_SERVICE);打开wifi网卡Wifimanger.setWifiEnabled(true);关闭wifi网卡wifiManger.setWifiEnablee(false);获取网卡的当前的状态wifiManger.getWifiState();========================================主要代码如下=============================================JAVA CODE :No Title Code1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package mars .wifi ;import android.app.Activity ;import android.content.Context ;import .wifi.WifiManager ;import android.os.Bundle ;import android.view.View ;import android.view.View.OnClickListener ;import android.widget.Button ;import android.widget.Toast ;public class WifiActivity extends Activity {/** Called when the activity is first created. */private Button startButton = null ;private Button stopButton = null ;private Button checkButton = null ;private WifiManager wifiManager = null ;@Overridepublic void onCreate (Bundle savedInstanceState ) {super .onCreate (savedInstanceState );setContentView (R .layout .main );startButton = (Button )findViewById (R .id .startWifi );stopButton = (Button )findViewById (R .id .stopWifi );checkButton = (Button )findViewById (R .id .checkWifi );startButton .setOnClickListener (new StartWifiListener ()); stopButton .setOnClickListener (new StopWifiListener ());checkButton .setOnClickListener (new CheckWifiListener ()); }class StartWifiListener implements OnClickListener {@Overridepublic void onClick (View v ) {wifiManager =34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 (WifiManager )WifiActivity .this .getSystemService (Context .WIFI_SERVICE ); wifiManager .setWifiEnabled (true );System .out .println ("wifi state --->" + wifiManager .getWifiState ()); Toast .makeText (WifiActivity .this , "当前Wifi 网卡状态为" +wifiManager .getWifiState (), Toast .LENGTH_SHORT ).show ();}}class StopWifiListener implements OnClickListener {@Overridepublic void onClick (View arg0) {// TODO Auto-generated method stubwifiManager =(WifiManager )WifiActivity .this .getSystemService (Context .WIFI_SERVICE ); wifiManager .setWifiEnabled (false );System .out .println ("wifi state --->" + wifiManager .getWifiState ()); Toast .makeText (WifiActivity .this , "当前Wifi 网卡状态为" +wifiManager .getWifiState (), Toast .LENGTH_SHORT ).show ();}}class CheckWifiListener implements OnClickListener {@Overridepublic void onClick (View v ) {wifiManager =(WifiManager )WifiActivity .this .getSystemService (Context .WIFI_SERVICE ); System .out .println ("wifi state --->" + wifiManager .getWifiState ()); Toast .makeText (WifiActivity .this , "当前Wifi 网卡状态为" +wifiManager .getWifiState (), Toast .LENGTH_SHORT ).show ();}}}1. StringBuffer sb = new StringBuffer();2. sb.append("Wifi 信息\n");3. sb.append("MAC 地址:" + wifiInfo.getMacAddress() + "\n");4. sb.append("接入点的BSSID :" + wifiInfo.getBSSID() + "\n");5. sb.append("IP 地址(int ):" + wifiInfo.getIpAddress() + "\n");6. sb.append("IP 地址(Hex):" + Integer .toHexString(wifiInfo.getIpAddress()) + "\n"); sb.append("IP地址:" + ipIntToString(wifiInfo.getIpAddress()) + "\n");7.sb.append("网络ID:" + wifiInfo.getNetworkId() + "\n");WifiInfo.setText(sb.toString());61.143.168.192。

android—wifi

android—wifi

android—wifi1.什么是wifi?Wifi是一种无线联网的技术,以前通过网线连接电脑,现在通过无线电波来连网,常见的就是一个无限路由器,那么这个无限路由器的电波覆盖的有效范围都可以采用wifi连接方式进行连网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为热点。

2.获取wifi网卡的状态是由一系列的整形常量来表示的,WIFI_STATE_DISABLED: 网卡不可用 constant value 1WIFI_STATE_DISABLING:WIFI正在关闭 constant value 0WIFI_STATE_ENABLED: WIFI网卡可用 constant value 3 WIFI_STATE_ENABLING : WIFI网卡正在打开 constant value 2WIFI_STATE_UNKNOWN:未知网卡状态3.操作wifi所需要的权限<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_S TATE"></uses-permission><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STAT E"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_S TATE"></uses-permission><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STAT E"></uses-permission>4.改变wifi网卡的状态改变wifi网卡的状态,对wifi网卡进行操作,需要通过WifiManager对象来进行,获取该对象的方法如下: WifiMangerWifiManger =( WifiManger)Context.getSystemService(Service.WIFI_SERVICE);打开wifi网卡WifiManger.setWifiEnabled(ture);关闭wifi网卡WifiManger.setEnable(false);获取网卡当前的状态:WifiManger.getWifiState();代码如下:View Code1package com.wbk.wifi.activity;23import android.app.Activity;4import android.content.Context;5import .wifi.WifiManager;6import android.os.Bundle;7import android.view.View;8import android.view.View.OnClickListener;9import android.widget.Button;10import android.widget.Toast;1112public class Wifi_wbkActivity extends Activity13 {14private Button startButton = null;15private Button stopButton = null;16private Button checkButton = null;1718private WifiManager wifiManager = null;1920 @Override21public void onCreate(Bundle savedInstanceState)22 {23super.onCreate(savedInstanceState);24 setContentView(yout.main);25 startButton = (Button) findViewById(R.id.startButton);26 stopButton = (Button) findViewById(R.id.stopButton);27 checkButton = (Button) findViewById(R.id.checkButton);28 startButton.setOnClickListener(new startWifiListener());29 stopButton.setOnClickListener(new stopWifiListener());30 checkButton.setOnClickListener(new checkWifiListener());31 }3233// 内部类,需要的是Wifi_wbkActivity的对象,所以Wifi_wbkActivity.this 34class startWifiListener implements OnClickListener35 {3637 @Override38public void onClick(View v)39 {40 wifiManager = (WifiManager) Wifi_wbkActivity.this.getSystem Service(Context.WIFI_SERVICE);41 wifiManager.setWifiEnabled(true);42 System.out.println("wifi start ----->" + wifiManager.getWif iState());43 Toast.makeText(Wifi_wbkActivity.this, "当前wifi网卡状态为", w ifiManager.getWifiState());44 }45 }4647class stopWifiListener implements OnClickListener48 {4950 @Override51public void onClick(View v)52 {53 wifiManager=(WifiManager)Wifi_wbkActivity.this.getSystemSer vice(Context.WIFI_SERVICE);54 wifiManager.setWifiEnabled(false);55 System.out.println("wifi stop --->"+wifiManager.getWifiStat e());56 Toast.makeText(Wifi_wbkActivity.this, "当前的wifi状态为", wi fiManager.getWifiState());5758 }5960 }61class checkWifiListener implements OnClickListener{6263 @Override64public void onClick(View v)65 {66 wifiManager=(WifiManager)Wifi_wbkActivity.this.getSystemSer vice(Context.WIFI_SERVICE);67 System.out.println("wifi state ----->"+wifiManager.getWifiS tate());68 Toast.makeText(Wifi_wbkActivity.this, "当前的wifi状态为", wi fiManager.getWifiState());69 }7071 }7273 }复制代码。

Android网络开发之WIFI

Android网络开发之WIFI

Android网络开发之WIFIWIFI全称Wireless Fidelity, 又称标准。

WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance(WECA), 2002年10月正式改名Wi-Fi Alliance。

Android 提供包。

wifi api为app和底层无线栈进行交流提供途径。

底层无线栈为wifi 提供接入点。

中常用的类有:1. ScanResult, 主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认证、频率、信号强度等。

2. WifiConfiguration, wifi网络配置,包括安全配置等。

3. WifiInfo, Wifi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点、IP地址、连接速度、MAC地址、网络ID、信号强度等。

4. WifiManager, 提供管理wifi连接的大部分API。

5. , 通过WifiLock来锁定wifi网络,使其一直保持连接,直到这个锁定被释放。

如果app需要下载很大的文件,就需要保持wifi锁,来确保app有足够的时间下载完成。

wifi 锁不能超越wifi-enabled设置,也没有飞行模式。

WifiManager的常用方法1. addNetwork2. calculateSignalLevel,3. compareSignalLevel,4. createWifiLock,5. disableNetwork,6. disconnect,7. enableNetwork,8. getConfiguredNetworks,9. getDhcpInfo,10. getScanResults,11. getWifiState,12. isWifiEnabled,13. pingSupplicant,14. reassociate,15. removeNetwork,16. saveConfiguration,17. setWifiEnabled,18. startScan,19. updateNetwork.学习如何控制app中的wifi连接。

android-wifi

android-wifi

Wifi 网卡状态1.WIFI_STATE_DISABLED: WIFI网卡不可用2.WIFI_STATE_DISABLING: WIFI正在关闭3.WIFI_STATE_ENABLED:WIFI网卡可用4.WIFI_STATE_ENABLING:WIFI网卡正在打开5.WIFI_STATE_UNKNOWN:未知网卡状态WIFI 访问网络需要的权限<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>修改网络状态的权限<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>修改WIFI状态的权限<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>访问网络权限<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"> </uses-permission>访问WIFI权限WIFI 核心模块⏹WifiService由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI 的状态⏹WifiMonitor负责从wpa_supplicant接收事件通知⏹Wpa_supplicant1、读取配置文件2、初始化配置参数,驱动函数3、让驱动scan当前所有的bssid4、检查扫描的参数是否和用户设置的想否5、如果相符,通知驱动进行权限认证操作6、连上AP⏹Wifi驱动模块厂商提供的source,主要进行load firmware和kernel的wireless进行通信⏹Wifi电源管理模块主要控制硬件的GPIO和上下电,让CPU和Wifi模组之间通过sdio接口通信Wifi工作步骤⏹Wifi模块初期化⏹Wifi启动⏹查找热点(AP)⏹配置AP⏹配置AP参数⏹Wifi连接⏹IP地址配置Wifi模块代码总结⏹Wifi Application代码packages/apps/Settings/src/com/android/settings/wifi⏹Wifi Frameworkframeworks/base/wifi/java/android/net/wififrameworks/base/services/java/com/android/server⏹Wifi JNIframeworks/base/core/jni/android_net_wifi_Wifi.cpp⏹Wifi Hardwarehardware/libhardware_legacy/wifi/wifi.c⏹Wifi toolexternal/wpa_supplicant⏹Wifi kernelnet/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.cWifi模块的初始化:在SystemServer 启动的时候,会生成一个ConnectivityService 的实例, ConnectivityService 的构造函数会创建WifiService,WifiStateTracker 会创建WifiMonitor 接收来自底层的事件,WifiService 和WifiMonitor 是整个模块的核心。

android wifi原理

android wifi原理

android wifi原理在Android设备中,Wifi技术被广泛应用于无线网络连接。

Wifi是一种基于无线局域网(WLAN)技术,通过无线信号进行数据传输。

下面将介绍Android Wifi的工作原理。

Wifi连接分为两个主要的角色:Wifi客户端和Wifi接入点(AP)。

Wifi客户端可以是Android手机、平板电脑或其他支持Wifi连接的设备。

Wifi接入点通常是无线路由器。

当启动Wifi功能时,Android设备将会搜索附近的Wifi网络。

这个搜索过程使用的是Wifi扫描机制,设备会广播请求附近的Wifi接入点响应,从而获取可用网络列表。

通过比较网络信号强度和其他网络参数,设备将选择一个最佳的网络连接。

通过用户选择列表中的网络,设备将尝试和所选的Wifi接入点建立连接。

连接过程可以通过以下步骤完成:1. 设备将向Wifi接入点发送连接请求,并传递设备的唯一身份标识符(即MAC地址)以进行身份验证。

2. Wifi接入点接收到连接请求后,会验证设备的身份。

这通常涉及到密码的验证,以确保只有具有正确凭据的设备可以连接到网络。

3. 如果设备通过了身份验证,Wifi接入点将向设备分配一个IP地址。

通过这个IP地址,设备将能够在Wifi网络上进行数据传输和通信。

4. 连接建立后,设备和Wifi接入点之间会建立一个稳定的通信链路,允许设备在网络上发送和接收数据。

一旦Wifi连接建立,Android设备将自动管理Wifi连接状态。

它会尝试保持和所选Wifi接入点的连接,直到另一个更好的网络出现或用户手动断开连接。

总之,Android Wifi的工作原理涉及到设备的Wifi扫描、连接请求、身份验证和IP地址分配等步骤。

通过这些步骤,Android设备能够和所选的Wifi接入点建立连接,并在无线网络上进行数据传输和通信。

androidwifi

androidwifi

一:Wifi介绍1.概述WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。

2.运作原理Wi-Fi 的设置至少需要一个Access Point(ap)和一个或一个以上的client(hi)。

AP每100ms将SSID(Service Set Identifier)经由beacons(信号台)封包广播一次,beacons封包的传输速率是1 Mbit/s,并且长度相当的短,所以这个广播动作对网络效能的影响不大。

因为Wi-Fi规定的最低传输速率是1 Mbit/s ,所以确保所有的Wi-Fi client端都能收到这个SSID广播封包,client 可以借此决定是否要和这一个SSID的AP连线。

使用者可以设定要连线到哪一个SSID。

Wi-Fi系统总是对用户端开放其连接标准,并支援漫游,这就是Wi-Fi的好处。

但亦意味着,一个无线适配器有可能在性能上优于其他的适配器。

由于Wi-Fi通过空气传送信号,所以和非交换以太网有相同的特点。

近两年,出现一种WIFI over cable的新方案。

此方案属于EOC (ethernet over cable)中的一种技术。

通过将2.4G wifi射频降频后在cable中传输。

此种方案已经在中国大陆小范围内试商用。

3.模块及对应源码总览(1)通用模块No 文件功能位置2 framework.jar wifi管理,wifi状态监视,变更/system/framework/3 services.jar wifi Service /system/framework/4 framework-res.apk framework层用到的资源定义/system/framework/5 libandroid_runtime.so wifi JNI /system/lib/Libnetutils dhcp client,发出DHCP请求,等待DHCP结果。

android wifi原理

android wifi原理

android wifi原理Android Wi-Fi原理Wi-Fi(Wireless Fidelity)是一种无线网络技术,它使用无线电波进行数据传输,广泛应用于移动设备和电脑之间的无线连接。

Android作为目前最流行的移动操作系统之一,自然也支持Wi-Fi 连接。

本文将介绍Android Wi-Fi的原理及其相关知识。

1. Wi-Fi工作原理Wi-Fi是基于IEEE 802.11标准的无线局域网技术,它使用无线电波在2.4GHz或5GHz频段进行数据传输。

Wi-Fi网络由一个无线路由器和多个无线设备组成,无线路由器负责接收和发送无线信号,而无线设备则通过Wi-Fi模块接收和发送信号。

通过Wi-Fi连接,无线设备可以与互联网进行数据交换。

2. Android Wi-Fi模块Android设备通常配备有Wi-Fi模块,该模块负责与无线路由器进行通信。

在Android系统中,Wi-Fi模块由驱动程序和一系列系统服务组成。

驱动程序负责控制Wi-Fi硬件,而系统服务则提供了Wi-Fi配置、连接管理和网络协议支持等功能。

3. Wi-Fi扫描Android设备在连接Wi-Fi网络之前,需要先进行Wi-Fi扫描,以搜索附近的无线网络。

Wi-Fi扫描通过监听无线信道,获取周围无线网络的信息,包括网络名称(SSID)、信号强度和加密方式等。

Android系统会将扫描到的网络信息存储在一个列表中,供用户选择连接。

4. Wi-Fi连接一旦用户选择了要连接的Wi-Fi网络,Android设备会与该网络建立连接。

在连接过程中,Android系统会与无线路由器进行握手,交换安全密钥或证书,并建立一个安全的通信通道。

一旦连接成功,Android设备就可以通过Wi-Fi网络与互联网进行数据交换。

5. Wi-Fi管理Android系统提供了多种方式来管理Wi-Fi连接。

用户可以通过设置界面手动连接或断开Wi-Fi网络,也可以设置Wi-Fi自动连接开关。

Android_WIFI_架构和控制流程

Android_WIFI_架构和控制流程

一、WIFI的基本架构1、wifi用户空间的程序和库:external/wpa_supplicant/生成库libwpaclient.so和守护进程wpa_supplicant2、hardware/libhardware_legary/wifi/是wifi管理库3、JNI部分:frameworks/base/core/jni/android_net_wifi_Wifi.cpp4、JA V A部分:frameworks/base/services/java/com/android/server/frameworks/base/wifi/java/android/net/wifi/5、WIFI Settings应用程序位于:packages/apps/Settings/src/com/android/settings/wifi/6、WIFI 驱动模块wlan.kowpa_supplicant通过wireless_ext 接口和驱动通信7、WIFI 硬件模块二、WIFI在Android中如何工作Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于external/wpa_supplicant。

wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信。

UI通过.wifi package (frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。

相应的JNI实现位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。

更高一级的网络管理位于frameworks/base/core/java/android/net。

三、配置Android支持WIFI在BoardConfig.mk中添加:BOARD_HA VE_WIFI := trueBOARD_WPA_SUPPLICANT_DRIVER := WEXT这将在external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true,默认使用驱动driver_wext.c。

AndroidWiFiDisplay(Miracast)介绍

AndroidWiFiDisplay(Miracast)介绍

AndroidWiFiDisplay(Miracast)介绍————————————————————————————————作者:————————————————————————————————日期:2Android Wi-Fi Display(Miracast)介绍来源:/innost/article/details/84746832012年11月中旬,Google发布了Android 4.2。

虽然它和Android 4.1同属Jelly Bean系列,但却添加了很多新的功能。

其中,在显示部分,Android 4.2在Project Butter基础上再接再厉,新增了对Wi-Fi Display功能的支持。

由此也导致整个显示架构发生了较大的变化。

本文首先介绍Wi-Fi Display的背景知识,然后再结合代码对Android 4.2中Wi-Fi Display的实现进行介绍。

一背景知识介绍Wi-Fi Display经常和Miracast联系在一起。

实际上,Miracast是Wi-Fi联盟(Wi-Fi Alliance)对支持Wi-Fi Display功能的设备的认证名称。

通过Miracast 认证的设备将在最大程度内保持对Wi-Fi Display功能的支持和兼容。

由此可知,Miracast考察的就是Wi-Fi Display(本文后续将不再区分Miracast和Wi-Fi Display)。

而Wi-Fi Display的核心功能就是让设备之间通过Wi-Fi无线网络来分享视音频数据。

以一个简单的应用场景为例:有了Wi-Fi Display后,手机和电视机之间可以直接借助Wi-Fi,而无需硬连线(如HDMI)就可将手机中的视频投递到TV上去显示[①]。

以目前智能设备的发展趋势来看,Wi-Fi Display 极有可能在较短时间内帮助我们真正实现多屏互动。

从技术角度来说,Wi-Fi Display并非另起炉灶,而是充分利用了现有的Wi-Fi技术。

android一之WIFI

android一之WIFI

1.前言硬件平台: marvel 310软件平台: maemo4内核: 2.6.28 (经过 marvel 的移植)2.移植思想1,WIFI 模块本身和 cpu 之间的接口;我们的模块和 cpu 之间的接口是 sdio 的,也就是说必须要先保证 SDIO 本身是工作的;2,WIFI 模块本身的上电时序;模块都有它自己的规律,所以必须要根据 spec 了解它本身的上电过程,严格遵守;3,以太网接口的创建;我们的 WIFI 模块本身是建立在 SDIO 口之上的,而对上都是提供以太网接口的,所以必须要保证这个接口以及创建;4,特殊处理;不同的模块都有它特别的地方,比如我们用的是 8686 和 compo 也就是说它和蓝牙共用天线,所以需要在初始化的时候做特殊的处理,发送特殊的命令,才能工作;3.移植过程1,sdio本身是通过gpio口模拟的,所以需要对gpio口进行配置;static mfp_cfg_t littleton_mmc3_pins[] = {GPIO7_2_MMC3_DAT0,GPIO8_2_MMC3_DAT1,GPIO9_2_MMC3_DAT2,GPIO10_2_MMC3_DAT3,GPIO103_MMC3_CLK,GPIO105_MMC3_CMD,};void pxa3xx_enable_mmc3_pins(void){pxa3xx_mfp_config(ARRAY_AND_SIZE(littleton_mmc3_pins));}在 littleton_init ()函数里面添加下面这一行:pxa3xx_enable_mmc3_pins();2,wifi模块本身的初始化;#define MFP_WIFI_V18_ENABLE (GPIO26_GPIO)#define MFP_WLAN_RESETN (GPIO99_GPIO)#define WIFI_WAKEUP_HOST (GPIO104_GPIO) /*error must be changed*/#define WLAN_ENABLE_PIN 26#define WLAN_RESET_PIN 99#define M200_B#ifdef M200_B#define BT_RESET_PIN EXT1_GPIO(1)#define BT_RESET_GPIO (GPIO1_2_GPIO)#else#define BT_RESET_GPIO (GPIO6_2_GPIO)#define BT_RESET_PIN EXT1_GPIO(6)#endifstatic mfp_cfg_t lin2008_wifibt_pins[] = {MFP_WIFI_V18_ENABLE,MFP_WLAN_RESETN,WIFI_WAKEUP_HOST,/*wakeup host*/};static mfp_cfg_t lin2008_wifibt_pins2[] = {MFP_WIFI_V18_ENABLE,};static int wifibt_power_status;int lin2008_poweron_wifibt_board(void){if (!wifibt_power_status) {pxa3xx_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_p ins));gpio_direction_output(WLAN_ENABLE_PIN, 1);gpio_direction_output(WLAN_RESET_PIN, 1);gpio_direction_output(BT_RESET_PIN,1);mdelay(1);gpio_direction_output(BT_RESET_PIN, 0);gpio_direction_output(WLAN_RESET_PIN, 0);// bt need > 5 ms to resetmdelay(5);gpio_direction_output(BT_RESET_PIN, 1);gpio_direction_output(WLAN_RESET_PIN, 1);wifibt_power_status++;return 0;}wifibt_power_status++;return 1;}int lin2008_poweroff_wifibt_board(void){wifibt_power_status--;if (!wifibt_power_status) {pxa3xx_mfp_config(ARRAY_AND_SIZE(lin2008_wifibt_p ins2));gpio_direction_output(WLAN_ENABLE_PIN, 0);return 0;}return 1;}3,以太网接口的创建这里在 android 平台上要做特殊的处理,也就是 firmware 的位置要放好,否则加载 firmware 始终不成功,那么以太网接口就不会被创建了;需要把 helper_sd.bin 放在 /etc/firmware/ 下面;把 sd8686.bin 放在 /etc/firmware/mrvl 下面;4,特殊的处理对于 8686 模块需要做特殊的处理,在注册完以太网接口以后,需要添加下面这段话 :{#define BCA_CFG_NUM_OF_MODES 4#define BCA_CFG_SINGLE_ANT_WITH_COEX 0#define BCA_CFG_DUAL_ANT_WITH_COEX 1#define BCA_CFG_SINGLE_ANT_FOR_BT_ONLY 2#define BCA_CFG_MRVL_DEFAULT 3#define BCA_CONFIG BCA_CFG_SINGLE_ANT_WITH_COEXstatic u32 BCACfgTbl[BCA_CFG_NUM_OF_MODES][3] = {//0xA5F0, 0xA58C, 0xA5A0{ 0xa027181c, 0x40214, 0xd24d}, //Mode 0: Single ANT with COEX enable{ 0xa027181c, 0x40211, 0xd24d}, //Mode 1: Dual ANT with COEX enable{ 0xa027181c, 0x40222, 0xd21c}, //Mode 2: single ANT for BT only{ 0xa027801d, 0x18000, 0xd21c}, //Mode 3: Marvell default};wlan_offset_value RegBuffer;RegBuffer.offset = (0xA5F0);RegBuffer.value = BCACfgTbl[BCA_CONFIG][0];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);RegBuffer.offset =(0xA58C);RegBuffer.value = BCACfgTbl[BCA_CONFIG][1];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);RegBuffer.offset = (0xA5A0);RegBuffer.value = BCACfgTbl[BCA_CONFIG][2];wlan_prepare_cmd(priv,HostCmd_CMD_MAC_REG_ACCESS,HostCmd_ACT_GEN_SET,HostCmd_OPTION_WAITFORRSP,0,&RegBuffer);}基本上这样就可以工作了;4.其它问题Sdio 口默认是用的 3.2V 这里需要修改相关的地方强制设成是1.8V ,否则 SDIO 接口将无法工作;Android 平台上需要移植一些上层软件才能验证,比如iwconfig , iwlist , wpa_supplicant 等。

android wifi框架简介

android  wifi框架简介

一、wifi 组建原理:WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。

一般架设无线网络的基本配备就是无线网卡及一个AP(无线接入点)。

有了AP,就像一般有线网络的Hub一般,无线工作站可以快速且轻易地与网络相连。

特别是对于宽带的使用,WiFi更显优势,有线宽带网络(ADSL、小区LAN等)到户后,连接到一个AP,然后在电脑中安装一块无线网卡即可上网。

普通的家庭有一个AP已经足够,甚至用户的邻里得到授权后,则无需增加端口,也能以共享的方式上网。

二、=================== android WIFI 框架=======================---------------------------------------------------------------------------------------------------三、Android平台Wifi 编译前基本代码路径及文件名(根文件系统的源码下)1、Wifi setting 部分(Java应用层)位于packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java&WifiEnabler.java2、JAVA Framework部分位于frameworks/base/services/java/com/android/server/WifiService.jav a&Wifi Watchdog Service.java位于frameworks/base/wifi/java/android/net/wifi/WifiManager.java&WifiMonitoer.java&WifiStateTracker.java&WifiNative.java3. Wifi的JNI部分位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp4. Wifi的HAL层代码(wpa_supplicant适配器层)位于hardware/libhardware_legary/wifi/wifi.c5. Wpa_supplicant程序的源码部分(tools)位于external/wpa_supplicant_6/external/wpa_supplicant/生成库libwpa_client.so 和守护进程wpa_supplicant6.kernel (wifi 驱动*.ko)位于 net/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.c 四、每一层编译后的所在位置Java应用层-- Settings, Wifi Switcher等应用--> /system/app/Java Framework层-->/system/framework/services.jarJNI层--> /system/framework/framework.jarwpa_supplicant 适配器层--> /system/lib/libhardware_legacy.sowpa_supplicant 程序--> /system/bin/wpa_supplicant/system/lib/libwpa_client.soKernel层-- kernel network drivers===================== android WIFI 框架end ====================================Wifi 网卡状态1. WIFI_STATE_DISABLED: WIFI网卡不可用2. WIFI_STATE_DISABLING: WIFI正在关闭3. WIFI_STATE_ENABLED:WIFI网卡可用4. WIFI_STATE_ENABLING:WIFI网卡正在打开5. WIFI_STATE_UNKNOWN:未知网卡状态Rootfs中关于wpa_supplicant的配置1) /device/amlogic/f08refe1/BoardConfig.mk//wpa_supplicant版本,driver WPA_SUPPLICANT_VERSION := VER_0_6_XBOARD_WPA_SUPPLICANT_DRIVER := WEXT2) root/init.rc //wpa_supplicant servicesetprop wifi.interface wlan0service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -d -c/data/misc/wifi/wpa_supplicant.confsocket wpa_wlan0 dgram 0666 wifi wifi3) /system/etc/wifi/wpa_supplicant.conf//config for wpa_supplicant service update_config=1ctrl_interface=wlan0eapol_version=1ap_scan=1fast_reauth=1---------------------android-wifi 原理1. Wifi 模块框图:2.Wifi工作步骤:a.wifi启动b.扫描c.显示扫描的APd.配置连接APe.获取IP地址f.正常上网3.模块细解:【WifiService】由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI的状态WifiMonitor 负责从wpa_supplicant接收事件通知【Wpa_supplicant】执行过程1、读取配置文件2、初始化配置参数,驱动函数3、让驱动scan当前所有的bssid4、检查扫描的参数是否和用户设置的想否5、如果相符,通知驱动进行权限认证操作6、连上AP4.Wifi模块代码:Wifi Application代码packages/apps/Settings/src/com/android/settings/wifiWifi Frameworkframeworks/base/wifi/java/android/net/wififrameworks/base/services/java/com/android/serverWifi JNIframeworks/base/core/jni/android_net_wifi_Wifi.cppWifi toolexternal/wpa_supplicantWifi kernelnet/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.cWifi Hardwarehardware/libhardware_legacy/wifi/wifi.c5.WIFI的基本运行单元流程:【休眠设置】由于WIFI模块是用电大户,所有为了省电,android的WIFI加了一个休眠策略,可以设置永远不断开,充电时不断开和锁屏时断开。

android wifi框架简介

android  wifi框架简介

一、wifi 组建原理:WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。

一般架设无线网络的基本配备就是无线网卡及一个AP(无线接入点)。

有了AP,就像一般有线网络的Hub一般,无线工作站可以快速且轻易地与网络相连。

特别是对于宽带的使用,WiFi更显优势,有线宽带网络(ADSL、小区LAN等)到户后,连接到一个AP,然后在电脑中安装一块无线网卡即可上网。

普通的家庭有一个AP已经足够,甚至用户的邻里得到授权后,则无需增加端口,也能以共享的方式上网。

二、=================== android WIFI 框架=======================---------------------------------------------------------------------------------------------------三、Android平台Wifi 编译前基本代码路径及文件名(根文件系统的源码下)1、Wifi setting 部分(Java应用层)位于packages/apps/Settings/src/com/android/settings/wifi/WifiSettings.java&WifiEnabler.java2、JAVA Framework部分位于frameworks/base/services/java/com/android/server/WifiService.jav a&Wifi Watchdog Service.java位于frameworks/base/wifi/java/android/net/wifi/WifiManager.java&WifiMonitoer.java&WifiStateTracker.java&WifiNative.java3. Wifi的JNI部分位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp4. Wifi的HAL层代码(wpa_supplicant适配器层)位于hardware/libhardware_legary/wifi/wifi.c5. Wpa_supplicant程序的源码部分(tools)位于external/wpa_supplicant_6/external/wpa_supplicant/生成库libwpa_client.so 和守护进程wpa_supplicant6.kernel (wifi 驱动*.ko)位于 net/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.c 四、每一层编译后的所在位置Java应用层-- Settings, Wifi Switcher等应用--> /system/app/Java Framework层-->/system/framework/services.jarJNI层--> /system/framework/framework.jarwpa_supplicant 适配器层--> /system/lib/libhardware_legacy.sowpa_supplicant 程序--> /system/bin/wpa_supplicant/system/lib/libwpa_client.soKernel层-- kernel network drivers===================== android WIFI 框架end ====================================Wifi 网卡状态1. WIFI_STATE_DISABLED: WIFI网卡不可用2. WIFI_STATE_DISABLING: WIFI正在关闭3. WIFI_STATE_ENABLED:WIFI网卡可用4. WIFI_STATE_ENABLING:WIFI网卡正在打开5. WIFI_STATE_UNKNOWN:未知网卡状态Rootfs中关于wpa_supplicant的配置1) /device/amlogic/f08refe1/BoardConfig.mk//wpa_supplicant版本,driver WPA_SUPPLICANT_VERSION := VER_0_6_XBOARD_WPA_SUPPLICANT_DRIVER := WEXT2) root/init.rc //wpa_supplicant servicesetprop wifi.interface wlan0service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -d -c/data/misc/wifi/wpa_supplicant.confsocket wpa_wlan0 dgram 0666 wifi wifi3) /system/etc/wifi/wpa_supplicant.conf//config for wpa_supplicant service update_config=1ctrl_interface=wlan0eapol_version=1ap_scan=1fast_reauth=1---------------------android-wifi 原理1. Wifi 模块框图:2.Wifi工作步骤:a.wifi启动b.扫描c.显示扫描的APd.配置连接APe.获取IP地址f.正常上网3.模块细解:【WifiService】由SystemServer启动的时候生成的ConnecttivityService创建,负责启动关闭wpa_supplicant,启动和关闭WifiMonitor线程,把命令下发给wpa_supplicant以及跟新WIFI的状态WifiMonitor 负责从wpa_supplicant接收事件通知【Wpa_supplicant】执行过程1、读取配置文件2、初始化配置参数,驱动函数3、让驱动scan当前所有的bssid4、检查扫描的参数是否和用户设置的想否5、如果相符,通知驱动进行权限认证操作6、连上AP4.Wifi模块代码:Wifi Application代码packages/apps/Settings/src/com/android/settings/wifiWifi Frameworkframeworks/base/wifi/java/android/net/wififrameworks/base/services/java/com/android/serverWifi JNIframeworks/base/core/jni/android_net_wifi_Wifi.cppWifi toolexternal/wpa_supplicantWifi kernelnet/wireless drivers/wlan_sd8688 arch/arm/mach-pxa/wlan_pm.cWifi Hardwarehardware/libhardware_legacy/wifi/wifi.c5.WIFI的基本运行单元流程:【休眠设置】由于WIFI模块是用电大户,所有为了省电,android的WIFI加了一个休眠策略,可以设置永远不断开,充电时不断开和锁屏时断开。

Android WiFi工作原理

Android WiFi工作原理

Android Wi-Fi工作原理刘洋第一部分Android概述在介绍Wi-Fi之前,先简要介绍一下Android系统,主要分析一下Android的按层实现的原理。

Android层次结构是整个Android体系中所有应用实现的基础框架,而Android源代码结构则与Wi-Fi的实现细节有关。

1.1 基础知识Android是一款当前最为流行的手机操作系统,它本身的开放性加上Google 公司的大力推广,使其获得了大量手机生产厂商、科研院校、软件公司以及个人开发者的青睐,它属于一个全开放的平台,因此开发者可以得到整个系统的源代码,并能对其进行修改,修改的结果可以通过互联网上传到Android官方网站,倘若被审核通过,就能加入到Android的源代码中,这绝对是一件令人兴奋的事情。

1.2 Android层次结构Android系统是在Linux系统的基础上,经过了层层封装,最终提供给开发者的是大量的Java API,在这里被叫做Android API,于是,开发者就可以像开发一般的Java程序那样开发Android应用程序,这样的设计不仅降低了开发Android 应用程序的难度,还增加了Android系统的界面友好度。

和一般的操作系统一样,Android也是对硬件进行了多层的封装,使得应用程序的开发者和用户能轻松地操作硬件,完成他们所希望完成的事情。

Android 所针对的硬件就是手机,这里主要指智能手机,这种智能手机与传统的手机相比电话功能被弱化,而更偏向于一台笔记本电脑,因此它的CPU、内存等硬件配置要比传统的手机高。

它需要提供给用户一些电脑所拥有的功能,比如说Wi-Fi上网、鼠标或触屏控制的界面、收发电子邮件、玩大型游戏等,但同时又必须拥有传统手机所支持的电话、摄像头、蓝牙等功,这些挑战都增加了Android的设计难度。

Android从下至上可以分为这样几个层次:(1)Linux内核及驱动层(C实现);(2)本地库(C库和C++库)和Java运行时环境层(主要由C、C++实现);(3)Java框架层(主要由Java实现);(4)Java应用程序层(Java实现)。

手机无线路由:Android平台

手机无线路由:Android平台

手机无线路由:Android平台Android平台是由Google基于Linux平台而设计的手机操作系统,由于是开源开放的,因此目前备受运营商、设备制造商和开发商等各方面的欢迎,发展势头迅猛,Android专用的无线路由软件有以下几款:1、Android无线路由软件:aNetshare兼容版本:Android OS使用方法:该软件使用起来并不复杂不过需要Android手机具有Root或超级用户权限才能使用。

由于是免费软件可能功能相对简单,不支持加密设置功能,不建议在公共场所使用。

启动该软件,点击Start-WiFi AP 便可进入连接状态,此时Andriod手机会开始连接3G或GPRS信号。

连接成功后通知栏会有一个橙色的图标表示已连接,并且在手机屏幕上会显示已连接的设备。

2、Android无线路由软件:PDANET兼容版本:Android OS使用方法:PDANET这款软件相当强大,不仅上面提供了iPhone版本,Android手机也有相应的版本可用,此外还有其他平台的版本。

功能就无需再过多介绍了,软件提供了一种简单可行的Wifi热点创建方式,方便用户随时随地上网工作、娱乐、收发邮件、在线聊天等。

Android手机无需破解就可以使用PDANET。

3、Android无线路由软件:Wireless Tether兼容版本:1.6 & 1.5 & 2.0 & 2.1使用方法:此软件的使用依然要求Android手机中的ROM具有ROOT访问权限,无论你的手机是2G还是3G,利用该软件可以将Android手机迅速变化为一个提供Wifi热点的无线路由器,这样你的笔记本电脑等上网设备就可以通过Wifi连接访问互联网。

(本人使用的就是此版本)4、 Android无线路由软件:barnacle wifi tether兼容版本:1.6 & 1.5 & 2.0 & 2.1使用方法:这又是一款简单实用的免费软件,界面十分人性化,数据直观,功能功能齐全,但同样需要手机ROOT,启动该软件,点击Start便可进入连接状态,此时Andriod手机会开始连接3G或GPRS 信号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等标准的出现,现在IEEE 802.11 这个标准已被
统称作Wi-Fi。从应用层面来说,要使用Wi-Fi,
用户首先要有Wi-Fi 兼容的用户端装置。
操作WIFI网络所需要的权限
基于Android的WiFi相关库函数
所需要用到的wifi相关Android包:.wifi
常见操作主要包括以下及各类和接口: 1、WifiManager
WiFi的相关内容简介
1 2 3 4 5
WiFi的定义
操作WIFI网络所需要的权限
基于Android相关库函数 如何找到WiFi的AP WiFi参数以及含义
WiFi定义
它是一种短程无线传输技术,能够在数百英
尺范围内支持互联网接入的无线电信号。随着技
术的发展,以及IEEE 802.11a 及IEEE 802.11g
} }
相关参数说明
String BSSIDThe address of the access point. EG:00:25:86:4D:88:58 String SSIDThe network name EG:TP_LINK_4D8858 String capabilitiesDescribes the authentication, key management, and encryption schemes supported by the access point. EG:【WPA-PSK-TKIP+CCMP】【 WPA2-PSK-TKIP+CCMP-preauth 】
提供了管理WiFi连接的大部分API,主要包括如下内容:
查看已经配置好的网络清单,而且可以修改个别记录的属性。 可以建立或是关闭WiFi网络连接,并且可以查询有关网络状态的动态信
息。
对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。 同时还定义了许多常量来表示WiFi状态的改变。
常用的方法:getWiFiState , isWifiEnabl
int frequencyThe frequency in MHz of the channel over which the
client is communicating with the access point. EG:2437
int levelThe detected signal level in dBm.
找到周围AP的关键步骤
检测网卡状态,修改网卡状态——开启,进行扫描周围ap,打印结果 class ListWifiListerner implements OnClickListener{ @Override public void onClick(View v) { wifiManager = (WifiManager)WifiActivity.this.getSystemService(Context.WIFI_ SERVICE); wifiManager.startScan(); mWifiList = wifiManager.getScanResults(); for(int i=0;i<mWifiList.size();i++){ sb.append(new Integer(i).toString()+"."); sb.append(mWifiList.get(i).toString()); sb.append("\n"); } mainText.setText(sb); sb.delete(0, sb.capacity());
EG:-77
getScanResults等等
WiFi相关库函数
所需要用到的wifi相关Android包:.wifi 常见操作主要包括以下及各类和接口: 2、WifiConfiguration WiFi网络的配置,包括安全配置等。 3.WifiInfo WiFi无线连接的描述,包括接入点、网络连接状态、隐藏的接入点,ip地址、连 接速度、mac地址、网络id,信号强度等信息。 4.ScanResult 主要用来描述已经检测出的接入点,包括接入点的地址、接入点的名称、身份认 证、频率、信号强度等信息。
相关文档
最新文档