打印设置的一些常量

public static final byte[][] byteCommands = {{ 0x1b, 0x40 },// 复位打印机{ 0x1b, 0x4d, 0x00 },// 标准ASCII字体{ 0x1b, 0x4d, 0x01 },// 压缩ASCII字体{ 0x1d, 0x21, 0x00 },// 字体不放大{ 0x1d, 0x21, 0x11 },// 宽高加倍{ 0x1b, 0x45, 0x00 },// 取消加粗模式{ 0x1b, 0x45, 0x01 },// 选择加粗模式{ 0x1b, 0x7b, 0x00 },// 取消倒置打印{ 0x1b, 0x7b, 0x01 },// 选择倒置打印{ 0x1d, 0x42, 0x00 },// 取消黑白反显{ 0x1d, 0x42, 0x01 },// 选择黑白反显{ 0x1b, 0x56, 0x00 },// 取消顺时针旋转90°{ 0x1b, 0x56, 0x01 },// 选择顺时针旋转90°{ 0x1b, 0x69}// 选择顺时针旋转90°};

随着移动互联网发展,很多工作可能会使用移动设备进行办公。那么使用打印机就会变的频繁。   现在打印 一般会分为以下几个类型   蓝牙打印,网络打印,驱动打印

1.蓝牙打印

1.1  搜索蓝牙设备

1.2  和蓝牙设备建立连接

1.3  如果连接成功 则打印相应内容 和 命令(可以控制字体大小 等等一些指令)

1.4  还可记住该台设备的蓝牙mac,下次可直接连接该设备进行打印

先来分享下 打印命令(对大部分机器还是适用,可能部分厂商有不同的命令。可以先用这个命令试试,不行找厂商要)

下面写了个蓝牙连接的demo  需要用到 可以参考下

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.UUID;import android.app.Activity;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.Toast;public class BlueActivity extends Activity {private ArrayList<BluetoothDevice> mDeviceList;private BluetoothAdapter mBlueAdapter;private BluetoothSocket mBlueSocket;private OutputStream mOutputStream = null;private boolean mIsConnect = false;public static final byte[][] byteCommands = { { 0x1b, 0x40 },// 复位打印机{ 0x1b, 0x4d, 0x00 },// 标准ASCII字体{ 0x1b, 0x4d, 0x01 },// 压缩ASCII字体{ 0x1d, 0x21, 0x00 },// 字体不放大{ 0x1d, 0x21, 0x11 },// 宽高加倍{ 0x1b, 0x45, 0x00 },// 取消加粗模式{ 0x1b, 0x45, 0x01 },// 选择加粗模式{ 0x1b, 0x7b, 0x00 },// 取消倒置打印{ 0x1b, 0x7b, 0x01 },// 选择倒置打印{ 0x1d, 0x42, 0x00 },// 取消黑白反显{ 0x1d, 0x42, 0x01 },// 选择黑白反显{ 0x1b, 0x56, 0x00 },// 取消顺时针旋转90°{ 0x1b, 0x56, 0x01 },// 选择顺时针旋转90°{ 0x1b, 0x69 } // 选择顺时针旋转90°};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获取蓝牙适配器mBlueAdapter = BluetoothAdapter.getDefaultAdapter();// 如果获取的蓝牙适配器为空 说明 该设备不支持蓝牙if (mBlueAdapter == null) {finish();}mDeviceList = new ArrayList<BluetoothDevice>();initIntentFilter();}private void initIntentFilter() {// 设置广播信息过滤IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(BluetoothDevice.ACTION_FOUND);intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);// 注册广播接收器,接收并处理搜索结果registerReceiver(receiver, intentFilter);}@Overrideprotected void onDestroy() {super.onDestroy();// 注销广播unregisterReceiver(receiver);}/*** 蓝牙广播接收器*/private BroadcastReceiver receiver = new BroadcastReceiver() {ProgressDialog progressDialog = null;@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (BluetoothDevice.ACTION_FOUND.equals(action)) {BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);if (device.getBondState() == BluetoothDevice.BOND_BONDED) {// 该设备是之前配对设备} else {// 该设备是没有进行过配对的设备mDeviceList.add(device);}} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {progressDialog = ProgressDialog.show(context, "请稍等...","正在搜索蓝牙设备...", true);} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {// 蓝牙设备搜索完毕progressDialog.dismiss();}}};/*** * using the well-known SPP UUID 00001101-0000-1000-8000-00805F9B34FB.* However if you are connecting to an Android peer then please generate* your own unique UUID.* <p>* Requires {@link android.Manifest.permission#BLUETOOTH}* * @param uuid*            service record uuid to lookup RFCOMM channel* @return a RFCOMM BluetoothServerSocket ready for an outgoing connection* @throws IOException*             on error, for example Bluetooth not available, or*             insufficient permissions* @param device* @return*/public void connect(BluetoothDevice device) {// 蓝牙连接的uuid 注意:蓝牙设备连接必须使用该uuid 上面注释从源码中拷贝出来的// 可以看到 using the well-known SPP UUID// 00001101-0000-1000-8000-00805F9B34FB.// 而且别忘了给使用蓝牙的程序添加所需要的权限UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");try {// 根据uuid 获取一个蓝牙socketmBlueSocket = device.createRfcommSocketToServiceRecord(uuid);// 进行连接mBlueSocket.connect();// 连接后获取输出流mOutputStream = mBlueSocket.getOutputStream();// 如果蓝牙还在搜索的话 则停止搜索 (蓝牙搜索比较耗资源)if (mBlueAdapter.isDiscovering()) {mBlueAdapter.cancelDiscovery();}} catch (Exception e) {Toast.makeText(this, "连接失败!", Toast.LENGTH_SHORT).show();}mIsConnect = true;Toast.makeText(this, device.getName() + "连接成功!", Toast.LENGTH_SHORT).show();}/*** 打印内容*/public void printContent() {// 如果连接成功if (mIsConnect) {try {String title = "打印的标题";//执行其他命令之前  先进行复位mOutputStream.write(byteCommands[0]);//宽高加倍指令mOutputStream.write(byteCommands[4]);byte[] titleData = title.getBytes("GB2312");mOutputStream.write(titleData, 0, titleData.length);String content = "这是需要打印的内容 hello word";mOutputStream.write(byteCommands[0]);//恢复到标准字体mOutputStream.write(byteCommands[1]);byte[] contentData = title.getBytes("GB2312");mOutputStream.write(contentData, 0, contentData.length);mOutputStream.flush();} catch (IOException e) {Toast.makeText(this, "打印失败!", Toast.LENGTH_SHORT).show();}} else {Toast.makeText(this, "蓝牙设备为连接,或者连接失败!", Toast.LENGTH_SHORT).show();}}}

上面说到了 基本的连接 和打印内容 打印命令。下面分享记录蓝牙的mac,以及根据蓝牙mac连接设备

private void save(BluetoothDevice device) {String macAddress = device.getAddress();String blueName = device.getName();//可以将这两项保存到首选项里面  或者 写文件都行}private BluetoothDevice getDevice(String macAddress) {BluetoothDevice device = mBlueAdapter.getRemoteDevice(macAddress);return device;}

也就是下次我们如果还需要连接 上次连接过的设备  就不需要再进行搜索了。  直接将保持的地址和名称拿出来 连接  从而提高了用户体验。 当然 需要进行一系列判断

从上面来看  蓝牙连接来看,还是有一点问题。  第一就是  蓝牙连接的时候 没使用线程去连接(应该是耗时操作,大家不要学我啊...自己弄个线程和handler)。 第二就是 如果打印比较多的内容 是不是有点蛋疼啊。每次需要切换命令 其实 大家可以封装嘛。(提供个思路  如果有模板或者内容 很多  可以写个 base 基类  提供一些公用的方法呀  比如 打印标题 居中  打印分割符号  计算字节数 等等 尽性发挥自己的想象 打造自己的 模板框架)

蓝牙说了这么多 再给大家分享点小东西,比如 现在市场上一般的打印小票 都是 58mm和 80mm,

58mm一行的字节是 32 ,80mm的字节是48,当然还有一些其他用途的打印尺寸,如标签等等 蓝牙打印基本就这些

2.网络打印

网络打印就是利用网络连接打印机,打印我们所需的信息。那么网络这块毫无疑问用的socket。

上面蓝牙也有个BluetoothSocket,其实看源码可以知道  BluetoothSocket 就是对socket的一个封装,BluetoothSocket是蓝牙连接的专用的。

其也不多说 上代码

public void connect() {new Thread(new Runnable() {@Overridepublic void run() {try {SocketAddress ipe = new InetSocketAddress("192.168.181.11", 9100);Socket socket = new Socket();socket.connect(ipe);if (socket.isConnected()) {OutputStream outputStream = socket.getOutputStream();String title = "打印的标题";// 执行其他命令之前 先进行复位outputStream.write(byteCommands[0]);// 宽高加倍指令outputStream.write(byteCommands[4]);byte[] titleData = title.getBytes("GB2312");outputStream.write(titleData, 0, titleData.length);String content = "这是需要打印的内容 hello word";outputStream.write(byteCommands[0]);// 恢复到标准字体outputStream.write(byteCommands[1]);byte[] contentData = title.getBytes("GB2312");outputStream.write(contentData, 0, contentData.length);outputStream.flush();}} catch (Exception e) {e.printStackTrace();}}}).start();}

简单粗暴 只需要知道ip和端口(打印机端口如果没做说明 一般情况下为9100)

如果有特殊的 可以看看说明书 或者直接找生产厂家 至于打印内容也可以自行封装 另外用handler

进行对状态的一些维护 友好的提示用户)

这里再说下蓝牙打印,蓝牙打印 可以同时连接多个 打印机(一般情况下 连2-3个没什么问题,如果多了

机器可能撑不住 而直接崩溃 ,这和机器的硬件有关。一般情况下也不会连接那么多吧)

网络打印机应该也是一样 ,可以用线程维护 或者用service。

android 蓝牙打印和网络打印相关推荐

  1. Android蓝牙打印小票,仿美团外卖小票打印

    这个一个Android蓝牙打印小票demo,类似美团外卖小票打印 自适应排版小票格式,一行两列和三列轻松搞定,文本长短不用愁 先看一下效果图: demo里主要是使用汉印打印机进行蓝牙小票打印,它还支持 ...

  2. Android蓝牙打印服务,GitHub - ZhuangXiong/BluetoothPrint: android bluetooth print .蓝牙打印

    Android 蓝牙打印 入口和回调方便,目前只针对一个打印模板做了封装. 没有扫描设备功能,后期会加入.用户需要先去 设置---蓝牙---配对设备,配对完成后,可以获取手机上已配对的设备信息,从而进 ...

  3. android 蓝牙打印格式,Android蓝牙打印格式排版

    最近由于项目需求,在做蓝牙打印的功能.Android连接蓝牙打印机网上满天飞,但是内容的排版却很少. 我也是研究了下,自己封装了一个工具类希望可以方便开发. 这个类叫 BluetoothPrintFo ...

  4. Android蓝牙打印服务,Android 模拟蓝牙打印机

    1: 思路 百度百科的介绍 所谓蓝牙打印机,就是指在主机端用一单片机来仿真打印机进行工作,截取从主机并口传出的数据及控制信号,并通过蓝牙无线连接传送到打印机端.在打印机侧的单片机则根据所收到的蓝牙数据 ...

  5. Android 蓝牙打印指令

    一.概述 目前打印打印机支持的无线打印方式一般为wifi和蓝牙. 蓝牙打印关于蓝牙连接部分请查看上篇文章 -> Android 蓝牙连接 ,本篇文章讨论Android中蓝牙打印的指令实现. 蓝牙 ...

  6. Android 蓝牙打印小票与WiFi打印小票两种打印方式的实现(带有图片和二维码)

    转载至: https://blog.csdn.net/u011056653/article/details/74308254 最近在做小票打印这块,项目需求是蓝牙和WiFi两种都要实现,开始做的时候也 ...

  7. Android蓝牙打印格式排版

    最近由于项目需求,在做蓝牙打印的功能.Android连接蓝牙打印机网上满天飞,但是内容的排版却很少. 我也是研究了下,自己封装了一个工具类希望可以方便开发. 这个类叫 BluetoothPrintFo ...

  8. android 蓝牙打印 js,Native.js 安卓连接蓝牙打印机【可连续打印】

    自己摸索了一下,并参考其他人的代码,并修复了原来代码存在的问题, 问题1:字符串的getBytes函数,返回null[需要通过new的方式创建字符串] 问题2:初始化打印一次,之后无法使用[不要重复调 ...

  9. android 蓝牙打印兼容,在Android中使用蓝牙打印机打印不起作用

    我正在开发应用程序,允许用户创建PDF并允许使用蓝牙打印机进行打印. 我创建了PDF,但每当我要使用蓝牙打印机集成打印功能时,都会出现错误. 我无法获得蓝牙设备列表. 如果您有任何示例代码,请提供给我 ...

  10. android 蓝牙打印代码,分享一个b4a下安卓操作蓝牙打印机的代码

    b4a的  用到 Serial的库 实测过能用 另外:有人有    zxing_b4a_1.3plus_lib_demo.zip 的库没有? 关键代码 Sub Process_Globals Dim ...

最新文章

  1. 小型直流电机内部结构
  2. 使用java poi解析表格
  3. 自建ELK迁移阿里云日志服务
  4. 黄聪:WordPress 启用HTTPS设置(转)
  5. 调试U-Boot笔记(三)
  6. java 中的chartdata_获取Helm Charts中的文件夹列表
  7. python docx表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  8. [SCOI2005]扫雷(递推)
  9. iOS:NAV+TABLE结合
  10. python3 matplotlib多个子图分别对应不同colorbar
  11. matlab dmc控制代码,动态控制矩阵(DMC)算法的浅析
  12. 基于AT89C51单片机的电子万年历PROTEUS仿真设计
  13. my top visited webs
  14. 如何理解邮件中的“CC、PS、FYI”等英文缩写?
  15. RS-485什么情况下需要上下拉电阻?
  16. archlinux安装QQ微信
  17. 基于 ANTLR 自己实现一个 SQL 解析器
  18. Vant_根据已有地址获取code
  19. python英语词汇量测试_python英语单词测试小程序
  20. java学习总结(16.05.25)eclipse的查找和替换功能 Ctrl+F

热门文章

  1. 区块链重要基础知识8-1——冷存储以及热存储和他们之间相互如何结合
  2. 赏析角度有哪些_几种分析的角度
  3. 美军军事通信系统简史
  4. 学神乔明达和他堪称神迹的学习履历
  5. 资源变现小程序添加折扣充值和折扣影票插件
  6. 老旧笔记本电脑变服务器(笔记本电脑+内网穿透)
  7. 如何利用数据挖掘让RTB广告效果倍增?
  8. 海洋cms宝塔定时linux,海洋CMS使用计划任务实现自动采集/宝塔计划任务自动采集...
  9. matlab 用m_map画地形水深图
  10. mysql wresp_mysql