Android 平板通过USB口连接小票打印机

news/2024/11/16 16:21:37/

1.首先注册一个广播:用户三种操作会导致系统发广播,插或者拔USB设备,还有就是在USB授权框点击是或者否

    private void initReceiver() {//授权对话框点击操作之后会发出系统广播receiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {LogUtils.w(TAG,"postRequestPermission");String action = intent.getAction();if (ACTION_USB_PERMISSION.equals(intent.getAction())) {synchronized (this){UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);boolean usbPremission = intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false);if((usbPremission) && (device != null)){closeDevice();initUsb();openUsbDevice();}else{}}}else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)){LogUtils.w(TAG,"有设备插入");UsbDevice usbDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);if(usbDevice != null){if (!mUsbManager.hasPermission(usbDevice)) {mUsbManager.requestPermission(usbDevice, mPendingIntent);}}else{}}else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)){LogUtils.w(TAG,"有设备拔出");UsbDevice usb = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);closeDevice();}}};IntentFilter ifilter = new IntentFilter(ACTION_USB_PERMISSION);ifilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);ifilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);registerReceiver(receiver, ifilter);}

2.可能在你打开你的APP之前就已经有USB打印机连接在你的平板上了,这个时候需要给他授权并打开它:

    private void openConnectedDevice() {mUsbManager = ((UsbManager) this.getSystemService(Context.USB_SERVICE));mPendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);if(requestPermission(this) == Common.ERROR_CODE.SUCCESS) {initUsb();openUsbDevice();}}public Common.ERROR_CODE requestPermission(Context context) {LogUtils.w(TAG,"requestPermission");UsbDevice usbdev = getUsbDevice(mUsbManager);if (usbdev != null) {// get requestPermissionif (!mUsbManager.hasPermission(usbdev)) {LogUtils.w(TAG,"requestPermission 没有权限");mUsbManager.requestPermission(usbdev, mPendingIntent);return Common.ERROR_CODE.ERROR_OR_NO_ACCESS_PERMISSION;}LogUtils.w(TAG,"requestPermission 获取到了权限");return Common.ERROR_CODE.SUCCESS;}return Common.ERROR_CODE.NO_USB_DEVICE_FOUND;}
    static UsbDevice getUsbDevice(UsbManager um) {HashMap<String, UsbDevice> lst = um.getDeviceList();Iterator<UsbDevice> deviceIterator = lst.values().iterator();while (deviceIterator.hasNext()) {UsbDevice dev = (UsbDevice) deviceIterator.next();LogUtils.d(TAG, "usb device : " + String.format("%1$04X:%2$04X", dev.getVendorId(), dev.getProductId()));if (dev.getVendorId() == 0x0485 ) {return dev;}if (dev.getVendorId() == 0xB000 ) {return dev;}}return null;}


给某个USB口授权很简单:

mUsbManager.requestPermission(usbdev, mPendingIntent);
调用这句代码就行,调用之后系统会弹出对话框让用户来选择是或者否,用户点击之后,系统发出action为 ACTION_USB_PERMISSION 的广播,第一步刚好注册了此action的广播来处理此操作,如果点“是”,就是打开此USB设备,如下:

closeDevice();
initUsb();
openUsbDevice();

3.第二步是考虑到在打开APP之前已经有USB设备连上Android平板,如果在打开之后插上USB设备怎么连接上呢?第一步已经说过插拔设备,系统都会发出广播,恰好第一步都注册此action的广播来处理插拔USB的操作。比方如果有设备插上,系统会发出ACTION_USB_DEVICE_ATTACHED 的广播,APP收到此广播后要对权限进行判断,如果没有权限则进行授权操作,处理如下:

else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action))
{LogUtils.w(TAG,"有设备插入");UsbDevice usbDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);if(usbDevice != null){if (!mUsbManager.hasPermission(usbDevice)) {mUsbManager.requestPermission(usbDevice, mPendingIntent);}}
}
上面这段代码在第一步中已经存在,为了方便观看,所以在这里再贴一次。

4.上面是在activity中的代码,在androidmanifest中也需要添加相应代码如下:

<activity android:name=".ui.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /></intent-filter><meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"android:resource="@xml/device_filter" /></activity>

<?xml version="1.0" encoding="utf-8"?><resources><usb-device vendor-id="1137" /><usb-device vendor-id="7358" />
</resources>





http://www.ppmy.cn/news/475209.html

相关文章

macOS下不支持双面打印功能的惠普打印机如何进行手动双面打印

使用 HP 打印机在纸张的正反两面打印 使用打印驱动程序中的设置&#xff0c;在 HP InkJet 打印机或 LaserJet 打印机上设置双面打印作业。 双面打印 (Windows) 使用 HP 打印机软件在喷墨或 LaserJet 打印机上设置双面打印作业。 要避免⻚面顺序问题&#xff0c;请将足够用来完…

安装lodop插件后仍然无法打印_打印机迷惑行为:打印一半

打印机用久了难免会出现故障,在打印过程中可能会遇到各种各样的迷惑行为,比如:打印乱码、条纹、黑点、阴影等。今天小编就来给大家说说激光打印机的迷惑行为:打印一半如何解决。 原图 打印一半 01 检查打印机 检查打印机查看是否是打印机出现故障,操作步骤如下: 关闭打…

惠普打印机只打印一半_打印机打出来的字只有一半是什么原因

以惠普打印机为例&#xff0c;打印机打出来的字只有一半的原因是&#xff1a; 1、所打印的文档表格内容超出了打印区域&#xff1a;当文档表格的内容超出纸张承载的打印区域时&#xff0c;打印机就会打印不完整。 解决方法&#xff1a;调整文档和表格&#xff0c;使内容在打印区…

win10解除安全模式

安全模式cmd input&#xff1a; bcdedit /deletevalue {current} safeboot

怎么在安全模式里找计算机用户,安全模式怎么解除

安全模式怎么解除 电脑出现问题时我们最常做的就是进入安全模式进行系统的修复&#xff0c;进入安全模式有很所种&#xff0c;比如开机时按F8即可进入。在我们进入安全模式后&#xff0c;在此重启电脑一般就会正常启动了&#xff0c;但是有些时候因为一些设置的原因我们的电脑还…

android电视安全模式,电视安全模式怎么解除

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。 电视安全模式解除的方法是&#xff1a; 1、将电视机遥控器对准电视机&#xff0c;按下“菜单键”&#xff0c;电视机底部会弹出常用的菜单设置&#xff1b; 2、使用电视机遥控器的左…

计算机大赦天下教程,dnf关于制裁的制度规则_关于安全公约2.0的一些答疑 讲解什么是大赦天下_好特教程...

2016年7月7日&#xff0c;DNF运营团队&安全中心推出了安全公约2.0&#xff0c;大概内容是重新定义分级处罚方式&#xff0c;以及确定了”黑历史判定“存在&#xff0c;“坐飞机”“卡称号”等会受到处罚等。 其中有一条被大家讨论的比较多 PS&#xff1a;”利用恶性bug“属…

射击场设计方案平面图和效果图分享

目前市面上用于专业实弹射击训练的靶场以室内靶场居多&#xff0c;室内靶场建设包括土建和设备安装两大部分&#xff0c;土建包括整体用地的基础土地建设&#xff0c;前提是室内靶场的选址和大环境适合于实弹打靶训练&#xff0c;一般该类场地多位于人少、宽阔地域处&#xff0…