2011-12-20 15 views
26

Obecnie próbuję implementować ILocationListener na klasie, aby otrzymywać aktualizacje GPS - to nie jest działanie, tylko normalna klasa C#.Implementacja IJavaObject na MonoDroid

W ramach umowy ILocationListener muszę wspierać I JavaObject:

public IntPtr Handle 
    { 
     get { throw new NotImplementedException(); } 
    } 

Co mam zrobić w tej sprawie?

Czy są tam również dobre dokumenty i/lub blogi, które mówią o tym, w jaki sposób klasy C# i obiekty Java są powiązane w MonoDroid - jeśli uda mi się znaleźć te dokumenty, prawdopodobnie nie będę musiał zadawać pytań w ten sposób i mam nadzieję, że piszę o wiele lepszy kod.

Dzięki

Odpowiedz

54

Zrobione z Xamarin's docs:

Są chwile, kiedy może być konieczne zaimplementować interfejs Androida, taki jak Android.Content.IComponentCallbacks. Ponieważ wszystkie klasy i interfejsy Androida rozszerzają interfejs Android.Runtime.IJavaObject, powstaje pytanie: w jaki sposób zaimplementować IJavaObject?

Na powyższe pytanie odpowiedziałeś: powód, dla którego wszystkie typy Androida muszą implementować IJavaObject jest taki, że MonoDroid ma owijarkę na Androida do dostarczenia dla Androida, tj. Proxy Java dla danego typu. Od monodroid.exe wygląda tylko na podklasy java.lang.Object i java.lang.Object realizuje IJavaObject, odpowiedź jest oczywista: podklasa java.lang.Object

Zasadniczo należy zawsze dziedziczą java.lang. Obiekt w takich przypadkach, ponieważ implementacja IJavaObject nie zadziała, ponieważ Mono dla Androida nie wygeneruje opakowania na żądanie.

Jeśli to pomaga, mam przykład wdrożenia ILocationListener dostępny here. Implementuje go bezpośrednio do działania, ale można dziedziczyć z Java.Lang.Object zamiast z Activity.

+2

Dla osób, które nadal nie rozumieją, po prostu oznacza: "klasa publiczna menedżer lokalizacji: Java.Lang.Object, nazwaLokalizacjaListener" –

2

myślę Znalazłem pierwszy element układanki myself - wydaje się, że jest tam java.lang.Object poręczne i mogę użyć.

będę nadal szukać informacji wiążącej - miejmy nadzieję, że będę wtedy wiedział, co robię :)

0

To również rozwiązało awarię mojego Seg'a [mono-rt] Otrzymałem SIGSEGV podczas wykonywania natywnego kodu ..... problemów, które były spowodowane przez klasę, która zaimplementowała IJavaObject!

Powiązane problemy