1.在AndroidManifest.xml中配置权限

复制代码

在调用的activity中加入

复制代码

如图在这里输入图片标题

2.在onCreate调用

PrinterUtil.init(Activity)

复制代码

3.打印文字接口

PrinterUtil.printText(String)

复制代码

4.打印实现类

public class PrinterUtil {

private static UsbManager usbManager;

/**

* 满足的设备

*/

private static UsbDevice myUsbDevice;

/**

* usb接口

*/

private static UsbInterface usbInterface;

/**

* 块输出端点

*/

private static UsbEndpoint epBulkOut;

private static UsbEndpoint epBulkIn;

/**

* 控制端点

*/

private static UsbEndpoint epControl;

/**

* 中断端点

*/

private static UsbEndpoint epIntEndpointOut;

private static UsbEndpoint epIntEndpointIn;

/**

* 连接

*/

private static UsbDeviceConnection myDeviceConnection;

/**

* 初始化打印机(获取usb打印设备,连接打印机,获取USB连接权限)

* @param activity

*/

public static void init(Activity activity){

//1)创建usbManager

usbManager = (UsbManager)activity.getSystemService(Context.USB_SERVICE);

enumeraterDevices(activity);

getDeviceInterface();

assignEndpoint();

}

/**

* 枚举设备

*/

private static void enumeraterDevices(Activity activity){

HashMap deviceList = usbManager.getDeviceList();

Iterator deviceIterator = deviceList.values().iterator();

while(deviceIterator.hasNext()){

UsbDevice device = deviceIterator.next();

//每个打印机的vendorId和productId都不同,需要自行替换

if (device.getVendorId() == 4070 && device.getProductId() == 33054) {

myUsbDevice = device; // 获取USBDevice

PendingIntent pi = PendingIntent.getBroadcast(activity, 0,

new Intent(ACTION_USB_PERMISSION), 0);

usbManager.requestPermission(myUsbDevice, pi);

}

}

}

/**

* 获取设备的接口

*/

private static void getDeviceInterface() {

if(myUsbDevice!=null){

Log.i(TAG,"interfaceCounts : "+myUsbDevice.getInterfaceCount());

usbInterface = myUsbDevice.getInterface(0);

System.out.println("成功获得设备接口:" + usbInterface.getId());

}

}

/**

* 分配端点,IN | OUT,即输入输出;可以通过判断

*/

private static void assignEndpoint() {

if(usbInterface!=null){

for (int i = 0; i < usbInterface.getEndpointCount(); i++) {

UsbEndpoint ep = usbInterface.getEndpoint(i);

switch (ep.getType()){

case UsbConstants.USB_ENDPOINT_XFER_BULK://块

if(UsbConstants.USB_DIR_OUT==ep.getDirection()){//输出

epBulkOut = ep;

System.out.println("Find the BulkEndpointOut," + "index:" + i + "," + "使用端点号:"+ epBulkOut.getEndpointNumber());

}else{

epBulkIn = ep;

System.out .println("Find the BulkEndpointIn:" + "index:" + i+ "," + "使用端点号:"+ epBulkIn.getEndpointNumber());

}

break;

case UsbConstants.USB_ENDPOINT_XFER_CONTROL://控制

epControl = ep;

System.out.println("find the ControlEndPoint:" + "index:" + i+ "," + epControl.getEndpointNumber());

break;

case UsbConstants.USB_ENDPOINT_XFER_INT://中断

if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {//输出

epIntEndpointOut = ep;

System.out.println("find the InterruptEndpointOut:" + "index:" + i + "," + epIntEndpointOut.getEndpointNumber());

}

if (ep.getDirection() == UsbConstants.USB_DIR_IN) {

epIntEndpointIn = ep;

System.out.println("find the InterruptEndpointIn:" + "index:" + i + ","+ epIntEndpointIn.getEndpointNumber());

}

break;

default:

break;

}

}

}

}

private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";

/**

* 连接设备

*/

private static void openDevice() {

if(usbInterface!=null){//接口是否为null

// 在open前判断是否有连接权限;对于连接权限可以静态分配,也可以动态分配权限

UsbDeviceConnection conn = null;

if(usbManager.hasPermission(myUsbDevice)){

//有权限,那么打开

conn = usbManager.openDevice(myUsbDevice);

}

if(null==conn){

System.out.print("不能连接到设备");

return;

}

//打开设备

if(conn.claimInterface(usbInterface,true)){

myDeviceConnection = conn;

if (myDeviceConnection != null)// 到此你的android设备已经连上zigbee设备

System.out.println("open设备成功!");

final String mySerial = myDeviceConnection.getSerial();

System.out.println("设备serial number:" + mySerial);

} else {

System.out.println("无法打开连接通道。");

conn.close();

}

}

}

/**

* 打印文字

* @param activity

* @param txt

*/

public static void printText(Activity activity,final String txt){

openDevice();

new Thread(new Runnable() {

@Override

public void run() {

try {

//每个打印机的编码格式不一样,根据打印机的编码自行修改

byte[] buffer = txt.getBytes("GBK");

myDeviceConnection.bulkTransfer(epBulkOut,buffer,buffer.length,0);

} catch (Exception e) {

}

}

}).start();

}

复制代码

}

