Android Socket.getchannel()方法始终在javamail

时间:2016-08-14 04:24:02

标签: android javamail nio

javamail的IdleManager在Android中无效。

当我尝试使用idlemanager查看文件夹时,javamail抛出错误消息文件夹未使用SocketChannels 。 Android SocketChannel总是在Socket中返回null。

深入挖掘后,我发现当从SSLSocketFactory创建一个Socket时,它会使SocketChannel为空。

此问题是否有解决方法?

这是stacktrace

 javax.mail.MessagingException: Folder is not using SocketChannels
 at com.sun.mail.imap.IdleManager.watch(IdleManager.java:203)
 at com.sample,mail.ImapIdle$1.doInBackground(ImapPushNotification.java:120)
 at android.os.AsyncTask$2.call(AsyncTask.java:292)
 at java.util.concurrent.FutureTask.run(FutureTask.java:237)
 at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at java.lang.Thread.run(Thread.java:818)

1 个答案:

答案 0 :(得分:2)

尝试JavaMail 1.5.6(刚刚发布)。它有一些Android修复程序。

我已经深入研究了这一点,据我所知,这是Android中的一个错误,JavaMail无法轻松解决。 请向Google报告。以下适用于真正的Java,但在Android上打印为null:

    Socket s = SocketChannel.open().socket();
    s.connect(new InetSocketAddress(host, port));
    Socket ss = ((SSLSocketFactory)SSLSocketFactory.getDefault()).
                        createSocket(s, host, port, true);
    System.out.println("SocketChannel wrapped " + ss.getChannel());