2011-12-10 1 views
1

IM 메신저 개발을 위해 Android 용 Smack XMPP 클라이언트를 사용하고 있습니다. 이 시나리오처럼하고 싶습니다. 사용자 로그인시 Background Service에 XMPPConnection 참조 개체가있는 PackerListener를 첨부하고 싶습니다. xmppCon.addPacketListener (......). 이 패킷 수신기는 들어오는 요청 (채팅 메시지, 가입 요청, 그룹 채팅 요청 등)을들을 수 있습니다.이 패킷 요청을받은 후 지금은 채팅 메시지, 가입 요청 등등과 같은 요청 유형을 식별합니다. 그렇다면 채팅 메시지 및 채팅 화면 열기 가입 요청 인 경우 해당 화면을 보내고 싶습니다. 보류중인 UI 활동 화면을 업데이트하고 싶습니다. 요청에 따라 특정 UI를 서비스에서 업데이트하고 싶습니다. 문제는 서비스에서 활동 (활성 활동)을 어떻게 업데이트 할 수 있습니까? 누구나 내가 어떻게 할 수 있는지 또는이 문제에 대해 나에게 더 나은 제안을 줄 수 있습니까? 매우 감사드립니다 ...XMPP 패킷 리스너를 사용하여 Android 백그라운드 서비스 구현

답변

-1

상태가 변경되면 XMPP 연결을 구동하는 서비스가 인 텐트를 브로드 캐스팅 할 수 있습니다. 그러면 UI 활동 (또는 위젯)이 해당 인 텐트에 등록하고 그에 따라 디스플레이를 업데이트 할 수 있습니다.

0

당신은 서비스 클래스를 만들 수 있으며, 그 이후의에서 시작 방법에이 코드를 추가 할 수 있습니다 : -

RosterListener r1 = new RosterListener() { 

       @Override 
       public void presenceChanged(Presence presence) { 
        // TODO Auto-generated method stub 

        //sending the broadcast to update the expandable list view 
        //to check if any person's presence has changed. 
         sendBroadcast(new Intent(UserMenuActivity.ACTION_UPDATE)); 
notification("changed"); 

       } 

       @Override 
       public void entriesUpdated(Collection<String> arg0) { 
        // TODO Auto-generated method stub 
        //notification("entriesUpdated"); 
       } 

       @Override 
       public void entriesDeleted(Collection<String> arg0) { 
        // TODO Auto-generated method stub 
        //notification("entriesDeleted"); 
       } 


       @Override 
       public void entriesAdded(Collection<String> arg0) { 
        // TODO Auto-generated method stub 
        Iterator<String> it = arg0.iterator(); 
        if (it.hasNext()) { 
         user = it.next(); 
        } 
        /*RosterEntry entry = roster.getEntry(user); 
        if(entry.getType().toString().equalsIgnoreCase("to")){ 
         int index_of_Alpha = user.indexOf("@"); 
         String subID = user.substring(0, index_of_Alpha); 

         notification("Hi,"+subID+" wants to add you"); 
        }  */  
       } 
      }; 

      if (roster != null) { 
       roster.setSubscriptionMode(Roster.SubscriptionMode.manual); 
       System.out.println("subscription going on"); 
       roster.addRosterListener(r1); 
      } 

     } else { 
      showToast("Connection lost-", 0); 
     } 

이 당신이 요구하는 어떤 동일한 기능을 수행 할 수있는 방법입니다. 제발 저에 대해 어떤 쿼리를 물어보십시오.

+0

안녕하세요, 서비스중인 수신 메일을 수신하는 채팅 관리자 리스너를 작성한 경우 안녕하세요. 첫 번째 메시지에 대해서만 청취자는 튀어 나오지 않고 트리거됩니다. 매 xmpp 이벤트를 청취 할 수있는 제안을 해주십시오. @Long 마일 이동 .. – Roster