1

注意:以下所有代码均基于 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 发送消息!

4

1 回答 1

1

正确的方法是使用messenger.Send()方法。

于 2013-04-24T18:01:41.887 回答