在某些设备上使用热POS打印机时,UsbConnection.bulktransfer返回-1

如何解决在某些设备上使用热POS打印机时,UsbConnection.bulktransfer返回-1

我正在研究项目,我需要使用热敏打印机打印支票,该支票已连接到android设备。一切在xiaomi(android 9)上都可以正常工作,但是当尝试在其他设备(三星galaxy选项卡(android 8)和galaxy j3(android 6))上打印支票时,bulktransfer返回-1。

MainActivity类:Activity(){

/***/

/***/
var mPermissionIntent: PendingIntent? = null
var device: UsbDevice? = null
var manager: UsbManager? = null
var connection: UsbDeviceConnection? = null
var myInterface: UsbInterface? = null
var myEndpoint: UsbEndpoint? = null
var usbRequest: UsbRequest? = null

fun toast(value: String) {
    Toast.makeText(this,value,Toast.LENGTH_SHORT).show()
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    Log.d("FROMAIR","working")
    connect!!.setOnClickListener {
        textView!!.text = ""
        checkInfo()
    }
    print!!.setOnClickListener {
        printSomeData()
    }
    val bmpWidth = 180
    sasha_btn.setOnClickListener {
        val tv = Integer
            .toHexString(if (bmpWidth % 8 == 0) bmpWidth / 8 else bmpWidth / 8 + 1)

        toast(tv)
    }
}

private fun printSomeData() {
    GlobalScope.launch(Dispatchers.IO) {
        synchronized(this) {
            try {


            var bytes: ByteArray = byteArrayOf(0x1B,0x74,0x11)
            connection!!.bulkTransfer(myEndpoint,bytes,bytes.size,10000)
            for (i in 0..4) {
                //print text
                var text: String = to_printer_text.text.toString()
                bytes = text.toByteArray(Charset.forName("Cp866"))
                var res = connection!!.bulkTransfer(myEndpoint,10000)
                bytes = byteArrayOf(0x0A)
                connection!!.bulkTransfer(myEndpoint,10000)
            }
            }catch (e:Exception){
                Log.d("EXCEPTION","UNABLE TO PRINT CHECK")
                e.printStackTrace()
            }
        }
    }
}

private fun checkInfo() {
    manager = getSystemService(USB_SERVICE) as UsbManager
    /*
     * this block required if you need to communicate to USB devices it's
     * take permission to device
     * if you want than you can set this to which device you want to communicate
     */
    // ------------------------------------------------------------------
    mPermissionIntent = PendingIntent.getBroadcast(
        this,Intent(
            ACTION_USB_PERMISSION
        ),0
    )
    val filter = IntentFilter(ACTION_USB_PERMISSION)
    registerReceiver(mUsbReceiver,filter)
    // -------------------------------------------------------------------
    val deviceList = manager!!.deviceList
    val deviceIterator: Iterator<UsbDevice> = deviceList.values.iterator()
    var i = ""
    while (deviceIterator.hasNext()) {
        device = deviceIterator.next()
        manager!!.requestPermission(device,mPermissionIntent)
        i += """

            Interface0: ${device!!.getInterface(0).id}
            Endpoint0: ${device!!.getInterface(0).getEndpoint(0).direction}
             Interface1: ${device!!.getInterface(1).id}
            Endpoint0: ${device!!.getInterface(1).getEndpoint(0).direction} 
             Interface1: ${device!!.getInterface(1).id}
            Endpoint1: ${device!!.getInterface(1).getEndpoint(1).direction}
            """
    }
    textView!!.text = i
}

private val mUsbReceiver: BroadcastReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context,intent: Intent) {
        val action = intent.action
        if (ACTION_USB_PERMISSION == action) {
            synchronized(this) {
                val device = intent
                    .getParcelableExtra<Parcelable>(UsbManager.EXTRA_DEVICE) as UsbDevice?
                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,false)) {
                    if (device != null) {

                        myInterface = device.getInterface(1)
                        myEndpoint = myInterface!!.getEndpoint(0)
                        connection = manager!!.openDevice(device)
                        usbRequest = UsbRequest()
                        usbRequest!!.initialize(connection,myEndpoint)
                    } else {

                    }
                } else {
                    Log.d("ERROR","permission denied for device $device")
                    Toast.makeText(
                        context,"PERMISSION DENIED FOR THIS DEVICE",Toast.LENGTH_SHORT
                    ).show()
                }
            }
        }
    }
}

companion object {
    private const val ACTION_USB_PERMISSION = "com.mitapp.myapplication.USB_PERMISSION"
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-