从服务向活动发送消息

3

我有一个服务,我想向我的主活动发送消息,就像这样:

public void callAsynchronousTask() {
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    try {
                        Message m = new Message();
                        m.arg1 = 10;
                        m.arg2 = 15;
                        handler.sendMessage(m);
                        Log.i("Sent", "!");

                    } catch (Exception e) {}
                }
            });
        }

};
timer.schedule(doAsynchronousTask, 0, 3000); 
}

如何在我的Activity中获取此消息数据?
5个回答

2
在您的活动中,您应该创建一个类似于这样的处理程序,并在启动服务之前将处理程序的引用传递给服务...
handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    //msg.arg1
  }
};

但是现在你正在服务内创建一个处理程序,但这不是你想要做的!


1

我的问题是如何从发送的消息中获取数据。 - Adam Varhegyi
1
更重要的是,您应该尝试找出一种更好的方法来让您的Activity与您的服务进行通信。 - JoxTraex
2
Jox的方法是你想要的。在这里阅读有关绑定服务的信息 - 你会发现你可以提供一个回调方法,在你的实例中可以公开一个getArgs(Integer...)方法或更好的方法。+1 - BrantApps

0

将您的数据放入message.obj中,并从您的活动中的此字段获取它。您的数据可以是一个类,您可以定义它的方式。


我需要在我的Activity中编写代码,我的问题是如何接收数据,而不是发送数据。 - Adam Varhegyi
让您的活动实现Handler.Callback,并将代码放在公共布尔onMessage(Message message)方法中。 - Buda Gavril

0

有一个简单示例项目(由CommonsWare创建),展示了如何通过HandlerService发送消息到Activity。快去看看吧。


0
        //use this code to send data to activity

         Bundle data = new Bundle();
            data.putString("data", result);
            Message msg = Message.obtain();
            msg.setData(data);
            replyTo.sendMessage(msg);        //replyTo is handler declared in your main_Activity 






    //Pass this **replyTo** handler when you call your service from mainActivity..
          Handler replyTo= new Handler() {
            public void handleMessage(Message msg) {
            //get data here and do what you want..
        };
        };

希望这有所帮助..!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接