admin管理员组文章数量:1620893
WIFI通讯:双网络通讯
随着公司产品的不断迭代,发现上位机(App)与下位机(Vci)通讯,在收发长包数据时,蓝牙通道出现了丢字节,丢包现象。而这时候会提示用户使用USB串口通讯方式。但是USB串口通讯,必须局限于线束的连接。
为了优化这个问题,增加引入了WIFI上下位机通讯通道。
应用场景
App与硬件使用WIFI(无网)通道进行命令收到,并在App内强制使用4G通道进行Http请求
1,接收到WIFI接连的广播后,执行连接操作
/**
* 发现wifi设备
*
* @param wifiScanResultEvent
*/
@Subscribe(threadMode = ThreadMode.BACKGROUND)
public void onRecivedBluetoothDevice(WifiScanResultEvent wifiScanResultEvent) {
if (deviceInfo == null) {
Log.e(TAG, "WIFI信息为空,停止扫描");
return;
}
if (isConnecting()) {
Log.e(TAG, "WIFI连接中,停止此次扫描");
return;
}
//如果WIFI已连接上则退出
if (isConnected()) {
Log.e(TAG, "WIFI已连接上,不在扫描");
return;
}
if (addNetworkConfiguration(deviceInfo.getBssid())) {
stopScanDevice();
connecting();
if (connectToNetwork(deviceInfo.getSsid(), deviceInfo.getPassword(), deviceInfo.getWifiType()) < 0) {
connectionError(-3, "无法添加wifi配置信息");
} else {
stopDiscovery();
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
createScokect();
emitter.onNext("");
}
});
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String bean) {
}
};
observable.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(consumer);
}
}
}
/**
* 添加wifi链接配置
*
* @param bssid 下位机wifi mac地址
* @return 有该wifi设备信号
*/
private boolean addNetworkConfiguration(String bssid) {
//获取当前wifi 列表,有可能要链接的wifi不处于当前列表中
List<ScanResult> wifiList = mWifiManager.getScanResults();
if (wifiList == null || wifiList.size() == 0) {
return false;
}
ScanResult scanResul;
for (int i = 0, size = wifiList.size(); i < size; i++) {
scanResul = wifiList.get(i);
Log.e(TAG, "wifi name " + scanResul.SSID + " mac " + scanResul.BSSID);
Loger.printLog("scanWifiList", "wifi name " + scanResul.SSID + " mac " + scanResul.BSSID);
if (scanResul.BSSID.equals(bssid)) {
Log.e(TAG, "匹配到wifi name " + scanResul.SSID + " mac " + scanResul.BSSID);
return true;
}
}
return false;
}
/**
* 链接到wifi网络
*
* @param ssid
* @param password
* @param type
* @return 成功链接到wifi后返回
*/
private int connectToNetwork(String ssid, String password, @WifiType int type) {
WifiConfiguration configuration = createWifiInfo(ssid, password, type);
int networkId = mWifiManager.addNetwork(configuration); // 添加WIFI网络
if (networkId < 0) {
Log.e(TAG, "WIFI已连接失败 networkId:" + networkId);
return -1;
}
// 使WIFI网络有效
mWifiManager.enableNetwork(networkId, true);
Log.e(TAG, "WIFI已连接成功 networkId:" + networkId);
return networkId;
}
/**
* 创建WiFi配置
*
* @param ssid
* @param password
* @param type
* @return
*/
private WifiConfiguration createWifiInfo(String ssid, String password, @WifiType int type) {
clearOldConfiguration(ssid);
WifiConfiguration config = new Wif
版权声明:本文标题:Android 硬件通讯之 蓝牙,USB,WIFI(二.WIFI) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1728818540a1175176.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论