Android WiFi热点开发

创建热点

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

 static WifiConfiguration createWifiConfig(String SSID, @WifiSecurityType int wifiCipherType, String password, boolean hiddenSSID) {
 WifiConfiguration wifiConfiguration = new WifiConfiguration();
 wifiConfiguration.SSID = convertToQuotedString(SSID);
 wifiConfiguration.hiddenSSID=hiddenSSID;//是否隐藏热点true=隐藏,如果隐藏需要其他设备手动添加网络
 switch (wifiCipherType) {
 case WifiSecurityType.SECURITY_NONE:
 wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
 break;
 case WifiSecurityType.SECURITY_WEP:
 wifiConfiguration.allowedKeyManagement.set(KeyMgmt.NONE);
 wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
 wifiConfiguration.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
 if (!TextUtils.isEmpty(password)) {
 int length = password.length();
 // WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
 if ((length == 10 || length == 26 || length == 58)
 && password.matches("[0-9A-Fa-f]*")) {
 wifiConfiguration.wepKeys[0] = password;
 } else {
 wifiConfiguration.wepKeys[0] = '"' + password + '"';
 }
 }
 break;
 case WifiSecurityType.SECURITY_WPA_PSK:
 wifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
 if (!TextUtils.isEmpty(password)) {
 if (password.matches("[0-9A-Fa-f]{64}")) {
 wifiConfiguration.preSharedKey = password;
 } else {
 wifiConfiguration.preSharedKey = '"' + password + '"';
 }
 }
 break;
 case WifiSecurityType.SECURITY_WPA_EAP:
 wifiConfiguration.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
 wifiConfiguration.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
 wifiConfiguration.enterpriseConfig = new WifiEnterpriseConfig();
 int eapMethod = 0;
 int phase2Method = 0;
 wifiConfiguration.enterpriseConfig.setEapMethod(eapMethod);
 wifiConfiguration.enterpriseConfig.setPhase2Method(phase2Method);
 if (!TextUtils.isEmpty(password)) {
 wifiConfiguration.enterpriseConfig.setPassword(password);
 }
 break;
 default:
 break;
 }
 return wifiConfiguration;
 }

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

 try {
 Method method = mWifManager.getClass().getMethod(
 "setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
 boolean enable = (Boolean) method.invoke(mWifManager, config, true);
 if (enable) {
 Log.d("WiFi", "热点已开启");
 } else {
 Log.d("WiFi", "创建热点失败");
 }
 } catch (Exception e) {
 e.printStackTrace();
 }

关闭热点

public void closeWifiAp() {
 try {
 Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
 method.invoke(mWifiManager, null, false);
 } catch (Exception e) {
 e.printStackTrace();
 }
 }

监听热点状态

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

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

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

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

然后在广播中获取state:

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

wifi热点有如下几种状态:

#WIFI_AP_STATE_DISABLED 
#WIFI_AP_STATE_DISABLING
#WIFI_AP_STATE_ENABLED
#WIFI_AP_STATE_ENABLING
#WIFI_AP_STATE_FAILED

其他API:

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

public int getWifiApState()

判断WiFi热点是否打开:

public boolean isWifiApEnabled()

获取当前wifi热点的WifiConfiguration:

public WifiConfiguration getWifiApConfiguration()
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值