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

目录
相关文章
|
15天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
40 15
Android 系统缓存扫描与清理方法分析
|
19天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
17 1
|
23天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
73 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
3月前
|
编解码 测试技术 Android开发
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
本文详细介绍了如何利用CameraX库实现高质量的照片及视频拍摄功能,包括添加依赖、初始化、权限请求、配置预览与捕获等关键步骤。此外,还特别针对不同分辨率和帧率的视频拍摄提供了性能优化策略,确保应用既高效又稳定。
283 1
Android经典实战之用 CameraX 库实现高质量的照片和视频拍摄功能
|
3月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
332 1
|
3月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
46 0
|
3月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
99 2
|
4月前
|
存储 数据库 Android开发
🔥Android Jetpack全解析!拥抱Google官方库,让你的开发之旅更加顺畅无阻!🚀
【7月更文挑战第28天】在Android开发中追求高效稳定的路径?Android Jetpack作为Google官方库集合,是你的理想选择。它包含多个独立又协同工作的库,覆盖UI到安全性等多个领域,旨在减少样板代码,提高开发效率与应用质量。Jetpack核心组件如LiveData、ViewModel、Room等简化了数据绑定、状态保存及数据库操作。引入Jetpack只需在`build.gradle`中添加依赖。例如,使用Room进行数据库操作变得异常简单,从定义实体到实现CRUD操作,一切尽在掌握之中。拥抱Jetpack,提升开发效率,构建高质量应用!
68 4
|
3月前
|
测试技术 API Android开发
Android经典实战之简化 Android 相机开发:CameraX 库的全面解析
CameraX是Android Jetpack的一个组件,旨在简化相机应用开发,提供了易于使用的API并支持从Android 5.0(API级别21)起的设备。其主要特性包括广泛的设备兼容性、简洁的API、生命周期感知、简化实现及方便的集成与测试。通过简单的几个步骤即可实现如拍照、视频录制等功能。此外,还提供了最佳实践指导以确保应用的稳定性和性能。
60 0
下一篇
无影云桌面