Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6658358
  • 博文数量: 915
  • 博客积分: 17977
  • 博客等级: 上将
  • 技术积分: 8846
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-26 09:59
个人简介

一个好老好老的老程序员了。

文章分类

全部博文(915)

文章存档

2022年(9)

2021年(13)

2020年(10)

2019年(40)

2018年(88)

2017年(130)

2015年(5)

2014年(12)

2013年(41)

2012年(36)

2011年(272)

2010年(1)

2009年(53)

2008年(65)

2007年(47)

2006年(81)

2005年(12)

分类: Android平台

2014-06-17 20:44:31

首先要安装Xariman.Android。然后从和动态库文件。

首先需要使用Xariman.AndroidJava Bindings Library功能,将zbar.jar变成.net调用的DLL文件。需要将zbar.jar的生成操作修改为EmbeddedJar。在转换过程中可能会发生错误:

错误         29     Net.Sourceforge.Zbar.SymbolIterator”不实现接口成员“Java.Util.IIterator.Next()”。“Net.Sourceforge.Zbar.SymbolIterator.Next()”无法实现“Java.Util.IIterator.Next()”,因为它没有匹配的返回类型“Java.Lang.Object”。  

没有关系,直接修改转换后的.cs文件。将返回类型由Net.Sourceforge.Zbar.Symbol改变成Java.Lang.Object。编译就能通过了。

其次,创建一个Android Application。引用刚才生成的Binding Library生成的DLL文件。创建一个目录Libs,下面包含armeabiarmeabi-v7aX86(目前X86不支持so文件的引用),将其中的.so文件的生成操作修改为AndroidNativeLibrary类型(否则在加载动态库时会出错)。

然后参照ZBar官方的Example,将其中的Java代码修改为C#代码。

在代码转换过程中,需要注意的是CameraTestActivity中定义的autoFocusCBpreviewCbbeepListenerJava中可以通过new Interface的方式直接实例。但在C#中不能这样做。所以需要让CameraTestActivity实现MediaPlayer.IOnCompletionListener, Camera.IPreviewCallback, Camera.IAutoFocusCallback三个接口。在OnCreate中将三个变量设置为this就可以了。如:this.autoFocusCB = this;

还有是doAutoFocusJava中是线程,在C#中使用Action

OnPreviewFrame中,Java对结果直接Foreach,但C#中不行。需要如下实现:

Java.Util.IIterator syms = scanner.Results.Iterator();

while (syms.HasNext)

                {

                    Symbol sym = syms.Next().JavaCast();

                    if (sym != null)

                    {

                        Intent intent = new Intent();                                  

                                                        intent.PutExtra("Code", sym.Data);

                        this.SetResult(Result.Ok, intent);

                    }

                    this.Finish();

                }

其中红色的类型转换很重要。

详细的工程参照附件。
ZBarNet.rar

阅读(9193) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~