android - 在棉花糖设备上收到第一条消息后,广播接收器 onreceive 方法中的上下文参数发生变化
问题描述
我在 Xamarin 项目中运行 Marshmallow 的一加二设备上的广播接收器上看到了一些非常奇怪的行为。我有一项用于更改位置的服务,并且我在我的活动中注册了一个广播接收器以收听来自该服务的消息。第一次收到消息时,context 参数是正确的(注册接收者的 mainactivity 的上下文)。但是,第二次收到消息时,上下文是应用程序上下文,因此我无法更新 mainactivity 上的任何内容。我还在使用运行 Oreo 的 Galaxy S8 Active 进行测试,并且在该设备上,上下文每次都是正确的。
我还在 Android Studio 中为我的广播接收器使用匿名类型构建了相同的应用程序,并且在那里,上下文每次在两个设备上都是正确的。
这是一个可能的 xamarin 错误吗?我完全不知道下一步该去哪里。我没有任何其他设备可供测试,但我认为其他运行旧版本 android 的设备会遇到与此一加二相同的问题。
另外,为了它的价值,我尝试了三种不同的方法来从接收器更新 mainactivity。1)将mainactivity的一个实例传递给broadcastreceiver的构造函数,然后调用该set属性的方法2)将上下文转换为mainactivity并从那里调用方法3)创建一个自定义事件处理程序并在broadcastreciver中添加一个事件,然后添加接收者实例的委托,并从自定义事件处理程序中获取我需要的值。
这三个都很好,但只有第一条消息。随着后续消息出现不同的上下文,显然它们都不起作用。
解决方案
推荐阅读
- git - 解决 Git 中的冲突
- c# - 编写一个方法的签名,该方法将获取特定配方的配方中的成分列表。并非所有食谱都为人所知
- sql-server - Windows 10 更新 2004 中断 SQL 连接
- python-2.7 - 数据框和系列的元素乘积以及组内的滚动总和
- angular - 角度 9,我可以使用 canDeactivate 路由到其他地方吗?
- html - 将文本大小设置为视口的一部分
- python - 在 SQLAlchemy 中将 2 个查询加在一起?
- php - 如何连接到 Hostgator 数据库而不是 Localhost
- c++ - C++ constexpr if 语句的灵活性
- c# - C# 性能,加速类中的字符串数组