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!");
}
} : は、ここでは、コードです。
「単純なアプローチは、getMessageCount()メソッドを定期的に呼び出すことです」と「スレッドを専用にする」ことです。ソリューションの半分を使用しました。つまり、getMessageCount()スレッドとそれは魅力のように働いた!ありがとう!しかし、なぜmessageCountListenerが呼び出されなかったのですか? – rahulserver
サーバーはコマンドへの応答の一部として以外の新しいメッセージの通知を送信しないため、応答を送信する機会を与えるためにサーバー上でコマンドを実行する必要があります。 JavaMailは、サーバーからの通知を見るとリスナーを呼び出します。 idle()メソッドは基本的に「ここに座って何もしないで、いつでも新しいメッセージについて教えてくれます」というコマンドを実行します。 –
ありがとう!それはたくさんの助けになりました! +1のために!!!!!!! – rahulserver