NFC近场通信,NFC打印开发

版权声明:本文为博主原创文章,如许转载请在下方加上“搜索微信号 The_HK 获取更多信息与福利” https://blog.csdn.net/ccc920123/article/details/81316593

打印机属性

在进行NFC打印时我们先要了解打印机的属性,本文中打印机以EXP342为标准进行编写集成技术文档。EXP342的部分设置请参考该产品的使用说明书。我们在进行Android集成开发时需要注意打印机的黑标感应点的位置,确定打印纸张黑标是否完全覆盖打印机黑标感应点,如果未完全覆盖将会导致打印纸不能走到你预期想要的位置。标准纸张左黑标长度2.2cm,右边黑标长1.6cm,如果黑标未能达到该标准,系统默然将走纸长度为31.25cm处。

程序接入

在项目Project   build.gradle添加

allprojects {
                                      repositories {
                                                         ...
                                                         maven { url 'https://jitpack.io' }
                                      }
                   }

在项目app  build.gradle添加

 
dependencies {
                          implementation 'com.github.ccc920123:NfcLibrary:v1.0'

                   }

 

如果添加依赖部成功请直接到github上下载依赖包

https://github.com/ccc920123/NFCLib.git

步骤一:过滤标签,我们都知道每个NFC都有标签,当设备靠近标签时设备会前去解析标签,这里我们将过滤标签,再程序中只解析打印机标签,如果想要系统再靠近标签时不弹出系统空标签,在实际开发种我们将以下代码写在BaseActivity中,让其他Activity继承该该BaseActivity。

 

nfcPrinter = new NfcPrinter(this);
boolean result = nfcPrinter.check_loacl_NFC_device();//判断是否支持Nfc
if (!result)
    return;
nfcPrinter.setNfcForeground();

 

步骤二:再Activity 的onResume与onPause,启动与暂停读取打印机标签。

@Override

public void onResume() {
    super.onResume();
    if (nfcPrinter != null) {
        nfcPrinter.regist();
    }
}

@Override
public void onPause() {
    super.onPause();
    if (nfcPrinter != null) {
        nfcPrinter.disableForegroundDispatch();
    }

}

步骤三:组装数据,所有的数据都是通过Esc工具类封装,在Esc

中主要有以下重要的方法:

Esc esc = new Esc(2048);
esc.reset();//复位ESC指令
esc.feedRightMark();//走纸到右黑标

esc.feedLeftMark()//走纸到左黑标

esc.feedDots(int dots)// 走纸n点,每个点0.125mm,有点相当于空格

esc. feedLines(final int nLines)// 走纸n行,相当于换行符

esc.setAlign(EscDefine.ALIGN.CENTER);// 居中对齐,EscDefine.ALIGN支持LEFT,CENTER,RIFHT,三种对齐方式。

esc.setTextSize(EscDefine.BAR_TEXT_SIZE.ASCII_12x24);//设置字体大小,在该工具中封装了2种字体大小分别是ASCII_12x24,ASCII_8x16

esc.text(String text);// 添加文本

esc.mouldDefine(EscDefine.MOULD_ID id, final byte []data, final int dataLen)//设置模板

esc.mouldRun(EscDefine.MOULD_ID.m0, 1);//运行模板

esc.getESCData()//得到装的esc数据

步骤四:将封装的数据发送给打印机 

byte[] data = esc.getESCData();//获取需要发送的数据
this.nfcPrinter.startPrintTask(data, 1000 * 30);//开启线程发送数据

 

步骤五:

通过Handler来接受打印机反馈的结果。

public static Handler UImHandler;

 

 

@Override
protected void onStart() {
    super.onStart();
    //接受返回的数据
    UImHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) { //接收工作线程返回的消息
            Bundle bundle = msg.getData();
            byte[] data = bundle.getByteArray(KEY_DATA);
            String str = new String(data);
                      Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
      

            super.handleMessage(msg);
        }
    };
}

 

 

其他打印设备接入请修改Esc 类中的指令代码,例如:

/**
     * 复位ESC指令
     * @return
     */
    public boolean reset()
    {
        final byte[] cmd = {0x1B, 0x40};
        return add(cmd);
    }

其中我们看见到的 

0x1B, 0x40

这两个进制码表示打印机的复位,你只需根据其他打印机提供的进制码进行修改 。详情参考      例子

展开阅读全文

没有更多推荐了,返回首页