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>

Android 平板通过USB口连接小票打印机相关推荐

  1. php实现usb小票 接口,网口或USB口的小票打印机如何接钱箱

    如果是网口或者USB口的打印机,就无法直接通过指定串并口来驱动钱箱了,针对这种情况,有两种方式可以实现让饭菜先生软件使用钱箱. 方式一.通过打印机共享名映射虚拟串并口进行驱动(推荐方式) 实现原理:通 ...

  2. 用“USB2.0 To SATA IDE CABLE”可以将很多电脑的硬件设备通过USB口连接到电脑上。

    用"USB2.0 To SATA  IDE CABLE"可以将很多电脑的硬件设备通过USB口连接到电脑上.

  3. console连接h3c s5500_win7系统使用USB口连接H3C交换机Console口的操作方法

    很多小伙伴都遇到过对win7系统使用USB口连接H3C交换机Console口进行设置的困惑吧,一些朋友看过网上对win7系统使用USB口连接H3C交换机Console口设置的零散处理方法,并没有完完全 ...

  4. pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解

    1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...

  5. android连接小票打印机,打印小票数据的两种模式

    为了开发android无线点餐系统,需要用到打印小票任务,根据网上查找资料所得,学习了两种方法,一种为通过tomcat服务连接服务器所连接的打印机打印,一种为直接连接网络打印机打印 一.通过tomca ...

  6. android 无sdk usb/蓝牙 连接热敏打印机外卖小票打印

    这是部分代码 获取代码 ->发送标题作为验证信息到该邮箱 itperson@foxmail.com ​​​​​​ /** js spi 蓝牙连接 接收 mac address :返回mac ad ...

  7. android平板电脑怎么才能连接电脑,怎么将安卓平板电脑装在车上 主板又是怎么连接上去的...

    现在很多汽车的影音系统是只能的安卓系统,使用起来非常的方便,同时还可以插入储存卡播放音乐.对于旧车子没有这个则可以自己动手将平板电脑安装上去. 1. 装在中控位 2. 用平板电脑改装 中控位选择可装平 ...

  8. android平板电脑怎么才能连接电脑,平板连接电脑没反应怎么办 平板怎样连接电脑...

    平板电脑是最近非常流行的一款电子设备,它拥有比手机更大的屏幕,带给用户更为出色的看视频与游戏体验,而且轻薄便携,是许多人出门在外必带的设备,有许多人在上使用平板电脑的过程中会与电脑相连接,把平板里的文 ...

  9. android平板电脑怎么才能连接电脑,平板电脑怎么连接电脑 最有效方法【图解】...

    随着手机大屏智能化的发展,商家为了满足消费者的大屏欲望,特地推出了大屏的 平板电脑 ,目前市场上主要的平板类型有安卓平板和 苹果 的ipad平板,为了方便实现对平板电脑的管理,我们必须把自己的平板电脑 ...

最新文章

  1. AttributeError: module 'tensorflow' has no attribute 'random_normal'
  2. 后端程序员的前端工具
  3. SQL取出每个产品的Top n 条记录
  4. 漫谈分布式事务的那些解决方案
  5. http://101.132.165.115/
  6. Bootstrap3 折叠插件的使用方法
  7. 黑白迷宫问题——深度优先搜索算法
  8. 神经网络填充(padding)
  9. python开发环境
  10. Android JNI 自定义对象为参数和返回值
  11. 华硕笔记本 FX50J 触控板驱动
  12. Protel 介绍 protel99se正式汉化版下载 Protel DXP2004简体中文版
  13. You tube music
  14. linux rpm 装 mac,linux之 rpm,yum
  15. wegame更改计算机设备,WEGAME手机串流怎么设置 WEGAME手机串流设置教程
  16. scikit-learn中的PCA
  17. YDOOK:Pytorch教程:转置矩阵 转置张量 T
  18. 学生证选课系统c语言大作业,学生选课管理系统c语言程序
  19. TensorFlow Object Detection API Custom Object Hangs On
  20. 警告:关于电磁辐射对孕妇的危害。

热门文章

  1. 【Tools】i1Profiler3.5安装教程详解
  2. 微信支付宝换钱源码 可对接易支付
  3. 华为云黎江:打造支付平台化解决方案,直面现代支付体系新挑战
  4. iOS-实现LCD类似计算器上显示的数字效果
  5. 进程、线程基础知识全家桶,30 张图一套带走
  6. 把DataGrid中的内容以Excel显示
  7. css 手机设备上的像素适配
  8. 微信小程序实现授权用户绑定的手机号,后台java解密
  9. 用MATLAB 进行男声和女声录音的频谱分析,指出频谱特征,然后尝试将男声变成女声和女声变成男声并分析频谱。 请问一下这个的代码怎么写呀...
  10. API卡_为了黑苹果初尝A家甜品卡——技嘉RX5600XT GAMING OC开箱简测