2013-04-16 16 views
8

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)

  1. Utwórz nowy Android Java Wiązania Biblioteka projekt
  2. Dodaj .jar i pliki .so z card.io SDK 3.0.3, należy wykorzystać istniejącą strukturę folderów
  3. 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> 
    
  4. 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

Odpowiedz

4

Cóż, ostatecznie rozwiązałem to po kilku eksperymentach.

  1. Wykonaj 4 kroki w moim oryginalnym poście
  2. Rozpakuj card.io SDK do katalogu głównego projektu biblioteki tak skończyć ze strukturą folderów: ProjectRoot/libs/<the sdk files and abi subfolders>
  3. Dodaj plik .jar do folderu projektu Jars (wybierz dodać link opcję)
  4. dodać bibliotekami folderu do głównego projektu (z wyjątkiem pliku .jar)
  5. może trzeba ręcznie edytować plik .csproj dodać Abi cel każdego .so pliku
  6. Upewnić się. słoik plik ma działanie Konstruowanie z EmbeddedJar
  7. zapewnienia .so pliki mają działanie Konstruowanie z EmbeddedNativeLibrary

@tomwhipple - dzięki za wkład. Próbowałem odpowiedzieć na twoją odpowiedź, ale najwyraźniej nie mam wystarczającej reputacji.

4

Android logcat powinny wykazywać bardziej konkretny komunikat o błędzie, ale ten problem jest z powodu brakujących bibliotek natywnych. (W przypadku normalnych projektów Android te żyją w katalogu /libs, ze specyficznymi dla architektury podkatalogami.)

Są to pliki .so, o których wspomina się w pliku .apk. Zawierają całą logikę przetwarzania obrazu, więc card.io nie może skanować, jeśli ich nie ma.

+0

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

Powiązane problemy