android串口通讯AS项目

该项目是AS结构,不用担心jNI转过来的配置问题了,文章结尾附测试的demo。

在这里插入图片描述

/**
 * 发送命令包
 */
public  void sendCommand(final String command) {

    LogPlus.i("发送命令:" + command);

    byte[] bytes = ByteUtil.hexStr2bytes(command);
    rxSendData(bytes).subscribeOn(mSendScheduler).subscribe(new Observer<Object>() {
        @Override
        public void onSubscribe(Disposable d) {

        }

        @Override
        public void onNext(Object o) {
            LogManager.instance().post(new SendMessage(command));
        }

        @Override
        public void onError(Throwable e) {
            LogPlus.e("发送失败", e);
        }

        @Override
        public void onComplete() {

        }
    });
}
/**
 * (rx包裹)发送数据
 *
 * @param datas
 * @return
 */
private Observable<Object> rxSendData(final byte[] datas) {

    return Observable.create(new ObservableOnSubscribe<Object>() {
        @Override
        public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
            try {
                sendData(datas);
                emitter.onNext(new Object());
            } catch (Exception e) {

                LogPlus.e("发送:" + ByteUtil.bytes2HexStr(datas) + " 失败", e);

                if (!emitter.isDisposed()) {
                    emitter.onError(e);
                    return;
                }
            }
            emitter.onComplete();
        }
    });
}
/**
 * 打开串口
 *
 * @param devicePath
 * @param baudrateString
 * @return
 */
public SerialPort open(String devicePath, String baudrateString) {
    if (mSerialPort != null) {
        close();
    }

    try {
        File device = new File(devicePath);
        int baurate = Integer.parseInt(baudrateString);
        mSerialPort = new SerialPort(device, baurate, 0);

        mReadThread = new SerialReadThread(mSerialPort.getInputStream());
        mReadThread.start();

        mOutputStream = mSerialPort.getOutputStream();

        mWriteThread = new HandlerThread("write-thread");
        mWriteThread.start();
        mSendScheduler = AndroidSchedulers.from(mWriteThread.getLooper());

        return mSerialPort;
    } catch (Throwable tr) {
        LogPlus.e(TAG, "打开串口失败", tr);
        close();
        return null;
    }
}

在这里插入图片描述
点击查看Demo

发布了32 篇原创文章 · 获赞 115 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/bryant_liu24/article/details/99309707
今日推荐