2013-02-22 3 views
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); 
} 

Как я могу получать это сообщение данных в моей деятельности?

ответ

1

Другим способом было бы привязать свою деятельность к вашей службе, чтобы они могли общаться.

Ссылка http://developer.android.com/reference/android/content/Context.html#bindService(android.content.Intent, android.content.ServiceConnection, int)

+0

Мой вопрос заключается в том, как получать данные из отправленного сообщения –

+1

Moreso, вы должны попытаться выяснить, как можно связать свою деятельность с вашим сервисом. – JoxTraex

+2

Подход Jox - это то, что вы хотите здесь. Читайте о [Bound Services here] (http://developer.android.com/guide/components/bound-services.html) - вы увидите, что вы можете предоставить метод обратного вызова, который в вашем экземпляре может выставить '' ' 'getArgs (Integer ...)' '' 'метод или лучше. +1 – OceanLife

2

В вашей деятельности, вы должны сделать обработчик, как это, и передать ссылку на обработчик на службу, прежде чем начать его ...

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

, но прямо сейчас вы создаете обработчик внутри службы, но это не то, что вы хотели сделать!

0

введите свои данные в message.obj и откройте это поле в своей деятельности. Ваши данные могут быть классом, который вы можете определить, как вы хотите.

+0

Мне нужен код в моей деятельности, моя задача - получить данные, а не отправлять их. –

+0

Сделайте свою деятельность для реализации Handler.Callback и поместите свой код в метод public boolean onMessage (Message message) –

0

Существует simple example проект (который создается CommonsWare), который показывает, как отправлять сообщения от Service к Activity через Handler. Проверьте это

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

Надеюсь, это поможет ..!