有没有人成功创建了一个他们愿意分享的card.io包装器,可以在Android应用程序的Mono中使用,或者有人可以阐明我做错了什么吗?
- 创建一个新的Android Java 绑定库 Project
- 添加 .jar 和 .so 文件卡.io SDK 3.0.3 https://www.card.io/download/card.io-android-sdk-3.0.3.zip,一定要使用现有的文件夹结构
-
将以下内容添加到 Transforms/EnumMethods.xml 以解决编译器错误:
<mapping jni-class="io/card/payment/CardIOActivity">
<method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" />
</mapping>
- 在我的主应用程序中添加对上述库的引用
一切都编译完毕,我可以访问 card.io 类:
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);
};
}
但是,我总是遇到以下错误:
该设备无法使用摄像头读取卡号
NOTES:
- 我尝试过在几种不同的物理设备上运行
- card.io.jar 文件的构建操作为:EmbeddedJar
- .so 文件的构建操作为:EmbeddedNativeLibrary
- 我已经明确设置了Abi对于项目中的每个 .so 文件项目组
我对 Android/Xamarin 非常陌生,所以花更多的时间研究而不是编码。
.so 文件似乎不在 .apk 文件中
Edit:
.so 文件似乎确实被编译器选中了。
编译后,如果我检查对象/发布/文件夹有一个子文件夹本机库导入根据支持的 Abi 类型,在适当的子文件夹中包含 .so 文件。
但是,.so 文件仍然不会出现在最终的 .apk 文件中。
日志输出:
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
thanks