zoukankan      html  css  js  c++  java
  • Delphi Android 将Google ZXing 整合(调用Jar文件)

         前篇文章介绍了在delphi App(以下简称App)中可使用intent来调用Google ZXing 条码扫描器(以下简称zx),其各有优缺点,优点是我们不需关注zx本身的细节,只需调用其接口即可,缺点是需额外安装zx扫描程序,如此一来客户体验就不够好,那么可否将zx直接整合到App中呢,答案是可以, 但实际操作起来会稍显繁琐,我们具体来看下过程,其中分两部分:第一部分介绍如何配置编译zx源码,第二部分介绍如何与App整合。

     

    第一部分:zx源码的配置和编译

    1:下载源码

      我选用的是2.3.0版本, 下载解压后如下图: 

    我们只需用到三个文件夹,其中

      core: 核心库文件。

      Android-integration:自带的整合库,编译时要用到。

      android:自带示例扫描程序(zx)。

    2.将核心库打包为jar

      这里我是先将core和android-integratio分别打包成jar来使用,你也可以直接使用源码。打开eclipse, 新建Android Application  Project,名字可任取,不需创建Activity,完成后在项目下新建src文件夹,将core中com文件夹整体复制到src中,右键项目,选择Export,在窗口中选择Java里的JAR file:

    只选取src文件夹, 这里导出名为ZXCore2.3.jar,android-integratio做同样的操作后得到ZXIntegration2.3.jar留着待用。

    3.编译zx

    复制一份Android文件夹(名字可自取),打开eclipse, 创建 Android  from existing code, 选取上述文件夹,完成之后项目中就有CaptureActivity(zx),然后导入上面打包好的两个jar文件,如下图所示:

    Build一下,如果没有出错提示,说明环境已经配置成功。

    4.源码稍作修改,以便delphi能正常回调

      a.打开CaptureActivity.java,注释掉onCreateOptionsMenu 事件,将菜单暂时隐藏掉,让它看起来更像个模块(你也可保留,但相关功能的资源文件必须发布且需在AndroidManifest添加相应Activity(如涉及到))。

      b.定位到 onResume事件: 注释以下两块代码:

    现在将工程重新Build或运行一次后就等待和App整合了。

    第二部分 App整合zx

    1.整合资源

      新建Firemonkey Mobile App, 在根目录建立如下文件夹:

    将 CaptureActivity中res里的文件复制到capture_assets中(本例中capture_assets文件夹存放的是一些帮助文件,未使用到,可以删除)。

    2.创建本地回调函数

      创建NativeActivitySubclass.java, 用于回调 zx 完成扫描后的 onActivityResult事件,该类继承自delphi NativeActivity,并在里面注册了一个Native回调方法,将 NativeActivitySubclass.java 生成 NativeActivitySubclass.dex的详细过程就不赘述了,这里说一下大致流程, 先将delphi 自带的classes.dex 还原成embarcadero.jar,使用 javac 带上 embarcadero.jar和 android.jar环境编译NativeActivitySubclass.java得到NativeActivitySubclass.class, 使用jar cvf 命令 将NativeActivitySubclass.class打包成jar,最后使用dx生成NativeActivitySubclass.dex。

    3.合并dex

      这里需要合并3个文件, Delphi自带的classes.dex, NativeActivitySubclass.dex,还有一个在CaptureActivity项目里的binclasses.dex,使用DexMerger合并上面3个dex为一个classes.dex, 至此功能已经整合完毕。

    4.添加权限

      delphi IDE > project > options > uses permission中对照下面添加权限:

    5. 修改AndroidManifest.template.xml

      a:将默认名称改成[package].[NativeActivitySubclass](视你的名称而定);

      b.添加CaptureActivity(这里只添加扫描功能,其他可按需添加)。

    6.发布

      a. Project > deployment:

        将目录里Capture_res打包到相应目录(不必将所有文件都打包进去,我删除了一些多语言和帮助文件(如果你的本地语言不是简体  中文,可以自己添加);

      b.将delphi自带的classes.dex替换成整合后的classes.dex。

    7. Build App, 调用zx

     既然zx已被整合,那么调用就非常简单了,只需三行代码即可(详细调用可见Demo):

    [delphi] view plain copy
     
    1. procedure CallInternalZXing;  
    2. var  
    3.   LIntent: JIntent;  
    4. begin  
    5.   LIntent := TJIntent.JavaClass.init;  
    6.   LIntent.setClassName(SharedActivityContext, StringToJString('com.google.zxing.client.android.CaptureActivity'));  
    7.   SharedActivity.startActivityForResult(LIntent, 0);  
    8. end;  

    App运行效果图(注意原先的"条码扫描器"已变成我们的App名称了):

    返回编码格式和解析结果:

    完整例子(包含ZXing2.3源码, 修改版CaptureActivity和详细Demo):

    http://download.csdn.net/detail/flcop/6993665

    http://blog.csdn.net/flcop/article/details/20240703

  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/findumars/p/7050415.html
Copyright © 2011-2022 走看看