2011-12-20 15 views
26

Tôi hiện đang cố triển khai ILocationListener trên một lớp để nhận bản cập nhật GPS - đây không phải là một Hoạt động, chỉ là một lớp C# bình thường.Triển khai IJavaObject trên MonoDroid

Là một phần của hợp đồng ILocationListener tôi cần phải hỗ trợ tôi JavaObject:

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

Tôi nên làm gì cho việc này?

Ngoài ra, có bất kỳ tài liệu hay và bài đăng trên blog nào nói về cách các lớp C# và các đối tượng Java liên kết với nhau trong MonoDroid - nếu tôi có thể tìm thấy các tài liệu đó, thì có lẽ tôi sẽ không cần đặt câu hỏi như thế này và tôi hy vọng cũng sẽ viết mã tốt hơn nhiều.

Cảm ơn

Trả lời

54

Taken từ Xamarin's docs:

Có những lúc bạn có thể cần phải triển khai giao diện Android, chẳng hạn như Android.Content.IComponentCallbacks. Vì tất cả các lớp và giao diện Android mở rộng giao diện Android.Runtime.IJavaObject, câu hỏi đặt ra: làm cách nào để chúng tôi triển khai IJavaObject?

Câu hỏi đã được trả lời ở trên: lý do tất cả các loại Android cần triển khai IJavaObject là MonoDroid có trình bao bọc có thể gọi Android để cung cấp cho Android, tức là một proxy Java cho loại đã cho. Kể từ monodroid.exe chỉ trông cho lớp con java.lang.Object, và java.lang.Object thực hiện IJavaObject, câu trả lời là rõ ràng: lớp con java.lang.Object

Về cơ bản bạn nên luôn luôn kế thừa từ java.lang. Đối tượng trong những trường hợp này, khi thực hiện IJavaObject bản thân bạn sẽ không thực sự làm việc vì Mono cho Android sẽ không tạo ra trình bao bọc có thể gọi được.

Nếu có ích, tôi có ví dụ triển khai ILocationListener có sẵn here. Nó thực hiện nó trực tiếp trên một hoạt động, nhưng bạn có thể kế thừa từ Java.Lang.Object thay vì Activity.

+2

Đối với những người vẫn không hiểu anh ấy chỉ đơn giản có nghĩa là: "vị trí lớp công khaiQuản lý: Java.Lang.Object, ILocationListener" –

2

Tôi nghĩ rằng tôi đã tìm thấy các mảnh đầu tiên của câu đố bản thân mình - nó có vẻ như có một java.lang.Object tiện dụng và tôi có thể sử dụng.

tôi sẽ tiếp tục tìm kiếm các thông tin ràng buộc - hy vọng tôi sau đó sẽ biết những gì tôi đang làm :)

0

Điều này cũng đã giải quyết được sự cố Seg Fault của tôi [mono-rt] Có SIGSEGV trong khi thực thi mã gốc ..... các sự cố do lớp đã triển khai IJavaObject gây ra!