2012-10-11 4 views
1

동일한 응용 프로그램에 activity와 intentService가 있습니다. 액티비티가 종료 된 후에도 서비스를 계속 실행해야하므로 바인딩하지 않으려 고합니다. 나는 몇 시간 동안 인터넷 검색을 해왔고 이것을 수행하는 방법에 대한 좋은 예를 하나도 발견 할 수 없다. 서비스를 시작하고 엑스트라를 전달할 수 있지만 이제는 서비스에서 메신저를 사용하여 데이터를 다시 액티비티로 보내야합니다. IntentService에서 Activity로 메시지 보내기

나는이 과정은 기본적으로(), 메신저에) (전송 호출을 필요로 어떤 데이터 객체를 채우기를 빈 메시지 개체를 얻을로 메시지를 공급하는 ... 이 Message.obtain를 호출 포함 읽어 보시기 바랍니다 매개 변수

그러나이 작업을 수행하는 방법에 대한 코드 예제를 찾을 수 없습니다.

일부 게시물은 SDK 샘플 APIDemos의 messengerService 예제를 참조합니다. 그러나 여기에는 아무 것도 찾을 수 없습니다. 감사합니다, 게리

답변

1

에게 다른 사람들에게 유용 할 수도 있기 때문에 제 질문에 대답 해 드리겠습니다. (활성 상태를 유지해야하므로 IntentService가 아닌 일반 서비스를 사용하고 있습니다)

서비스에서 메시지를 수신하는 활동에 대해서는, Handler를 인스턴스화해야합니다 ...

private Handler handler = new Handler() 
{ 
    public void handleMessage(Message message) 
    { 
     Object path = message.obj; 

     if (message.arg1 == 5 && path != null) 
     { 
      String myString = (String) message.obj; 
      Gson gson = new Gson(); 
      MapPlot mapleg = gson.fromJson(myString, MapPlot.class); 
      String astr = "debug"; 
      astr = astr + " "; 
     } 
    }; 
}; 

위의 코드는 내 디버그 항목으로 구성되어 있습니다. 이 서비스는 메시지를 활동으로 보냅니다. ...

   MapPlot mapleg = new MapPlot(); 
      mapleg.fromPoint = LastGeoPoint; 
      mapleg.toPoint = nextGeoPoint;    
      Gson gson = new Gson(); 
      String jsonString = gson.toJson(mapleg); //convert the mapleg class to a json string 
      debugString = jsonString; 

      //send the string to the activity 
      Messenger messenger = (Messenger) extras.get("MESSENGER"); 
      Message msg = Message.obtain(); //this gets an empty message object 

      msg.arg1 = 5; 
      msg.obj = jsonString; 
      try 
      { 
       messenger.send(msg); 
      } 
      catch (android.os.RemoteException e1) 
      { 
       Log.w(getClass().getName(), "Exception sending message", e1); 
      }    

방금 ​​메시지 식별자로 5 번을 선택했습니다. 이 경우 JSON 문자열에 복합 클래스를 전달한 다음 해당 작업을 다시 작성합니다.

+1

여기에이 엑스트라가 무엇입니까? –

+0

접근법의 문제점은 활동을 다시 작성하면 응답을받을 수있는 능력이 느슨해집니다. 방송 수신기 방식이 더 좋습니다. 어떤 사람들은 핸들러를 정적으로 만들 수 있다고 제안합니다. 나는 아니오라고 말하고 싶습니다. 왜냐하면 그 활동이 진정으로 사용자에 의해 닫힐 때 당신은 여전히 ​​메시지를받을 것이기 때문입니다. – user210504

3

이 용도로 브로드 캐스트를 사용해야합니다. 당신은 마무리 당신이

이있을 수 있습니다 도움을 당신이 (당신이 데이터를 수신 할 위치) 활동 내부에로 IntentFilter를 등록해야 service.also 의도 후 메시지 방송 보냈 수 : 레코드 I의 경우 http://www.mysamplecode.com/2011/10/android-intentservice-example-using.html

+0

"Messenger"를 사용하여 IntentService에서 활동으로 데이터를 보낼 수 있다고 말하는 많은 출처가 있습니다. 그들은 단지 어떻게 보여주지 않습니다. 그래서 나는 방송이 유일한 길인 것에 대해 당신이 틀렸다고 생각합니다. –

+0

메신저를 사용하여 @DeanBlakely는 매우 간단하고 많은 예제가 있습니다. 기억해야 할 것은 활동이 재현 될 때 작동하지 않는다는 것입니다. – user210504