admin管理员组

文章数量:1530908

1、写在前面:

2018年的第一篇文章,最近在使用UDP协议进行硬件通信,大家都知道UDP协议通信必须在同一个局域网内,但是每个用户家的wifi都是不一样的,硬件设备是无法只值连接到用户家的wifi的。所以为了解决这个问题,提出一个思路,让手机开启热点,然后把硬件链接到手机的热点上。再由手机告诉硬件去链接用户家里的wifi,这样手机和设备就都能连接到用户家的wifi了,就能愉快的进行通信了。那么怎么解决这个问题呢?继续往下看!

2、实现思路:

1、获取当前网络wifi名称

2、开启热点

3、让用户输入wifi密码

4、获取当前网络的广播地址,扫描设备

5、给设备发命令,配置信息

6、把绑定的设备存起来

7、循环4-6直到没有新设备了

8、退出的时候先把设备信息提交

9、关闭热点、打开wifi

3、中间遇到坑:

测试真机: 魅族4 Android5.1 、小米5 Android 7.0

这里就不说怎么进行UDP通信了,只说在中间遇到的问题。两个坑吧,一个是开启热点兼容6.x+,另一个是获取广播地址,兼容wifi环境,以太网环境,无网络环境。

3.1 开启热点,兼容android6.x

这里先提供一个开启/关闭热点的工具类WifiUtils:

import android.wifi.WifiConfiguration;

import android.wifi.WifiManager;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

/**

* 作者:dell or Xiaomi Li

* 时间: 2018/1/17

* 内容:打开/关闭热点

* 最后修改:

*/

public class WifiUtils {

private final static String APName = "XiaomiLi8";

private final static String APPassword = "5311925577";

/**

* 创建热点

*

* @return

*/

public static boolean CreatHotspot(WifiManager wifiManager) {

boolean request;

//开启热点

if (wifiManager.isWifiEnabled()) {

//如果wifi处于打开状态,则关闭wifi,

wifiManager.setWifiEnabled(false);

}

WifiConfiguration config = new WifiConfiguration();

config.SSID = APName;

config.preSharedKey = APPassword;

config.hiddenSSID = false;//是否隐藏网络

config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);//开放系统认证

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);

config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);

config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

config.status = WifiConfiguration.Status.EN

本文标签: 热点信中udpwifiandroid