如果觉得我的文章对你有帮助,请点个赞,谢谢

android插件实现打印机,Android USB调用打印机(针式打印机)相关推荐

  1. react怎么连接打印机_electron+react调用打印机进行打印

    原创文章,转载请注明出处 首先主进程获取打印机列表传递给渲染进程 其次渲染进程展示打印机列表,并选择打印机 选择完打印机后,执行打印,或多个打印 获取打印机列表(渲染进程) try { ipcRend ...

  2. android 插件化 方案,Android应用开发之Android 插件化,qihoo360插件方案配置教程

    本文将带你了解Android应用开发Android 插件化,qihoo360插件方案配置教程,希望本文对大家学Android有所帮助. Android 插件化,qihoo360插件方案 目录 Andr ...

  3. Android插件丢失怎么办,Android studio推荐插件以及升级后插件丢失问题解决

    1.android-butterknife-zelezny android-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备 ...

  4. 带网络接口的打印机和USB接口打印机的共享区别

    共享打印机在办公中使用最为常见,它允许多人共用一台打印机,以节省成本. 通常打印机有两种连接电脑的方式,一种是的USB接口,另一种是网线接口的. USB接口打印机共享时,需要一台电脑主机,打印机与电脑 ...

  5. php调用 打印机,web端调用打印机方案总结(示例代码)

    背景 新零售业务开始以来,一些线下商品上架售卖的同时,要明确售卖价格,前期人工人肉写标签贴上商品售卖价,容易 产生疏忽,导致所标售卖价与收银所收价格不统一,造成顾客疑惑(据说还因为被投诉,上了新闻-_ ...

  6. firefox android 插件,Firefox for Android将很快迎来更多扩展插件

    与桌面版本相比,移动版浏览器的功能相当受限.即便如此,Firefox for Android 用户仍希望 Mozilla 能够满足其对于附加组件的丰富需求. 当 Mozilla 试图从头开始构建全新的 ...

  7. python 打印机控制_python调用打印机

    业务环境 windows+python 业务流程 读取网络地址 下载文件 打印本地文件 关键扩展 pywin32 关键软件 福昕pdf(静默打印关键,把福昕pdf编辑器变成pdf默认打开程序,wps也 ...

  8. java 打印机无法使用_java调用打印机问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public static void main(String[] args) { File file = new File("D:/test.t ...

  9. android studio(1)---探索Android Studio

    探索 Android Studio Android Studio 是基于 IntelliJ IDEA 的官方 Android 应用开发集成开发环境 (IDE). 除了 IntelliJ 强大的代码编辑 ...

最新文章

  1. 【CentOS 7LNMP架构33】,nginx负载均衡#180109
  2. Java高阶部分知识点汇总(二)-封装与隐藏详讲
  3. 这五个网站可以让你免费学习编程,快收藏!
  4. VTK:3DArray用法实战
  5. 细节之中自有天地,整洁成就卓越代码
  6. java提取图片中的文字,深入分析
  7. 浪潮5280m4管理口ip_TPLink云路由器如何更改LAN口IP地址 TPLink云路由器更改LAN口IP地址方法【介绍】...
  8. opencv ubuntu 汉字_ubuntu下没有中文输入法的解决办法
  9. 窗体点击,空白处隐藏(stopPropagation)
  10. 《人工智能:一种现代方法(AIMA)》绪论 智能Agent 思维导图
  11. android中bmob云存储,Android中的Bmob移动后端云服务器功能
  12. 三维触控测试软件,解读苹果3D touch三维触控技术
  13. uhs3内存卡有哪些_高速内存卡是什么 3款热门高速内存卡推荐
  14. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选
  15. android平台从froyo 2.2开始支持jni单步调试了
  16. Python_Task09:文件与文件系统
  17. MUR20060CT-ASEMI快恢复模块200A 600V
  18. 计算机类期刊 SCI 、EI 收录,核心期刊目录
  19. 动画(effects)素材dlc导入问题
  20. 银行的性质、经营原则和存在的经济学原理

热门文章

  1. 微信小程序生成(painter)海报
  2. 解锁ChatGPT超高级玩法,展示动态图片,纯干货分享!
  3. 软件测试周刊(第61期):内心强大的人都有三个共性「不和他人作比较」「不对他人有期待」「不批判他人」
  4. VisionPro软件笔记
  5. 较早版本OAI ENB启动问题解决
  6. win10设置pin一直转圈_Win10 自带手机投屏功能,80% 的人居然都不知道
  7. php 保留2位整数 补白,php图片处理类 缩放有补白效果
  8. 计算机原理说课教案,《计算机系统及工作原理说课稿》
  9. 第5章第17节:案例:使两张幻灯片中的图片进行平滑切换 [PowerPoint精美幻灯片实战教程]
  10. (4.2.40)阿里开源路由框架ARouter的源码分析