注意:以下所有代码均基于 C#/Mono/Xamarin.Android。
我有一个后台服务,它在某个时刻启动一个活动并将其传递给一个处理程序,包装在一个 Messenger 中:
intent.PutExtra("myHandler", new Messenger(handler));
context.StartActivity(intent);
当活动开始时,我想从意图中解开该处理程序,并在用户执行某些操作(例如单击按钮)时使用它将消息发送回服务。我尝试了明显的:
override void OnCreate(Bundle bundle)
{
...
myButton.Click += (s, e) => {
var messenger = (Messenger)Intent.GetParcelableExtra("myHandler");
var handler = (Handler)messenger.Binder; // This fails with invalid cast.
handler.SendMessage(new Message() { What = MyButtonClicked });
};
}
调试器告诉我它message.Binder
是 Handler 类型,但转换失败。谷歌没有发现任何有用的东西。我可能做错了什么,不是吗?
编辑:天哪,我以某种方式设法忽略了该Messenger.Send()
方法。显然,我应该使用它来向包装的 Handler 发送消息!