Android扫描条形码实现
2023-08-04 04:03:35发布 浏览383次 信息编号:67342
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
Android扫描条形码实现
扫描和识别条形码的支持库
支持扫描条形码。 不过我手头没有真机,所以无法理解这个函数到底是一个应用程序还是一个可以被API调用的函数。 不过,我在互联网上找到了一个用于处理条形码的免费开源库。 看:
可以作为应用程序安装在 上,请参阅:
或者,在另一个程序中使用该函数:
编写最简单的扫描条码函数
java中已经有第三方开源条码识别库(zxing),你只需要在自己的应用程序中调用第三方库的实现即可扫描条码。 我写扫描识别条形码的支持库的时候,还没有g1手机,所以现在就可以尝试一下。
为了调用zxing,需要先安装它:
为了调用zxing,需要先安装它:
程序很简单,第一个界面:
第二个界面跳转到zxing库提供的条码扫描。 这里,扫描生成的QR二维码中的网站url。
二维码可以瞬间识别,然后从zxing返回程序显示录入内容:
编写代码很容易。
java代码:
com。;
。应用程序。;
..;
.os.;
.view.View;
.视图.视图.;
..;
..;
班级 {
;
;
/** 当是第一个时。 */
@
空白 ( ) {
极好的。();
(R..main);
这。 = () this.(R.id.);
这个..(这个);
这。 = () this.(R.id.hello);
@
无效(查看视图){
= new("com..zxing...SCAN");
.("", "");
这个.lt(, 0);
@
无效(整数,整数,数据){
如果(!= 0){
;
这个..(数据。(“”));
目录下的main.xml:
”
:=“”
:=“”
:=“”
:id="@+id/你好"
:=“”
:=“”
:text="@/你好"
/>
目录中的.xml
目前没有扫描结果。
购物小参考
单击开始扫描...
您还可以从这个示例中看到强大的功能,您可以重用(reuse)其他应用程序的服务()或。
扫描产品条码
我刚才写的最简单的条码扫描功能只能扫描qr二维码。 如果要扫描常见的商品条码,则需要稍微修改一下程序。
界面变化:
扫描条码时的效果:
显示扫描结果(识别速度明显低于二维码):
代码更改:
com。;
。应用程序。;
..;
.os.;
.view.View;
.视图.视图.;
..;
..;
班级 {
;
;
;
/** 当是第一个时。 */
@
空白 ( ) {
极好的。();
(R..main);
这。 = () this.(R.id.);
这..(新(){
@
无效(查看v){
= 新(
“com..zxing...扫描”);
.("", "");
LT(, 0);
});
这。 = () this.(R.id.);
这..(新(){
@
无效(查看v){
= 新(
“com..zxing...扫描”);
.("", "");
LT(, 0);
});
这。 = () this.(R.id.hello);
@
无效(整数,整数,数据){
如果(!= 0){
;
这个..(数据。(“”));
写完这个例子后,我意识到我现在不需要写它:
.("", "");
zxing目前的库可以自动识别是哪种编码。 如果写了,则改为指定类型,其他类型的编码无法识别。 其实就是上面的:
.("", "");
错误的。 具体常数参数参见:
以上内容没有修改,正确的源码在代码的svn中分享,参见:
识别图书ISBN号并输出查询结果示例
我写了一个技术原型,通过手机识别图书的ISBN条码,然后通过豆瓣网的API输出ISBN号对应的图书信息。
这个例子非常简单。 顶部有一个按钮。 点击后会进入zxing,用于扫描图书的ISBN号。
使用zxing的扫描功能,这次出现了一些问题。 我的Nexus One相机比较脏,导致对焦后无法识别,或者识别速度很慢。 我吃了一惊,因为之前没有任何问题。
更换了几个版本的zxing后,问题依旧。 清洗镜片后,问题立即解决。
Nexus One 的像素和自动对焦功能可能还包括 CPU 处理因素,只需稍微对齐条形码,即可立即获得结果。 之前的G1速度较慢。
这也给捕获上面的屏幕截图带来了困难,因为扫描在一瞬间就结束了。 怎么做? 我用手在镜头上擦了几次,效果很好,哈哈。
找到图书后,通过豆瓣API获取图书的XML。 在这里,我想说,豆瓣的图书信息是比较齐全的。 我还通过外文书籍找到了资料。
由于使用联通WCDMA卡,整个过程非常快。
我们来谈谈代码中的一些关键点。
如何扫描条形码
现在对于条码扫描,java一般使用zxing。 复用zxing的方法有很多种。 最简单的方法就是安装zxing软件并通过。 在自己的应用程序中,通过调用zxing来扫描条码,然后将扫描结果返回给自己。
更复杂的方式是在自己的程序中包含zxing库,这样更适合正式应用。
本文使用前者。
示例代码
请参阅示例源代码:
还有一个更简单的例子,可以用来了解调用zxing和豆瓣API的基本流程,参见:
实现跳跃
在0.2版本中,涉及到3个,第一个是搜索书籍,见最上面的图。 点击按钮后,输入zxing。 从直观上看,zxing获得ISBN号后,进入第三个,显示该书的详细信息。
其实从zxing那里得到ISBN号后,我还是回到了找书上,但是我应该立即开始新的一本,输入一本新的。 另外,这里还演示了如何传递共享参数。
以下代码创建一个新的,并设置参数:
=新的();
。(这个班);
.("ISBN", 数据.().(""));
这。();
下面是从中得到的参数:
这个.().().(“ISBN”); zxing的使用可以参考我的另一个例子,扫描商品条码。使用本地页面的注意事项
在图书查询结果的展示中使用,可以使展示更加灵活、简单。
页面的显示方式有很多种,比如可以是远程服务器上的页面,这就需要服务器端的支持。 看来这样更省心,尤其是在异构终端的情况下,比如等等。手机开发者可以把这部分放一边,交给服务器端来解决。 而且它是一个统一的解决方案。
但在实践中,存在两个问题:
服务器端开发人员需要针对不同的移动客户端实现不同的样式,而服务器端开发人员往往不具备移动设备。 还有s60手机? 手机终端开发者无法灵活控制细节,(这里指的是环境,类似于环境)来支持访问手机的服务或者对象,但是这个是平台相关的,有自己的代码,也有它的特点。自己的代码,很难在端统一解决。
我试图在这个原型中解决,即HTML页面在手机本地,手机与服务器交互只获取数据,没有显示样式(即HTML页面的内容)。 手机通过并注入获取到的数据显示在本地页面。
这种方法的好处是:
手机与服务器的交互是为了获取数据,这是所有手机系统所共有的; 这种方式与AJAX类似,对数据流量的要求也会降低; 手机开发者可以灵活确定页面的风格和交互动作。
本例中html和css放在项目的目录下。 另外,这个目录下还有一张图片,是用来在没有加载到书本图片时占用位置的。 试想一下,如果不用的话,这个需求需要通过编程来处理,比较麻烦。 异步加载请参考图中的处理。
实现的代码很简单,这里有一个更简单的例子,参见 。 本例的相关代码:
这。 = () this.(R.id.);
这..().(假);
这..()。(
真的);
这是真的);
这个..(文件:////.html);
这里需要注意的是启用,否则无效。
java和html页面之间的互操作
Java与Java之间的通信问题,这种情况下就比较简单了,只需要调用java.lang. 如果是java调用,就应该启动一个单独的线程来实现。
需要创建一个接口对象供对象调用:
这个..ce(新(){
() {
.();
() {
.();
() {
.();
() {
.();
}, "");
第一个参数是调用对象,第二个参数是调用对象的名称。
看看如何调用这个对象:
.("").=..();
可以看到该对象多了一个对象属性,也就是上面方法中的第二个参数。 通过这个名字,调用上面第一个参数创建的内部类对象。
使用豆瓣API
豆瓣API官网:
这里只用到了根据ISBN获取图书信息xml的功能。 它在这里:
如果匿名使用此 API,则有一定的限制:
API 调用限制为每分钟不超过 10 个请求。
这里的调用次数是每个 IP 地址的。 对于移动应用来说,6秒以上扫描一本书应该就足够了。
解析豆瓣XML查询结果
对于豆瓣的xml查询结果,使用内置的api进行解析。
这和解析xml的区别在于,后者是获取xml的属性值,而这里是获取节点中的文本内容。
需要:
如果(我==。
&& .().("")
&& .(0).("标题")) {
.(.());
Log.v("", "标题>>" + .());
;
通过.()方法获取。 另外,需要注意的是,采集完成后,本次循环结束。
HTML 和 CSS
在这个例子中,查询结果的显示使用了丑陋的灰色背景,主要是为了演示外部css可以与html结合使用。
同样的,html页面中应该也可以引用外部的,计划在下一个版本中添加。
提醒:请联系我时一定说明是从星空网上看到的!