java 佳博打印机,佳博蓝牙打印的java 连接

适用于gp-3120tu机型通过蓝牙协议与android app的对接, 用的是TSC指令.

package com.freestyle.demo;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Handler;

import android.os.HandlerThread;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

import com.freestyle.R;

import com.freestyle.common.btprinter.SharedPreferencesUtil;

import com.gprinter.command.EscCommand;

import com.gprinter.command.LabelCommand;

import com.freestyle.common.btprinter.BTPrinterUtil;

import com.freestyle.common.btprinter.DeviceConnFactoryManager;

import com.freestyle.common.btprinter.PrinterCommand;

import com.freestyle.common.btprinter.ThreadPool;

import org.androidannotations.annotations.AfterViews;

import org.androidannotations.annotations.Click;

import org.androidannotations.annotations.EActivity;

import org.androidannotations.annotations.ViewById;

import java.util.Vector;

@EActivity(R.layout.activity_main)

public class MainActivity extends AppCompatActivity implements BTPrinterUtil.BTPrinterInterface {

BTPrinterUtil mUtil;

@ViewById

protected View disconnectBtn;

@ViewById

protected TextView info;

private SharedPreferencesUtil mSetting;

//private ThreadPool threadPool;

private String mLastDeviceMac = null;

HandlerThread mBgThread=null;

Handler mPrintHandler=null;

final static String mTitle="佳博蓝牙打印机SDK演示";

@Click

protected void connectBtn() {

mUtil.selectDevice();

}

@Click

protected void disconnectBtn() {

mUtil.disconnect();

}

private Runnable mPrintTestRunnable = new Runnable() {

@Override

public void run() {

if (mUtil.deviceIsSupportTSC(0)) {

sendLabel1();

} else {

Toast.makeText(MainActivity.this, "printer command failed.", (int) 2000).show();

}

}

};

@Click

protected void testBtn() {

/*if (!mUtil.checkConnect(0)) {

Toast.makeText(this, "Connect a printer first.", (int) 2000).show();

return;

}*/

mPrintHandler.post(new Runnable() {

@Override

public void run() {

if (DeviceConnFactoryManager.getDeviceConnFactoryManagers()[0] == null ||

!DeviceConnFactoryManager.getDeviceConnFactoryManagers()[0].getConnState()) {

if (mLastDeviceMac == null) {

Toast.makeText(MainActivity.this, "Connect a printer first.", (int) 2000).show();

return;

} else { //当蓝牙断开时,重新连接后再打印

mUtil.connectDevice(mLastDeviceMac);

new Thread(new Runnable() {

@Override

public void run() {

for (int i=1;i<=15000;i++) {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

if (!mUtil.waitFlag.get()) break;

}

runOnUiThread(new Runnable() {

@Override

public void run() {

if (!mUtil.checkConnect(0)) {

Toast.makeText(MainActivity.this, "Connect printer failed.", (int) 2000).show();

} else {

mPrintTestRunnable.run();

}

}

});

}

}).start();

}

}

mPrintTestRunnable.run();

}

});

}

/**

* 发送标签

*/

void sendLabel1() {

LabelCommand tsc = new LabelCommand();

// 设置标签尺寸,按照实际尺寸设置

tsc.addSize(65, 35);

// 设置标签间隙,按照实际尺寸设置,如果为无间隙纸则设置为0

tsc.addGap(2);

// 设置打印方向

tsc.addDirection(LabelCommand.DIRECTION.BACKWARD, LabelCommand.MIRROR.NORMAL);

// 开启带Response的打印,用于连续打印

tsc.addQueryPrinterStatus(LabelCommand.RESPONSE_MODE.ON);

// 设置原点坐标

tsc.addReference(0, 10);

// 撕纸模式开启

tsc.addTear(EscCommand.ENABLE.ON);

// 清除打印缓冲区

tsc.addCls();

tsc.addText(20, 20, LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE,

LabelCommand.ROTATION.ROTATION_0, LabelCommand.FONTMUL.MUL_1, LabelCommand.FONTMUL.MUL_1,

"PICK0NUM0AA");

tsc.addText(20, 70, LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE,

LabelCommand.ROTATION.ROTATION_0, LabelCommand.FONTMUL.MUL_1, LabelCommand.FONTMUL.MUL_1,

"JB0123456");

tsc.addText(20, 120, LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE,

LabelCommand.ROTATION.ROTATION_0, LabelCommand.FONTMUL.MUL_1, LabelCommand.FONTMUL.MUL_1,

"(15)");

/*for (int i=1;i<=4;i++) {

tsc.addText(20, 20+(i-1)*40, LabelCommand.FONTTYPE.valueOf("FONT_"+String.valueOf(i)),

LabelCommand.ROTATION.ROTATION_0, LabelCommand.FONTMUL.MUL_1, LabelCommand.FONTMUL.MUL_1,

"PICK0NUM0");

}*/

tsc.addQRCode(300, 20, LabelCommand.EEC.LEVEL_L, 7,

LabelCommand.ROTATION.ROTATION_0, "PICK0NUM0,12351253,123542");

// 绘制一维条码

//tsc.add1DBarcode(20, 250, LabelCommand.BARCODETYPE.CODE128, 100, LabelCommand.READABEL.EANBEL, LabelCommand.ROTATION.ROTATION_0, "SMARNET");

// 打印标签

tsc.addPrint(1, 1);

// 打印标签后 蜂鸣器响

tsc.addSound(2, 100);

tsc.addCashdrwer(LabelCommand.FOOT.F5, 255, 255);

Vectordatas = tsc.getCommand();

// 发送数据

mUtil.printContent(0, datas);

}

/**

* 发送标签

*/

void sendLabel() {

LabelCommand tsc = new LabelCommand();

// 设置标签尺寸,按照实际尺寸设置

tsc.addSize(65, 35);

// 设置标签间隙,按照实际尺寸设置,如果为无间隙纸则设置为0

tsc.addGap(2);

// 设置打印方向

tsc.addDirection(LabelCommand.DIRECTION.BACKWARD, LabelCommand.MIRROR.NORMAL);

// 开启带Response的打印,用于连续打印

tsc.addQueryPrinterStatus(LabelCommand.RESPONSE_MODE.ON);

// 设置原点坐标

tsc.addReference(0, 10);

// 撕纸模式开启

tsc.addTear(EscCommand.ENABLE.ON);

// 清除打印缓冲区

tsc.addCls();

// 绘制简体中文

tsc.addText(20, 20, LabelCommand.FONTTYPE.SIMPLIFIED_CHINESE,

LabelCommand.ROTATION.ROTATION_0, LabelCommand.FONTMUL.MUL_1, LabelCommand.FONTMUL.MUL_1,

"Welcome to use 佳博打印机!");

// 绘制图片

Bitmap b = BitmapFactory.decodeResource(getResources(), R.mipmap.gprinter);

tsc.addBitmap(20, 50, LabelCommand.BITMAP_MODE.OVERWRITE, b.getWidth(), b);

tsc.addQRCode(250, 50, LabelCommand.EEC.LEVEL_L, 5,

LabelCommand.ROTATION.ROTATION_0, " www.smarnet.cc");

// 绘制一维条码

//tsc.add1DBarcode(20, 250, LabelCommand.BARCODETYPE.CODE128, 100, LabelCommand.READABEL.EANBEL, LabelCommand.ROTATION.ROTATION_0, "SMARNET");

// 打印标签

tsc.addPrint(1, 1);

// 打印标签后 蜂鸣器响

tsc.addSound(2, 100);

tsc.addCashdrwer(LabelCommand.FOOT.F5, 255, 255);

Vectordatas = tsc.getCommand();

// 发送数据

mUtil.printContent(0, datas);

}

@AfterViews

public void initWidgets() {

mUtil.checkPermission();

mUtil.requestPermission();

disconnectBtn.setEnabled(false);

setTitle(mLastDeviceMac!=null?mTitle+" - "+mLastDeviceMac:mTitle);

if (mLastDeviceMac!=null){

mUtil.connectDevice(mLastDeviceMac);

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mUtil = new BTPrinterUtil(this, this);

mSetting=SharedPreferencesUtil.getInstantiation(this);

mLastDeviceMac=mSetting.getString(null,"device");

DeviceConnFactoryManager.context = this;

mBgThread=new HandlerThread("PrintThread");

mBgThread.start();

mPrintHandler=new Handler(mBgThread.getLooper());

}

@Override

protected void onDestroy(){

mBgThread.quit();

super.onDestroy();

}

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

mUtil.onActivityResult(requestCode, resultCode, data);

}

@Override

public void onACLDisconnected() {

mUtil.disconnect();

}

@Override

public void onDisconnected() {

Toast.makeText(this, "disconnected", (int) 1000);

disconnectBtn.setEnabled(false);

info.setText("Diconnected");

}

@Override

public void onConnecting() {

}

@Override

public void onConnected() {

disconnectBtn.setEnabled(true);

info.setText("connected:\n" + mUtil.getConnDeviceInfo());

mLastDeviceMac = mUtil.getLastPrinterMac();

mSetting.putString(mLastDeviceMac,"device");

setTitle(mTitle+" - "+mLastDeviceMac);

}

@Override

public void onConnectFailed() {

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

imageloader图片基本加载

初始化&#xff1a; 配置初始化&#xff1a; <application android:name".Jiaimgapp"使用&#xff1a; http://blog.csdn.net/vipzjyno1/article/details/23206387 http://blog.csdn.net/vipzjyno1/article/details/23206387 http://blog.csdn.net/hudashi/ar…

刚获得物理诺奖的数学家:现实是对完美数学真理的扭曲反应,人脑是最终量子计算机!...

来源&#xff1a; 数学竞赛的那些事儿在20世纪中期&#xff0c;数学探究自然模式的能力被大大地增强了&#xff0c;如果那些远古的几何学者们看到这一切&#xff0c;必将大为惊愕甚至迷惑不解&#xff0c;在极为宏观的尺度上&#xff0c;天文学家们以整个银河系为基本单位&…

Java注解中produces啥意思,注解@RequestMapping中的produces,consumes属性

今天在项目中看到了RequestMapping中有两个属性&#xff0c;consumes和produces&#xff0c;于是就想弄清楚这两个属性是干什么的。一、produces指定返回值类型&#xff0c;并且可以设置返回值类型和返回值的字符编码&#xff1b;demo/**属性produces"application/json&qu…

如何实时查看linux下的日志

如何实时查看linux下的日志 Unix/linux&#xff08;88&#xff09; cat /var/log/*.log 如果日志在更新&#xff0c;如何实时查看 tail -f /var/log/messages 还可以使用 watch -d -n 1 cat /var/log/messages -d表示高亮不同的地方&#xff0c;-n表示多少秒刷新一次。 该指令&…

2020年世界机器人报告

来源&#xff1a;国际机器人联合会最新的《2020年世界机器人报告》(The new World Robotics 2020 Industrial Robots)显示&#xff0c;在世界各地的工厂中运行的270万台工业机器人&#xff0c;创下纪录&#xff0c;增长了12&#xff05;。新机器人的销量保持较高水平&#xff0…

$.getJSON()

$.getJSON(order.php,{op:detail,order_id:id},function(data){} ) 等价于 $.ajax({url: url,data: data,success: callback,dataType: json }); 转载于:https://www.cnblogs.com/xiaobiaomei/p/8464632.html

2020年诺贝尔化学奖得主自述:基因编辑技术将把我们带向何方?

来源&#xff1a;赛先生作者 ┃ Jennifer Doudna &#xff08;美国加州大学伯克利分校化学与分子和细胞生物学系教授&#xff09;翻译 ┃ 马宗敏制版编辑 | 栗子北京时间2020年10月7日下午&#xff0c;诺贝尔奖化学奖授予了基因编辑领域的两位先驱。加州大学伯克利分校教授詹妮…

使用travelbook架设自己的实时位置共享服务

travelbook 是一款开源的安卓APP&#xff0c;它能以低功耗提供实时位置共享&#xff0c;它包含功能如下&#xff1a; 好友之间分享实时位置&#xff1b;记录行程轨迹&#xff1b;标记收藏地点&#xff1b; 这款软件的主要解决的问题包括&#xff1a; 场景1&#xff1a;查看老…

matlab怎么保存为透明图,matlab 透明图像 fig 保存

在网上发现如下codes&#xff0c;可以生成透明图形。%If you ever wondered how to get a matlab figure transparent(particularly usefull when you export it to formats that featuretransparency, like eps, gif, png, etc.), here is how you do it:% you created a figu…

揭秘:1.2亿美元光刻机内部视频曝光,像科幻片一样震撼!

来源&#xff1a;直观学机械 &#xff0c;转今日半导体荷兰阿斯麦&#xff08;ASML&#xff09;公司的光刻机作为世界上最贵最精密的仪器&#xff0c;相信大家都有耳闻&#xff0c;它是加工芯片的设备。其最先进的EUV&#xff08;极紫外光&#xff09;光刻机已经能够制造7nm以下…

树状数组-神奇的二进制

树状数组是解决快速更新以及统计数组某段区间总和&#xff0c;设一个数组A[1-N],需要计算A[M-K]的总和&#xff0c;暴力解法需要O(K-M)&#xff0c;如果我们求出sum&#xff08;1-K&#xff09;和sum&#xff08;1-M&#xff09;,那么答案就是sum(1-M)-sum(1-K); 那么如何快速求…

通往诺贝尔奖之路:盘点10个著名的科学家族

文章 | COLIN HUNTER来源 | 科研大匠科学家们常常将最亲近的合作者当做自己的亲人看待&#xff0c;而对于有些科学家而言&#xff0c;他们的合作者就是他们的家人。无论是由于遗传因素、教育因素还是二者的综合影响&#xff0c;那些开创性的物理学研究往往是一项家庭事业。从杰…

apache php 脚本,PHP脚本不在Apache服务器上执行

问题描述我刚刚重新安装了Apache和PHP5但是当我访问我的doc root时它只下载了一个”download”文件。当我尝试documentroot /index.php时&#xff0c;它只是下载PHP文件。我安装了PHP&#xff0c;但Apache似乎不想执行它。人们建议在我的httpd.conf中添加’Load Module’线&…

20165212 预备作业3 Linux安装及学习

20165212 预备作业3Linux安装及学习 Linux虚拟机的安装过程 我像大部分同学一样&#xff0c;通过助教学姐给的Ubuntu下载地址下载映像文件、VB&#xff0c;但是屡次出现问题&#xff0c;不停的闪出一下错误提示窗口&#xff1a;在像同学求助无果之后我使用VM、Ubuntu安装了Linu…

特斯拉公布的「新电池」,究竟要用在哪里?

来源丨ArsTechnica作者丨SCOTT K. JOHNSON编译丨科技行者在近期的“电池日&#xff08;battery day&#xff09;”活动上&#xff0c;特斯拉公司终于透露了其长期保密项目的一系列惊人消息——讨论了特斯拉为自家电池组做出的全方位升级与改进&#xff0c;并宣称有望在未来三年…

matlab重叠相加法求卷积,通过重叠相加法实现卷积的报告.doc

数字信号处理课程设计题目&#xff1a;通过重叠相加法实现卷积院系&#xff1a;自动化与信息工程学院专业&#xff1a;通信工程班级: 通信091学号: 3090432028姓名: 雷帛川指导教师: 李建勋职称: 副教授2012年7月1日2012年7月14日用结构化设计方法。一个程序划分成若干模块&…

从工程文化和运维理念理解Netflix

http://www.infoq.com/cn/news/2018/01/netflix-engineering-culture 在技术圈儿&#xff0c;Netflix 是一家非常有特色的互联网公司。他们信奉“自由与责任”的企业文化&#xff0c;鼓励工程师发挥自己的爱好与特长&#xff1b;特别开放&#xff0c;很多内部系统都开源了&…

Python 程序 可以一直输入 quit_从零开始学Python - 第002课:第一个Python程序

在上一课中&#xff0c;我们已经了解了Python这门语言并安装了运行Python程序所需的环境&#xff0c;相信大家已经迫不及待的想开始自己的Python编程之旅了。首先我们来告诉大家在哪些地方可以写Python程序。编写代码的工具交互式环境我们打开Windows的“命令行提示符”工具&am…

清华张钹院士专刊文章:迈向第三代人工智能(全文收录)

来源&#xff1a;清华大学人工智能研究院作者&#xff1a;张钹、朱军、苏航在这篇评述文章中&#xff0c;清华大学人工智能研究院院长、中国科学院院士张钹教授阐述了自己对于「第三代人工智能」的看法。他认为&#xff0c;第三代 AI 发展的思路是把第一代的知识驱动和第二代的…

java 垂直走马灯多行,Android实现图文垂直跑马灯效果

最近在维护老项目&#xff0c;老项目有一个地方需要修改&#xff0c;就是垂直跑马灯的问题&#xff0c;之前的垂直跑马灯是只有文字跑马灯&#xff0c;新版需要加上。之前是用的MarqueeView&#xff0c;看了下源代码是只支持文字的&#xff0c;于是我就改了下原作者的源代码。M…