首页
学习
活动
专区
圈层
工具
发布

card.io ()
EN

Stack Overflow用户
提问于 2013-04-16 01:23:23
回答 2查看 1.3K关注 0票数 8

是否有人成功地创建了一个他们愿意共享的card.io包装器,可以在Mono应用程序中使用,或者有人能说明我做错了什么?

  1. 创建一个新的Android绑定库项目
  2. 从.jar添加card.io SDK 3.0.3和.so文件,确保使用现有的文件夹结构
  3. 将以下内容添加到Transforms/EnumMethods.xml以解决编译器错误:
  4. 在我的主要应用程序中添加对上述库的引用

所有东西都会编译,我可以访问card.io类:

代码语言:javascript
复制
using IO.Card.Payment;

private void WireupScanCardButton()
{
    Log.Debug(this.GetType().Name, "WireupScanCardButton");

    this.ScanCardButton.Click += delegate 
    {
        Log.Debug(this.GetType().Name, "ScanCard.Click");

        var intent = new Intent(this, typeof(CardIOActivity));

        // Required for authentication with card.io
        intent.PutExtra(CardIOActivity.ExtraAppToken, "<MY PRIVATE TOKEN HERE>");

        // Customize these values to suit your needs.
        intent.PutExtra(CardIOActivity.ExtraNoCamera, false);
        intent.PutExtra(CardIOActivity.ExtraSuppressManualEntry, true);
        intent.PutExtra(CardIOActivity.ExtraRequireExpiry, false);
        intent.PutExtra(CardIOActivity.ExtraRequireCvv, false);
        intent.PutExtra(CardIOActivity.ExtraRequireZip, false);

        // Run the Activity
        this.StartActivityForResult(intent, 0);            
    };
}

然而,我总是遇到以下错误:

此设备不能使用照相机读取卡号

备注:

  • 我试过在几种不同的物理设备上跑步
  • card.io.jar文件的生成操作为: EmbeddedJar
  • .so文件的生成操作为: EmbeddedNativeLibrary
  • 我已经显式地为项目 ItemGroup中的每个.so文件设置了.so Abi

我对Android/Xamarin非常陌生,所以花更多的时间研究而不是编写代码。

.so文件似乎不在.apk文件中。

编辑:

.so文件似乎是由编译器获取的。编译后,如果我检查obj/Release/文件夹,就会有一个子文件夹native_library_imports,它根据支持的Abi类型在适当的子文件夹中包含.so文件。

但是,.so文件仍未出现在最终的.apk文件中。

logcat输出:

代码语言:javascript
复制
04-18 08:12:20.462 D/ActivityAddPaymentSource( 5824): ScanCard.Click
04-18 08:12:20.472 E/ActivityManager(  191): exception bw.write()java.io.IOException: Transport endpoint is not connected
04-18 08:12:20.472 I/ActivityManager(  191): Starting: Intent { cmp=com.onetab.android/io.card.payment.CardIOActivity (has extras) } from pid 5824
04-18 08:12:20.472 D/PowerManagerService(  191): acquireWakeLock flags=0x1 tag=ActivityManager-Launch
04-18 08:12:20.492 D/ActivityAddPaymentSource( 5824): OnPause
04-18 08:12:20.492 E/Sensors (  191): GsSensor: line +83 ~~~handle===0~~en==1~~!n
04-18 08:12:20.502 E/Sensors (  191): GsSensor::setDelay: line +113 ~~~handle===0~~ns==1553152~~!n
04-18 08:12:20.502 E/Sensors (  191): GsSensor::setDelay: line +113 ~~~handle===0~~ns==-2135896001~~!n
04-18 08:12:20.542 W/card.io ( 5824): cardioScanErrorNoDeviceSupport: This device cannot use the camera to read card numbers.
04-18 08:12:20.572 E/ActivityManager(  191): exception bw.write()java.io.IOException: Transport endpoint is not connected
04-18 08:12:20.572 D/PowerManagerService(  191): acquireWakeLock flags=0x1 tag=ActivityManager-Launch
04-18 08:12:20.582 E/Sensors (  191): GsSensor: line +83 ~~~handle===0~~en==0~~!n
04-18 08:12:20.622 D/ActivityAddPaymentSource( 5824): OnResume

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-21 00:12:52

经过一些实验我终于解决了这个问题。

  1. 遵循我最初文章中的四个步骤
  2. ProjectRoot/libs/**<the sdk files and abi subfolders>** SDK解压缩到库项目的根目录,这样您的文件夹结构为: card.io
  3. 将.jar文件添加到Project Jars文件夹(选择添加链接选项)
  4. libs文件夹添加到项目的根目录(不包括.jar文件)
  5. 您可能需要手动编辑.csproj文件,以添加每个.so文件的Abi目标。
  6. 确保.jar文件具有构建操作 of EmbeddedJar
  7. 确保EmbeddedNativeLibrary.so文件具有构建操作

@tomwhipple谢谢你的贡献。我试图推翻你的回答,但显然我没有足够的声誉。

票数 4
EN

Stack Overflow用户

发布于 2013-04-17 15:22:56

Android logcat应该显示更具体的错误消息,但是这个问题是由于缺少本地库造成的。(对于普通的Android项目,这些项目位于/libs目录中,具有特定于体系结构的子目录。)

这些是您提到的.so文件中缺少的.apk文件。它们包含了所有的图像处理逻辑,因此card.io不能扫描如果它们不在那里。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16027260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档