Подтвердить что ты не робот

Реализация IJavaObject на MonoDroid

В настоящее время я пытаюсь реализовать ILocationListener для класса, чтобы получать обновления GPS - это не действие, просто обычный класс С#.

Как часть контракта ILocationListener мне нужно поддерживать я JavaObject:

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

Что мне делать для этого?

Кроме того, есть ли хорошие документы и/или записи в блоге, которые рассказывают о том, как классы С# и объекты Java связаны вместе в MonoDroid - если я могу найти эти документы, тогда мне, вероятно, не нужно будет задавать вопросы, такие как это, и я, надеюсь, также напишу гораздо лучший код.

Спасибо

4b9b3361

Ответ 1

Взято из Документы Xamarin:

Бывают случаи, когда вам может понадобиться реализовать интерфейс Android, такой как Android.Content.IComponentCallbacks. Поскольку все классы и интерфейс Android расширяют интерфейс Android.Runtime.IJavaObject, возникает вопрос: как мы реализуем IJavaObject?

Вопрос был приведен выше: причина, по которой всем типам Android необходимо реализовать IJavaObject, - это то, что MonoDroid имеет Android-оболочку, предназначенную для Android, то есть прокси-сервер Java для данного типа. Поскольку monodroid.exe ищет только подклассы Java.Lang.Object и Java.Lang.Object реализует IJavaObject, ответ очевиден: подкласс Java.Lang.Object

В принципе, вы всегда должны унаследовать от Java.Lang.Object в этих случаях, поскольку реализация IJavaObject сама по себе не будет работать, поскольку Mono для Android не будет генерировать вызываемую оболочку.

Если это помогает, у меня есть пример реализации ILocationListener, доступного здесь. Он реализует его непосредственно над действием, но вы можете наследовать из Java.Lang.Object вместо Activity.

Ответ 2

Я думаю, что сам нашел первый кусок головоломки - похоже, что есть Java.Lang.Object, и я могу это использовать.

Я продолжу искать обязательную информацию - надеюсь, тогда я узнаю, что я делаю:)

Ответ 3

Это также решило мой сбой Seg Fault [mono-rt] Получил SIGSEGV при выполнении собственного кода..... проблемы, вызванные классом, который реализовал IJavaObject!