2012-05-08 17 views
3

私は受信トレイを取得し、新しいメール到着を聞くためのMessageCountListenerインターフェイスを実装するサービスを実装しました。理由とは何か他に何ができるのでしょうか?サービスが正常にinbox.Butだけで通知されませんretreivingされていることに留意しなければならない新しいメール到着時にMessageCountListenerを実装しているサービスが実装されていない

public class EmailRetreiverService extends Service implements MessageCountListener{ 

public static final Vector v=new Vector(); 
public static final Vector nwmsg=new Vector(); 
Message[] m=null; 
@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
public void onCreate(){ 
    Log.d("EmailRetreiverStarted"," "); 

    ConvertToSmtp cts=new ConvertToSmtp("[email protected]","mypassword"," "," "," ", " "); 
    Folder folder=cts.retreiveInbox(); 
    try { 
     m=folder.getMessages(); 
    } catch (MessagingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    for(int i=0;i<m.length;i++){ 
     v.add(m[i]); 

    } 
    Log.d("EmailRetreiverMessageCount",new Integer(m.length).toString()); 
    Collections.reverse(v); 
    /*folder.addMessageCountListener(new MessageCountAdapter(){ 

     public void messagesAdded(MessageCountEvent ev) { 
      Log.d("MessageListener","message listner invoked."); 
      Message[] msgs = ev.getMessages(); 
      TTSservice.say("Attention! "+msgs.length+" new messages have arrived now.Kindly retreive inbox again!"); 
      Collections.reverse(v); 
      for (int i = 0; i < msgs.length; i++) { 

       v.add(msgs[i]); 

      //System.out.println("Got " + msgs.length + " new messages"); 
      } 
      Collections.reverse(v); 
      // Just dump out the new messages 

     } 

    });*/ 
    folder.addMessageCountListener(this); 
} 
@Override 
public void onDestroy(){ 
    v.removeAllElements(); 
} 
@Override 
public void messagesAdded(MessageCountEvent arg0) { 
    // TODO Auto-generated method stub 
    Log.d("EmailService","MessageArrived!"); 
} 
@Override 
public void messagesRemoved(MessageCountEvent arg0) { 
    // TODO Auto-generated method stub 
    Log.d("EmailService","MessageRemoved!"); 
} 

} : は、ここでは、コードです。

答えて

5

JavaMailがサーバーから新しいメッセージの通知を受け取るには、何かする必要があります。簡単な方法は、getMessageCount()メソッドを定期的に呼び出すことです。もう1つの方法は、IMAP固有のidle()メソッドを使用することです。このメソッドは、そのメソッドを呼び出すためにスレッドを専用にする必要があります。

+1

「単純なアプローチは、getMessageCount()メソッドを定期的に呼び出すことです」と「スレッドを専用にする」ことです。ソリューションの半分を使用しました。つまり、getMessageCount()スレッドとそれは魅力のように働いた!ありがとう!しかし、なぜmessageCountListenerが呼び出されなかったのですか? – rahulserver

+2

サーバーはコマンドへの応答の一部として以外の新しいメッセージの通知を送信しないため、応答を送信する機会を与えるためにサーバー上でコマンドを実行する必要があります。 JavaMailは、サーバーからの通知を見るとリスナーを呼び出します。 idle()メソッドは基本的に「ここに座って何もしないで、いつでも新しいメッセージについて教えてくれます」というコマンドを実行します。 –

+0

ありがとう!それはたくさんの助けになりました! +1のために!!!!!!! – rahulserver

関連する問題