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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章