2011-12-10 14 views
1

私は、IM Messengerを開発するためにAndroid用のSmack XMPPクライアントを使用しています。 このシナリオのようにしたい ユーザーのログイン時に、バックグラウンドサービスでXMPPConnection参照オブジェクトを使用してPackerListenerを添付します。 xmppCon.addPacketListener(......)。このパケットリスナーは、着信要求(チャットメッセージ、サブスクリプション要求、グループチャット要求など)を聞くのに使用します。このパケット要求を取得した後では、チャットメッセージ、サブスクリプション要求などのような要求タイプを識別します。チャットメッセージと私のチャット画面が開いています私はサブスクリプションリクエストの場合、その画面を送信/更新したいですリクエストに応じて保留中のUIアクティビティ画面を更新したいので、特定のUIをサービスから更新したいと思います。 問題は、アクティビティ(アクティブなアクティビティ)をサービスからどのように更新できるかです。 誰かが私にこれを行う方法を教えてくれるのですか、これについて私により良い提案を与えることができますか? 私は非常に感謝します...XMPPパケットリスナーを使用してAndroidバックグラウンドサービスを実装する

答えて

-1

あなたのXMPP接続を駆動するサービスは、状態が変化した場合にインテントをブロードキャストできます。あなたの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

関連する問題