从服务发送消息到活动

时间:2013-02-22 14:19:59

标签: android android-service android-handler

我有一个服务,我尝试将消息发送到我的主要活动,就像这样:

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); 
}

如何在我的活动中获取此消息数据?

5 个答案:

答案 0 :(得分:2)

在你的活动中,你应该创建一个像这样的处理程序,并在启动之前将对处理程序的引用传递给服务...

handler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    //msg.arg1
  }
};

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

答案 1 :(得分:1)

另一种方法是将您的Activity绑定到您的服务,以便他们可以进行通信。

参考 http://developer.android.com/reference/android/content/Context.html#bindService(android.content.Intent, android.content.ServiceConnection, int)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

simple example 项目(由CommonsWare创建),其中显示了如何通过ServiceActivityHandler发送消息。看看

答案 4 :(得分: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..
        };
        };

希望它有帮助..!