Android WiFi热点开发的示例代码

前端之家收集整理的这篇文章主要介绍了Android WiFi热点开发的示例代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

上次写了Android连接匿名WiFi的内容。WiFI开发对于应用层开发是比较小众的知识点,不过既然用到了就在此记录下。

创建热点

1、根据加密类型、密码、是否隐藏等参数来创建热点

  1. static WifiConfiguration createWifiConfig(String SSID,@WifiSecurityType int wifiCipherType,String password,boolean hiddenSSID) {
  2.  
  3. WifiConfiguration wifiConfiguration = new WifiConfiguration();
  4. wifiConfiguration.SSID = convertToQuotedString(SSID);
  5. wifiConfiguration.hiddenSSID=hiddenSSID;//是否隐藏热点true=隐藏,如果隐藏需要其他设备手动添加网络
  6. switch (wifiCipherType) {
  7. case WifiSecurityType.SECURITY_NONE:
  8. wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  9. break;
  10. case WifiSecurityType.SECURITY_WEP:
  11. wifiConfiguration.allowedKeyManagement.set(KeyMgmt.NONE);
  12. wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
  13. wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
  14. if (!TextUtils.isEmpty(password)) {
  15. int length = password.length();
  16. // WEP-40,WEP-104,and 256-bit WEP (WEP-232?)
  17. if ((length == 10 || length == 26 || length == 58)
  18. && password.matches("[0-9A-Fa-f]*")) {
  19. wifiConfiguration.wepKeys[0] = password;
  20. } else {
  21. wifiConfiguration.wepKeys[0] = '"' + password + '"';
  22. }
  23. }
  24. break;
  25.  
  26. case WifiSecurityType.SECURITY_WPA_PSK:
  27. wifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
  28. if (!TextUtils.isEmpty(password)) {
  29. if (password.matches("[0-9A-Fa-f]{64}")) {
  30. wifiConfiguration.preSharedKey = password;
  31. } else {
  32. wifiConfiguration.preSharedKey = '"' + password + '"';
  33. }
  34. }
  35. break;
  36.  
  37. case WifiSecurityType.SECURITY_WPA_EAP:
  38. wifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
  39. wifiConfiguration.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
  40. wifiConfiguration.enterpriseConfig = new WifiEnterpriseConfig();
  41. int eapMethod = 0;
  42. int phase2Method = 0;
  43. wifiConfiguration.enterpriseConfig.setEapMethod(eapMethod);
  44. wifiConfiguration.enterpriseConfig.setPhase2Method(phase2Method);
  45. if (!TextUtils.isEmpty(password)) {
  46. wifiConfiguration.enterpriseConfig.setPassword(password);
  47. }
  48. break;
  49. default:
  50. break;
  51. }
  52. return wifiConfiguration;
  53. }

然后调用WifiManager的setWifiApEnabled方法来设置wifiConfiguration,因为是隐藏的,需要通过反射:

  1. try {
  2. Method method = mWifManager.getClass().getMethod(
  3. "setWifiApEnabled",WifiConfiguration.class,Boolean.TYPE);
  4. boolean enable = (Boolean) method.invoke(mWifManager,config,true);
  5.  
  6. if (enable) {
  7. Log.d("WiFi","热点已开启");
  8. } else {
  9. Log.d("WiFi","创建热点失败");
  10. }
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }

关闭热点

关闭热点比较简单,也是用上面的方法,第二个参数传false就行了:

  1. public void closeWifiAp() {
  2. try {
  3. Method method = mWifiManager.getClass().getMethod("setWifiApEnabled",boolean.class);
  4. method.invoke(mWifiManager,null,false);
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }
  8. }

监听热点状态

热点的状态可以通过广播的方式来监听:

  1. public static final String WIFI_AP_STATE_CHANGED_ACTION =
  2. "android.net.wifi.WIFI_AP_STATE_CHANGED";

不过这个变量是隐藏的,只能直接通过值来注册广播:

  1. IntentFilter filter = new IntentFilter();
  2. filter.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED");

然后在广播中获取state:

  1. int state = intent.getIntExtra("wifi_state",0);

wifi热点有如下几种状态:

  1. #WIFI_AP_STATE_DISABLED
  2. #WIFI_AP_STATE_DISABLING
  3. #WIFI_AP_STATE_ENABLED
  4. #WIFI_AP_STATE_ENABLING
  5. #WIFI_AP_STATE_Failed

其他API:

获取WiFI热点当前状态,返回值就是上面五种状态:

  1. public int getWifiApState()

判断WiFi热点是否打开:

  1. public boolean isWifiApEnabled()

获取当前wifi热点的WifiConfiguration:

  1. public WifiConfiguration getWifiApConfiguration()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

猜你在找的Android相关文章