备注:由于该示例是基于友善之臂4412开发板,且用到了友善之臂官方提供的用于“硬件开发的.so“文件,及微光互联二维码扫码器,和一个串口控制继电器的SR-104A模块。文章主要是对如何调用这些现成的API做一个简单的测试。以备自己以后开发时查看。
1.找到4412开发板对底层外设的支持包
在4412光盘资料“D:\4412-DVD-A-15092\tools\libfriendlyarm-hardware”中
2.在新建的安卓工程中添加libfriendlyarm.so文件到项目的libs下。
3.把“java”下的“com”整个复制,粘贴到项目的“src”下
4.完成上述步骤后,可以依据4412官方提供的“Tiny4412 Android硬件开发指南”进行app对开发板上硬件资源的调用了。
(补充)5.以打开串口通讯为例。
5.1.查看串口相关的java类。
5.2.通过“HardwareControler.openSerialPort”来打开串口,返回值为大于0,即表示成功。这里的4个参数是写死的,板子上的串口设备主要是/dev/s3c2410_serial0(板子上的左1串口)和/dev/s3c2410_serial3(板子上的左2串口)
5.3通过HardwareControler.select来查询是否有数据传来,是否需要接受。通过HardwareControler.read
5.4通过“HardwareControler.write”来发byte[]数据。
(补充)6.串口控制继电器模块
6.1.关于串口控制的相关手册位于
6.2.简单的几点。
波特率:9600(很重要,如果设置错误,将无法实现结果)
数据位:8
停止位:1
模块可以控制4个继电器,但CH3和CH4为拓展口,在这个模块板子上没有,无法直接使用。只能控制CH1和CH2。
开CH1关CH2 : 0x01
开CH2关CH1 : 0x02
全开 : 0x0f
全关 : 0x00
由于上面“HardwareControler.write”只能接受byte[]型的数据,所以要传16进制的0x01时,需先转成byte[]型进行发送。
(补充)7.微光互联扫码小盒子模块
7.1关于微光互联扫码小盒子的相关资料位于
7.2.首先要查看安卓对UVC的是否支持,在不插扫码器的情况下,在终端中输入”adb shell” ,然后“ls –l /dev/video*” 将列出一些video设备;再把扫码器接上,执行上述命令“ls –l /dev/video*”。看两个的不同,找到那个多出来的设备,就是扫码器的设备名。
7.3如果发现权限为“crw-rw-rw-”,则需要修改该设备的权限
使用adb方式登陆,插入设备后,执行:
a)“chmod 777 /dev/video*”命令(注意此处需要超级用户“#”,如果不是“#”,而是“$”符号,在命令行下输入“su root”即可)
b)“chmod -R 777 /dev/bus/usb”命令
7.4添加 .so 文件和提供的包到你的安卓工程中
7.5初始设置
在需要使用设备的地方,执行初始化设置:
//设置QR状态,true时qr引擎开启;false时qr引擎关闭
VguangApi.setQRable(true);
//设置DM引擎状态,true时dm引擎开启;false时dm引擎关闭
VguangApi.setDMable(true);
//设置一维码引擎状态,true时一维码引擎开启;false时一维码引擎关闭
VguangApi.setBarcode(true);
// 设置解码间隔时间,单位毫秒
VguangApi.setDeodeIntervalTime(300);
//设置自动休眠状态,true时自动休眠开启;false时自动休眠关闭
VguangApi.setAI(false);
//设置扬声器状态,true时扬声器(缺省声音)开启;false时扬声器(缺省声音)关闭
VguangApi.setBeepable(true);
注意:在QR、DM、一维码中请至少设置一种。
最重要的是,初始化完成后,打开设备开始解码:
//打开设备
VguangApi.openDevice();
7.6 功能的调用
主要功能是在导入的源文件VguangApi.java 的方法。调用很简单
获得扫码器状态(这里用的是官方提供的示例程序的代码)
把示例工程里的“DecodeCallBack”类和“DeviceStatusCallBack”类复制进来
在mainActivity需要用到显示扫码结果和显示扫码器状态时,如下调用即可
(这里的tv3是textview控件,即扫码器的状态会显示到id为tv3的控件上)
(这里的tv2也是textview控件,即扫到的结果会显示到id为tv2的控件上)
补充:官方文档中对“回调”的讲解
2.1处理解码回调(必须)
实现com\vguang\IDecodeCallBack.java接口
public class DecodeCallBack implements IDecodeCallBack {
…
@Override
public void decodeCallBack(final String decodeStr) {
//根据实现情况修改处理
//这里的decodeStr,其实就是返回结果的容器。
//在调用VguangApi.setDecodeCallBack(decodeCallBack);后,decodeStr其实就已经是结果了。
}
}
设置解码回调:
DecodeCallBack decodeCallBack = new DecodeCallBack(this, decodeStr);
VguangApi.setDecodeCallBack(decodeCallBack);
(
个人补充简单示例:
//这个是扫码器的结果回调
public class DecodeCallBack implements IDecodeCallBack {
static String str=”没有值”;
@Override
public void decodeCallBack(final String decodeStr) {
System.out.println("decodeStr:" + decodeStr);
str=decodeStr;
}
}
在MainActivity中onCreate下的调用片段如下:
DecodeCallBack decodeCallBack = new DecodeCallBack();
VguangApi.setDecodeCallBack(decodeCallBack);
String str2=decodeCallBack.str;
// textview.settext(str2);//这句是错误的,因为onCreate是创建时的初始化页面,只执行一次,如果要在扫到结果后改变控件内容或页面,不能直接在onCreate里直接写textview.settext(str2);
)