Czy ktoś pomyślnie stworzył opakowanie card.io, które chętnie udostępnia, które może być używane w aplikacji Mono na Androida, czy ktoś może rzucić nieco światła na to, co robię źle?card.io Mono dla Androida (Xamarin Studio)
- Utwórz nowy Android Java Wiązania Biblioteka projekt
- Dodaj .jar i pliki .so z card.io SDK 3.0.3, należy wykorzystać istniejącą strukturę folderów
Dodaj poniższe linie do przemienia/EnumMethods. xml rozwiązać błąd kompilatora:
<mapping jni-class="io/card/payment/CardIOActivity"> <method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" /> </mapping>
- dodać odwołanie do powyższej biblioteki w moim głównym aplikacji
Wszystko kompiluje i mogę uzyskać dostęp do klas 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);
};
}
Jednak ja zawsze przedstawiane z powodu następującego błędu:
To urządzenie nie może używać aparatu do odczytu numerów kart
UWAGI:
- Próbowałem działa na kilku różnych urządzeniach fizycznych
- plik card.io.jar ma wbudowany Akcja z: EmbeddedJar
- pliki .so mieć Buduj działanie z: EmbeddedNativeLibrary
- Ja jawnie ustawić Abi dla każdego pliku .so w projekcie ItemGroup
Jestem bardzo nowy Android/Xamarin, więc poświęcić więcej czasu na badania niż kodowania.
pliki .so nie wydają się być w pliku apk
Edit:
pliki .so zdają się dostać zabierani przez kompilator. Po kompilacji, jeśli sprawdzam folder obj/Release/, znajduje się podfolder native_library_imports zawierający pliki .so w odpowiednich podfolderach zgodnie z obsługiwanym typem Abi.
Jednak pliki .so nadal nie pojawiają się w ostatecznym pliku .apk.
wyjście logcat:
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
dzięki
Dzięki za odpowiedź. Zmieniłem mój oryginalny wpis z dalszymi informacjami. Jest coś w ** Punkt końcowy transportu nie jest połączony **, który szukam. – dalesmckay