2011-12-10 75 views
1

我正在使用Smack XMPP客戶端進行Android開發即時通訊。 我想要這樣做 當用戶登錄我想附加PackerListener與Background Service中的XMPPConnection引用對象。 xmppCon.addPacketListener(......)。這個數據包偵聽器用來偵聽傳入請求(可以是聊天消息,訂閱請求,羣聊請求等)。現在得到這個數據包請求後,我確定了它是聊天消息,訂閱請求等等的請求類型。所以如果是一個聊天消息和我的聊天屏幕打開我想發送/更新該屏幕,如果它是訂閱請求我想根據請求更新我的待定UI活動屏幕等等我想從服務更新特定的用戶界面。 問題是我如何從服務更新Activity(活動活動)? 任何人都可以指導我如何做到這一點,或者可以給我更好的建議嗎? 我將非常感謝...使用XMPP數據包監聽器實現Android後臺服務

回答

-1

驅動您的XMPP連接的服務可能會在狀態發生變化時廣播Intent。您的UI活動(甚至是小工具)可以註冊這些意圖並相應地更新其顯示。

0

,您可以撥打服務類,之後在其上的Start方法,你可以添加以下代碼: -

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事件。 @長途去往.. – Roster