2011-12-20 13 views
26

Actualmente estoy tratando de implementar un ILocationListener en una clase para recibir actualizaciones de GPS, esto no es una actividad, solo una clase normal de C#.Implementando IJavaObject en MonoDroid

Como parte del contrato ILocationListener Necesito apoyo que javaObject:

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

¿Qué debo hacer para esto?

Además, hay buenos documentos y/o publicaciones en el blog que hablan de cómo las clases C# y los objetos Java están unidos en MonoDroid. Si puedo encontrar esos documentos, probablemente no tenga que hacer preguntas. así y con suerte también estaré escribiendo código mucho mejor.

Gracias

Respuesta

54

Tomado de Xamarin's docs:

Hay momentos en que es posible que necesite implementar una interfaz de Android, como Android.Content.IComponentCallbacks. Dado que todas las clases e interfaces de Android extienden la interfaz Android.Runtime.IJavaObject, surge la pregunta: ¿cómo implementamos IJavaObject?

La pregunta fue respondida arriba: la razón por la que todos los tipos de Android necesitan implementar IJavaObject es para que MonoDroid tenga un contenedor invocable de Android para proporcionar a Android, es decir, un proxy Java para el tipo especificado. Desde monodroid.exe sólo busca subclases Java.lang.Object y Java.lang.Object implementa IJavaObject, la respuesta es obvia: subclase Java.lang.Object

Básicamente, usted siempre debe heredar de java.lang. Objeto en estos casos, ya que la implementación de IJavaObject no funcionará realmente, ya que Mono para Android no generará el contenedor invocable.

Si ayuda, tengo un ejemplo que implementa ILocationListener disponible here. Lo implementa directamente en una actividad, pero puede heredar de Java.Lang.Object en lugar de Activity.

+2

Para las personas que todavía no entendieron, simplemente quiere decir: "public class locationManager: Java.Lang.Object, ILocationListener" –

2

creo que he encontrado la primera pieza del rompecabezas a mí mismo - que parece que hay un Java.lang.Object útil y puedo usar eso.

voy a seguir para buscar la información de enlace - que espero entonces sé lo que estoy haciendo :)

0

Esto también resolvió mi fallo de Seg Fault [mono-rt] Obtuve un SIGSEGV mientras ejecutaba el código nativo ..... ¡problemas causados ​​por una clase que implementaba IJavaObject!