android WIFI开发
2015-10-13 22:43
441 查看
android wifi开发:
wifi技术是一种无线联网技术,通常使用无线路由器制造一个wifi热点,我们的终端设备就可以打开wifi进行互联,那么在android手机上是如何实现与无线路由器的热点互联的呢?
android wifi开发的api都在android.net.wifi包下面,它下面主要包括以下几个类:
下面以一个用手机创建wifi热点和连接wifi热点为例:
创建wifi热点:
利用java反射机制,获取WifiManager掩藏的setWifiApEnabled进行创建热点
wifi技术是一种无线联网技术,通常使用无线路由器制造一个wifi热点,我们的终端设备就可以打开wifi进行互联,那么在android手机上是如何实现与无线路由器的热点互联的呢?
android wifi开发的api都在android.net.wifi包下面,它下面主要包括以下几个类:
[code]1. ScanResult 打开wifi扫描到的无线网络接入点,包括接入点名称、身份验证、频率、信号强度 2. WifiConfiguration wifi网络的配置参数,主要包括ssid networkid presharedkey等信息 3. WifiInfo 这个代表无线连接描述,一般用于我们已经连好的wifi,通过它可以获取接入点名称、IP地址、mac地址、网络id等 4. 重要的是这个类 WifiManager管理wifi的类,在他里面有一些重要的方法 打开网卡: 先判断isWifiEnabled() 在打开setWifiEnabled(boolean enabled) 连接wifi: (如果没有保存,就先addNetwork(WifiConfiguration config) ) 再enableNetwork(int netId, boolean disableOthers) 第二个参数看名字就知道了 关闭wifi: disableNetwork(int netId) disconnect() 获取wifi状态: getWifiState() 返回值 One of WIFI_STATE_DISABLED, WIFI_STATE_DISABLING, WIFI_STATE_ENABLED, WIFI_STATE_ENABLING, WIFI_STATE_UNKNOWN
下面以一个用手机创建wifi热点和连接wifi热点为例:
创建wifi热点:
利用java反射机制,获取WifiManager掩藏的setWifiApEnabled进行创建热点
[code] protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wConfiguration = new WifiConfiguration(); wManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); wConfiguration.SSID = "my_wifi_1"; wConfiguration.preSharedKey = "123456789"; btn = (Button)this.findViewById(R.id.wifi); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub flag = !flag; //热点不能和wifi同时开启 如果wifi开启就关闭掉 if(wManager.isWifiEnabled()){ wManager.setWifiEnabled(false); } try { Method method = wManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE); method.invoke(wManager, wConfiguration, flag); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } 连接wifi热点: 连接wifi也很简单,只需要设置WifiConfiguration的参数,在把它加入到network里面去,enablewifi功能即可 //连接wifi 参数比较多 麻烦 public WifiConfiguration setWifiParams(){ WifiConfiguration mWifiConfiguration = new WifiConfiguration(); mWifiConfiguration.SSID = "\"" + ssid + "\""; mWifiConfiguration.preSharedKey = "\"" + password + "\""; mWifiConfiguration.hiddenSSID = true; //不再广播此ssid mWifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); mWifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); mWifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); mWifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); mWifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); mWifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); return mWifiConfiguration; }
[code] 返回的wificonfiguration使用addnetwork,enableNetwork(int netId, boolean disableOthers)即可打开 还有一种比较省力的方法,直接跳跳转到用户设置wifi界面,用户手动设置:
[code]startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
相关文章推荐
- Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
- bin/ld.exe: error: cannot find -landroid等问题
- 如何跳过Nexus 7二代的开机设置
- Android 项目(一):自定义View绘制“折线图”
- android获取单个通讯录联系人信息并分享内容(短信邀请)
- Android 五大布局之(一) 线性布局和相对布局
- Android 6.0中art虚拟机编译dex时已完全放弃使用LLVM
- android 捕获 UncaughtExceptionHandler
- Android中windowSoftInputMode属性详解
- Android应用开发性能优化完全分析
- 【Android】error: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'.
- Android Intent 意图作用
- Android 获取屏幕高宽度,密度,通知栏高度,截图等常用方法
- Android Toast提示封装
- Android 隐藏显示键盘
- 【Android】未引入包问题
- Android 项目实践(三)——数据库封装
- Android自定义View系列之可伸缩的TextView
- android代码实现app升级