从基于 android 的移动条码扫描仪检测条码扫描事件
Detect barcode scanning event from android-based mobile barcode scanner
Android4.4.2 上有一个带有嵌入式激光条码扫描器和硬件 SCAN 按钮的设备。有什么方法可以用 java 接口挂钩 qr 扫描事件吗?
设备是 Sunlux xl-8681d,但它在 adb 设备列表中检测为 x301。
我用过类似的设备。当您单击某个可以编辑文本的区域并扫描条形码时,它会在该字段上打印吗?如果是,那么您可以在 Activity
:
中使用以下代码片段
重写 dispatchKeyEvent
方法。小样本:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getCharacters() != null && !event.getCharacters().isEmpty())
//Add more code...
return super.dispatchKeyEvent(event);
}
即使没有 EditText 也可以做到。您需要像这样订阅广播意图:
const val QR_ACTION: String = "android.intent.ACTION_DECODE_DATA"
const val QR_EXTRA: String = "barcode_string"
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
try {
Timber.d("Get intent ${intent.action}")
if (QR_ACTION == intent.action) {
if (intent.hasExtra(QR_EXTRA)) {
val code = intent.getStringExtra(QR_EXTRA)
Timber.d("New QR code $code")
// now you have qr code here
}
} }
} catch (t: Throwable) {
// handle errors
}
}
}
请先在您的扫描仪设置中检查 QR_ACTION 和 QR_EXTRA,不同品牌可能有所不同。
Android4.4.2 上有一个带有嵌入式激光条码扫描器和硬件 SCAN 按钮的设备。有什么方法可以用 java 接口挂钩 qr 扫描事件吗? 设备是 Sunlux xl-8681d,但它在 adb 设备列表中检测为 x301。
我用过类似的设备。当您单击某个可以编辑文本的区域并扫描条形码时,它会在该字段上打印吗?如果是,那么您可以在 Activity
:
重写 dispatchKeyEvent
方法。小样本:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getCharacters() != null && !event.getCharacters().isEmpty())
//Add more code...
return super.dispatchKeyEvent(event);
}
即使没有 EditText 也可以做到。您需要像这样订阅广播意图:
const val QR_ACTION: String = "android.intent.ACTION_DECODE_DATA"
const val QR_EXTRA: String = "barcode_string"
private val receiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
try {
Timber.d("Get intent ${intent.action}")
if (QR_ACTION == intent.action) {
if (intent.hasExtra(QR_EXTRA)) {
val code = intent.getStringExtra(QR_EXTRA)
Timber.d("New QR code $code")
// now you have qr code here
}
} }
} catch (t: Throwable) {
// handle errors
}
}
}
请先在您的扫描仪设置中检查 QR_ACTION 和 QR_EXTRA,不同品牌可能有所不同。