Xamarin.Android使用ZBar库扫描条码实现

简介: 首先要安装Xariman.Android。然后从https://github.com/yiyuanlu/zbar下载相应的zbar.jar和动态库文件。 首先需要使用Xariman.Android的Java Bindings Library功能,将zbar.jar变成.net调用的DLL文件。

首先要安装Xariman.Android。然后从https://github.com/yiyuanlu/zbar下载相应的zbar.jar和动态库文件。

首先需要使用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();

                }

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

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

目录
相关文章
|
20天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
4月前
|
安全 API Android开发
Android网络和数据交互: 解释Retrofit库的作用。
Android网络和数据交互: 解释Retrofit库的作用。
41 0
|
5月前
|
XML Android开发 数据安全/隐私保护
Android 自定义开源库 EasyView
Android 自定义开源库 EasyView
|
21天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
9月前
|
Android开发
Android中实现获取相册中的图片扫描二维码的功能
Android中实现获取相册中的图片扫描二维码的功能
187 0
|
4天前
|
缓存 Java Android开发
Android 9.0 WiFi 扫描结果上报和获取流程
Android 9.0 WiFi 扫描结果上报和获取流程
8 0
|
5天前
|
Android开发 C++
Android S HAL库的编译
Android S HAL库的编译
10 0
|
6天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
4月前
|
JSON Java Android开发
Android网络和数据交互: 请解释Android中的JSON解析库,如Gson。
Android网络和数据交互: 请解释Android中的JSON解析库,如Gson。
25 0
|
4月前
|
Android开发
Android源码学习(五):AVB2.0-libavb库介绍2
Android源码学习(五):AVB2.0-libavb库介绍2
119 0