Я наблюдаю очень странное поведение своего приемника вещания на устройстве One Plus Two, на котором запущен Marshmallow в проекте Xamarin. У меня есть служба, которую я использую для изменения местоположения, и я регистрирую широковещательный приемник в своей деятельности, чтобы прослушивать сообщения от службы. При первом получении сообщения параметр контекста является правильным (контекст основной деятельности, которая зарегистрировала получателя). Однако во второй раз, когда сообщение получено, контекст - это контекст приложения, и поэтому я не могу что-либо обновить в основной деятельности. Я также тестирую Galaxy S8 Active под управлением Oreo, и на этом устройстве контекст каждый раз правильный.
Я также создал это же приложение в Android Studio, используя анонимный тип для моего широковещательного приемника, и там контекст правильный каждый раз на обоих устройствах.
это возможная ошибка xamarin? Я совершенно не знаю, куда идти дальше. У меня нет других устройств для тестирования, но я предполагаю, что другие устройства под управлением более старых версий Android будут иметь ту же проблему, что и этот One Plus Two.
Кроме того, я попробовал три разных способа обновления mainactivity с приемника. 1) передача экземпляра mainactivity конструктору широковещательного приемника и последующий вызов методов из этого установленного свойства 2) приведение контекста к mainactivity и вызов методов оттуда 3) создание настраиваемого обработчика событий и добавление события внутри широковещательного приемника, а затем добавление делегата к экземпляру приемника и получение необходимых мне значений из настраиваемого обработчика событий.
Все три отлично работают, но только с первым сообщением. Поскольку в последующих сообщениях прослеживается другой контекст, очевидно, что ни одно из них не работает.
У меня нет демонстрационного проекта, которым я мог бы поделиться. Я также тестировал Galaxy S7, работающий под управлением Marshmallow, и обнаружил такое же плохое поведение. У меня есть обходной путь прямо сейчас, установив статическую ссылку на контекст для моей mainactivity, и я просто отбрасываю ее в методе OnReceive на MainActivity и получаю доступ к его членам через это.
Не могли бы вы предоставить демонстрационный проект? Вы тестировали его на другом устройстве или эмуляторе Marshmallow?