国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

安卓連接pos小票機(jī)和錢箱

2019-11-09 17:45:58
字體:
供稿:網(wǎng)友

測試工具具體用到:

1、58熱敏打印機(jī)

2、錢箱

3、Android Studio 2.2.2

4、測試平板一臺

端口號打印機(jī)一般都是9100

首先把打印機(jī)固定ip設(shè)置好,然后所有設(shè)備連接到同一網(wǎng)絡(luò)(不在同一網(wǎng)絡(luò)連接不上)

錢箱看需求,直接插在打印機(jī)上就行了

布局就很簡單寫一個Button按鈕就行,其他隨意

代碼:

/** * Created by zhaomingming on 2017/2/6. */public class Pos {    //定義編碼方式    PRivate static String encoding = null;    private Socket sock = null;    // 通過socket流進(jìn)行讀寫    private OutputStream socketOut = null;    private OutputStreamWriter writer = null;    /**     * 初始化Pos實(shí)例     *     * @param ip 打印機(jī)IP     * @param port  打印機(jī)端口號     * @param encoding  編碼     * @throws IOException     */    public Pos(String ip, int port, String encoding) throws IOException {        sock = new Socket(ip, port);        socketOut = new DataOutputStream(sock.getOutputStream());        this.encoding = encoding;        writer = new OutputStreamWriter(socketOut, encoding);    }    /**     * 關(guān)閉IO流和Socket     *     * @throws IOException     */    protected void closeIOAndSocket() throws IOException {        writer.close();        socketOut.close();        sock.close();    }    /**     * 打印二維碼     *     * @param qrData 二維碼的內(nèi)容     * @throws IOException     */    protected void qrCode(String qrData) throws IOException {        int moduleSize = 8;        int length = qrData.getBytes(encoding).length;                //打印二維碼矩陣        writer.write(0x1D);// init        writer.write("(k");// adjust height of barcode        writer.write(length + 3); // pl        writer.write(0); // ph        writer.write(49); // cn        writer.write(80); // fn        writer.write(48); //        writer.write(qrData);        writer.write(0x1D);        writer.write("(k");        writer.write(3);        writer.write(0);        writer.write(49);        writer.write(69);        writer.write(48);        writer.write(0x1D);        writer.write("(k");        writer.write(3);        writer.write(0);        writer.write(49);        writer.write(67);        writer.write(moduleSize);        writer.write(0x1D);        writer.write("(k");        writer.write(3); // pl        writer.write(0); // ph        writer.write(49); // cn        writer.write(81); // fn        writer.write(48); // m        writer.flush();    }    /**     * 進(jìn)紙并全部切割     *     * @return     * @throws IOException     */    protected void feedAndCut() throws IOException {        writer.write(0x1D);        writer.write(86);        writer.write(65);        //        writer.write(0);        //切紙前走紙多少        writer.write(100);        writer.flush();        //另外一種切紙的方式        //        byte[] bytes = {29, 86, 0};        //        socketOut.write(bytes);    }    /**     * 打印換行     *     * @return length 需要打印的空行數(shù)     * @throws IOException     */    protected void printLine(int lineNum) throws IOException {        for (int i = 0; i < lineNum; i++) {            writer.write("/n");        }        writer.flush();    }    /**     * 打印換行(只換一行)     *     * @throws IOException     */    protected void printLine() throws IOException {        writer.write("/n");        writer.flush();    }    /**     * 打印空白(一個Tab的位置,約4個漢字)     *     * @param length 需要打印空白的長度,     * @throws IOException     */    protected void printTabSpace(int length) throws IOException {        for (int i = 0; i < length; i++) {            writer.write("/t");        }        writer.flush();    }    /**     * 打印空白(一個漢字的位置)     *     * @param length 需要打印空白的長度,     * @throws IOException     */    protected void printWordSpace(int length) throws IOException {        for (int i = 0; i < length; i++) {            writer.write("  ");        }        writer.flush();    }    /**     * 打印位置調(diào)整     *     * @param position 打印位置  0:居左(默認(rèn)) 1:居中 2:居右     * @throws IOException     */    protected void printLocation(int position) throws IOException {        writer.write(0x1B);        writer.write(97);        writer.write(position);        writer.flush();    }    /**     * 絕對打印位置     *     * @throws IOException     */    protected void printLocation(int light, int weight) throws IOException {        writer.write(0x1B);        writer.write(0x24);        writer.write(light);        writer.write(weight);        writer.flush();    }    /**     * 打印文字     *     * @param text     * @throws IOException     */    protected void printText(String text) throws IOException {        String s = text;        byte[] content = s.getBytes("gbk");        socketOut.write(content);        socketOut.flush();    }    /**     * 新起一行,打印文字     *     * @param text     * @throws IOException     */    protected void printTextNewLine(String text) throws IOException {        //換行        writer.write("/n");        writer.flush();        String s = text;        byte[] content = s.getBytes("gbk");        socketOut.write(content);        socketOut.flush();    }    /**     * 初始化打印機(jī)     *     * @throws IOException     */    protected void initPos() throws IOException {        writer.write(0x1B);        writer.write(0x40);        writer.flush();    }    /**     * 加粗     *     * @param flag false為不加粗     * @return     * @throws IOException     */    protected void bold(boolean flag) throws IOException {        if (flag) {            //常規(guī)粗細(xì)            writer.write(0x1B);            writer.write(69);            writer.write(0xF);            writer.flush();        } else {            //加粗            writer.write(0x1B);            writer.write(69);            writer.write(0);            writer.flush();        }    }}
錢箱代碼,放到打印前或者打印后都可以
//十六進(jìn)制開錢箱        writer.write(0x1B);        writer.write(0x70);        writer.write(0x0);        writer.write(0x3C);        writer.write(0xFF);
再定義一個
public class FoodsBean {    private String name;    private String price;    private String number;    private String sum;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPrice() {        return price;    }    public void setPrice(String price) {        this.price = price;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    public String getSum() {        return sum;    }    public void setSum(String sum) {        this.sum = sum;    }}
主頁面代碼:
    public class MainActivity extends AppCompatActivity {        private List<FoodsBean> foodsBean;        private Pos pos;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button bt_print = (Button) findViewById(R.id.button);        bt_print.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                // 開啟一個子線程                new Thread() {                    public void run() {                        try {                            pos = new Pos("192.168.110.100", 9100, "GBK");    //第一個參數(shù)是打印機(jī)網(wǎng)口IP                            //初始化打印機(jī)                            pos.initPos();                            //初始化訂單數(shù)據(jù)                            initData();                            pos.bold(true);                            pos.printTabSpace(2);                            pos.printWordSpace(1);                            pos.printText("**測試店鋪");                            pos.printLocation(0);                            pos.printTextNewLine("----------------------------------------------");                            pos.bold(false);                            pos.printTextNewLine("訂 單 號:1005199");                            pos.printTextNewLine("用 戶 名:15712937281");                            pos.printTextNewLine("桌    號:3號桌");                            pos.printTextNewLine("訂單狀態(tài):訂單已確認(rèn)");                            pos.printTextNewLine("訂單日期:2017/2/6 10:36:53");                            pos.printTextNewLine("付 款 人:線下支付(服務(wù)員:高策)");                            pos.printTextNewLine("服 務(wù) 員:1001");                            pos.printTextNewLine("訂單備注:不要辣,少鹽");                            pos.printLine(2);                            pos.printText("品項(xiàng)");                            pos.printLocation(20, 1);                            pos.printText("單價");                            pos.printLocation(99, 1);                            pos.printWordSpace(1);                            pos.printText("數(shù)量");                            pos.printWordSpace(3);                            pos.printText("小計(jì)");                            pos.printTextNewLine("----------------------------------------------");                            for (FoodsBean foods : foodsBean) {                                pos.printTextNewLine(foods.getName());                                pos.printLocation(20, 1);                                pos.printText(foods.getPrice());                                pos.printLocation(99, 1);                                pos.printWordSpace(1);                                pos.printText(foods.getNumber());                                pos.printWordSpace(3);                                pos.printText(foods.getSum());                            }                            pos.printTextNewLine("----------------------------------------------");                            pos.printLocation(1);                            pos.printLine(2);                            //打印二維碼                            pos.qrCode("http://www.qingcanbang.com/");                            //切紙                            pos.feedAndCut();                            pos.closeIOAndSocket();                            pos = null;                        } catch (UnknownHostException e) {                            e.printStackTrace();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }.start();            }        });    }    private void initData() {        foodsBean = new ArrayList<>();        for (int i = 0; i < 4; i++) {            FoodsBean fb = new FoodsBean();            fb.setName("測試菜品" + i);            fb.setPrice("90.00");            fb.setNumber("1" + i);            fb.setSum("10" + i + ".00");            foodsBean.add(fb);        }    }}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁乡县| 陆丰市| 台南县| 神农架林区| 靖江市| 鄯善县| 安化县| 洪江市| 台山市| 赫章县| 五莲县| 永和县| 林西县| 保亭| 柳江县| 鹤壁市| 高碑店市| 兴安盟| 雷州市| 姚安县| 铜鼓县| 亚东县| 高碑店市| 霞浦县| 富锦市| 辽源市| 晋州市| 观塘区| 晋州市| 出国| 大竹县| 西宁市| 大姚县| 封开县| 阿拉善右旗| 喀喇沁旗| 章丘市| 义乌市| 日喀则市| 马边| 内江市|