React Native Socket 鏈接打印機推送指令


公司由於業務須要,開發安卓掃描槍打印快遞單之類的,踩了一天的坑,終於在隊友幫助下搞定
原理很簡單,利用打印機的socket通訊
話很少說,直接擼代碼
由於js不支持Socket通訊,因此須要本身編寫原生去實現前端

@ReactMethod
    public void print(String ip,Integer port, String msg, Promise promise) {
        try{
            Socket socket = new Socket(ip, port);
            if (socket.isConnected() ) {
                InputStream inputStream = socket.getInputStream();
                OutputStream os = socket.getOutputStream();
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
                bw.write(msg);
                bw.flush();
                promise.resolve("success");
            } else {
                promise.reject("鏈接打印機失敗");
            }
        }catch (Exception ex){
            promise.reject(ex.fillInStackTrace());
        }

    }

上面是一個原生方法,怎麼寫原生我就不說了,百度下就知道
開始的時候也遇到個小坑,VSCode的import java Class 是在糟糕,求看到人推薦個好用的插件,總之就是盡然不識別 promise類!!
啊,尷尬,後來看了下react-native-camera的源碼,看到的是加了java

import com.facebook.react.bridge.Promise;

好吧,仍是手動引入了(勿噴,本人以前沒寫過原生,總有第一次嘛,?)
以後的話就是在前端調用就能夠了react

import { NativeModules } from 'react-native'
NativeModules.PrintExtension.print(
        printAddr.split(':')[0],
        printAddr.split(':')[1]*1,
       '^XA^FO100,75^BY3^B3N,N,100,Y,N^FD123ABC^XZ').then((c) => {
                console.log(c)
                if (c!=="success") {
                    Modal.alert('打印失敗', c, [
                        { text: '肯定'},
                      ])
                }
            },(c)=>{
                console.log(c)
            })

記得以前看過某我的寫的文章說到,你寫RN,就得有寫原生的準備,嗯,如今也是深表贊成react-native

相關文章
相關標籤/搜索