【问题标题】:Retrieving Handler from Messenger after being parceled as Intent in Android在 Android 中被打包为 Intent 后从 Messenger 中检索 Handler
【发布时间】:2013-04-24 17:37:48
【问题描述】:

注意:以下所有代码均基于 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 是处理程序类型,但转换失败。谷歌没有发现任何有用的东西。我可能做错了什么,不是吗?

编辑:天哪,我设法忽略了Messenger.Send() 方法。显然,我应该使用它来向包装的 Handler 发送消息!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多