网站客服:zx81024163 |

Android扫描条形码实现

2023-08-04 04:03:35发布    浏览382次    信息编号: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页面中应该也可以引用外部的,计划在下一个版本中添加。

提醒:请联系我时一定说明是从星空网上看到的!