微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 无法检测到 USB 设备

如何解决Android 无法检测到 USB 设备

我要将条码扫描器连接到我的手机并使用它。

在建立 USB 连接时检测事件 我写的代码如下。

AndroidManifest.xml

<uses-feature android:name="android.hardware.usb.host" />
..
<application
..
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />

                <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" />
>
</application>

xml/device_filter

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <usb-device vendor-id="1504" product-id="5889"/> <!--0x0d28 / 0x0204: ARM mbed-->
    <usb-device vendor-id="1504" product-id="6400"/>
</resources>

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private val ACTION_USB_PERMISSION = "com.example.test.USB_PERMISSION"

    private lateinit var usbManager: UsbManager

    private lateinit var serialDevice: UsbSerialDevice

    private lateinit var usbDeviceConnection: UsbDeviceConnection

    private lateinit var statusView: TextView
    private lateinit var resultView: TextView

    private lateinit var permissionIntent: PendingIntent



    private var usbReceiver = object : broadcastReceiver() {
        override fun onReceive(context: Context?,intent: Intent?) {
            if (ACTION_USB_PERMISSION == intent?.action) {
                printStatus("usbReceiver")
                synchronized(this) {
                    val device: UsbDevice? = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE)

                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED,false)) {
                        device?.apply {
                            printResult("Permission Granted for device $device")
                        }
                    }else {
                        printResult("Permission denied for device $device")
                        usbManager.requestPermission(device,permissionIntent)
                    }
                }
            }
        }
    }

    private var attachUsbReceiver = object : broadcastReceiver() {
        override fun onReceive(context: Context?,intent: Intent?) {
            if (UsbManager.ACTION_USB_DEVICE_ATTACHED == intent?.action) {
                printStatus("attachUsbReceiver")
                val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
                device?.let {
                    printDeviceList()
                }
            }
        }
    }

    private var detachUsbReceiver = object : broadcastReceiver() {
        override fun onReceive(context: Context?,intent: Intent?) {
            if (UsbManager.ACTION_USB_DEVICE_DETACHED == intent?.action) {
                printStatus("detachUsbReceiver")
                val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
                device?.let {

                }
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        statusView = findViewById(R.id.text_status)
        resultView = findViewById(R.id.text_result)

        usbManager = getSystemService(UsbManager::class.java)

        permissionIntent = PendingIntent.getbroadcast(this,Intent(ACTION_USB_PERMISSION),0)
        val filter = IntentFilter(ACTION_USB_PERMISSION)
        registerReceiver(usbReceiver,filter)

        val attachFilter = IntentFilter(UsbManager.ACTION_USB_DEVICE_ATTACHED)
        registerReceiver(attachUsbReceiver,attachFilter)

        val detachFilter = IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED)
        registerReceiver(detachUsbReceiver,detachFilter)

        handleIntent(intent)

        var availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager)

        if (availableDrivers.isEmpty()) {
            printStatus("Serial is Empty")
        }


    }

    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        handleIntent(intent)
    }

    private fun handleIntent(intent: Intent) {
        val device = intent.getParcelableExtra<UsbDevice>(UsbManager.EXTRA_DEVICE)
        if (device != null) {
            //printStatus("device is not null")
            printDeviceList()
        }else {
            printStatus("device is null")
        }
    }

    private fun printDeviceList() {
        val connectedDevices = usbManager.deviceList

        if (connectedDevices.isEmpty()) {
            printResult("No Devices Currently Connected")
        }else {
            val builder = buildString {
                append("Connected Device Count: ")
                append(connectedDevices.size)
                append("\n\n")
                for (device in connectedDevices.values) {
                    append(device.describeContents())
                    append("\n\n")
                }
            }
            printResult(builder)
        }
    }

    private fun printStatus(status: String) {
        statusView.text = status
        Toast.makeText(this,"Print Status " + status,Toast.LENGTH_LONG).show()
    }

    private fun printResult(result: String) {
        resultView.text = result
        Toast.makeText(this,"Print Result " + result,Toast.LENGTH_LONG).show()
    }

    override fun onKeyDown(keyCode: Int,event: KeyEvent?): Boolean {
        val pressedKey = event?.getUnicodeChar();
        var barcode: String = ""
        barcode += "" + pressedKey;
        Toast.makeText(getApplicationContext(),"barcode--->>>" + barcode,Toast.LENGTH_SHORT)
            .show();
        return true
    }
}

但是,我无法获取设备列表。 当我将条码扫描仪连接到安卓手机时,它返回连接的设备是空的。 在您看来,如果设置有任何问题,请告诉我。

请帮帮我

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?