在Android中作为Intent分区后从Messenger中检索Handler

时间:2013-04-24 17:37:48

标签: android android-intent xamarin android-handler messenger

注意:以下所有代码均基于C#/ Mono / Xamarin.Android。

我有一个后台服务,在某个时刻启动一个活动并传递一个Handler,包含在Messenger中:

intent.PutExtra("myHandler", new Messenger(handler));
context.StartActivity(intent);

当活动开始时,我想从意图中解开Handler,并在用户执行某些操作时使用它将消息发送回服务,例如单击按钮。我尝试了显而易见的事实:

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,显然!

1 个答案:

答案 0 :(得分:1)

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