Android 硬件通讯之 蓝牙,USB,WIFI(二.WIFI)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值