背景:之前的安卓开发都是针对手机端,这次除了手机端之外,需要适配pda设备,我这个设备是C5000L型号,
然后对于PDA这类设备完全没有接触过,然后怎么也不清楚怎么使用。
因为用的是flutter,扫码库用的是qr_code_scanner: ^1.0.1,这个库在手机端没啥问题
到了PDA设备就有问题了,qr_code_scanner: ^1.0.1要求minSdkVersion至少24
于是乎将minSdkVersion写死成24,结果安装不到PDA上,只能改回原本的
minSdkVersion flutter.minSdkVersion
后面发现PDA的安卓版本是5.1的,minSdkVersion是21,后面放弃这种兼容方式
原因是PAD设备扫码通常不是用相机来扫码的(虽然pda也有相机),PDA设备本身就是设计来扫码的,他有另外一个扫码通道
只要一按对应按钮,扫码灯就会亮,如下图
一开始以为,扫码了之后,会立马回到结果,应该有对应的库,然后找了一圈,PDA设备的资源很少
终于找到一篇文章 https://blog.csdn.net/weixin_44786530/article/details/135341597
稍微了看一下,就是用这个库scan_gun
然后三下五除二就集成
我一开始就使用第一种方式,不需要输入框
后面发现,扫码之后,onSubmit本部没有响应,后面点击PDA上的enter键,onSubmit触发了,扫码结果也拿到了,
结果虽然拿到了,但是总不能每次扫码都要点击enter键,还是有点多余,我估计是这个库的作者没有适配安卓5.1。
后面和业务人员沟通才知道,需要一个输入框,就是上图中的第二种方式
直接复制过来,发现 也不行,后面发生输入框没有焦点,然后就加了一个主动获取焦点
@override
void initState() {
super.initState();
textFiledNode.requestFocus();
}
再次扫码,扫码结果就出现在输入框上了,这和业务员 说的一致,完工。
后面发现,其实还有一种方式,不需要输入框能拿到扫码结果
如下图 ,出自https://www.cnblogs.com/qiuhuiqiang/p/18219016
以及 https://blog.csdn.net/tt1234561009/article/details/137349056
简单 说就是在PDA中设置一下,将扫码结果通过广播来发送,在安卓中就可以监听广播来获取扫码结果,这就不需要输入框了
前提是你业务人员之前也是这种方式,因为有的PDA 设备, 广播和输入框只能2选一
于是乎我去找 C5000L的广播配置,参考上面两个文章都没有找到广播配置的位置,
估计是C5000L没有广播配置,后面就放弃了,但是有的PDA肯定是可以的,
推荐这个库,使用比较简单 flutter_broadcasts: ^0.4.0,android.intent.action.SCANRESULT是PDA设备的广播名称或者action
BroadcastReceiver receiver = BroadcastReceiver(names: <String>["android.intent.action.SCANRESULT"]);
receiver.messages.listen(print);
receiver.start();
具体我没有设备测试,但我知道肯定可行的,因为原生安卓经常使用广播