Параметр контекста в методе при приеме широковещательного приемника изменяется после получения первого сообщения на устройстве зефира

Я наблюдаю очень странное поведение своего приемника вещания на устройстве One Plus Two, на котором запущен Marshmallow в проекте Xamarin. У меня есть служба, которую я использую для изменения местоположения, и я регистрирую широковещательный приемник в своей деятельности, чтобы прослушивать сообщения от службы. При первом получении сообщения параметр контекста является правильным (контекст основной деятельности, которая зарегистрировала получателя). Однако во второй раз, когда сообщение получено, контекст - это контекст приложения, и поэтому я не могу что-либо обновить в основной деятельности. Я также тестирую Galaxy S8 Active под управлением Oreo, и на этом устройстве контекст каждый раз правильный.

Я также создал это же приложение в Android Studio, используя анонимный тип для моего широковещательного приемника, и там контекст правильный каждый раз на обоих устройствах.

это возможная ошибка xamarin? Я совершенно не знаю, куда идти дальше. У меня нет других устройств для тестирования, но я предполагаю, что другие устройства под управлением более старых версий Android будут иметь ту же проблему, что и этот One Plus Two.

Кроме того, я попробовал три разных способа обновления mainactivity с приемника. 1) передача экземпляра mainactivity конструктору широковещательного приемника и последующий вызов методов из этого установленного свойства 2) приведение контекста к mainactivity и вызов методов оттуда 3) создание настраиваемого обработчика событий и добавление события внутри широковещательного приемника, а затем добавление делегата к экземпляру приемника и получение необходимых мне значений из настраиваемого обработчика событий.

Все три отлично работают, но только с первым сообщением. Поскольку в последующих сообщениях прослеживается другой контекст, очевидно, что ни одно из них не работает.

Не могли бы вы предоставить демонстрационный проект? Вы тестировали его на другом устройстве или эмуляторе Marshmallow?

Billy Liu - MSFT 22.05.2018 09:45

У меня нет демонстрационного проекта, которым я мог бы поделиться. Я также тестировал Galaxy S7, работающий под управлением Marshmallow, и обнаружил такое же плохое поведение. У меня есть обходной путь прямо сейчас, установив статическую ссылку на контекст для моей mainactivity, и я просто отбрасываю ее в методе OnReceive на MainActivity и получаю доступ к его членам через это.

Blair Holmes 22.05.2018 21:45
0
2
75
0

Другие вопросы по теме