`

ANDROID上获取MSN邮件列表

 
阅读更多
首先使用http://java-jml.sf.net/
JML类库

具体类可以参考帖子
http://kenter1643.iteye.com/blog/306649

贴一下代码
package org.scribe.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.jml.MsnContact;
import net.sf.jml.MsnList;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnAdapter;
import net.sf.jml.impl.MsnContactImpl;
import net.sf.jml.impl.MsnMessengerFactory;
import net.sf.jml.message.MsnControlMessage;
import net.sf.jml.message.MsnDatacastMessage;
import net.sf.jml.message.MsnInstantMessage;
import net.sf.jml.message.MsnSystemMessage;
import net.sf.jml.message.MsnUnknownMessage;

public class Msntest extends MsnAdapter {   
	  
    private MsnMessenger messenger = null;   
    private String email = null,  password = null;   
  
    /** */  
    /** Creates a new instance of Msntest */  
    public Msntest() {   
    }   
  
    public static void main(String args[])   
            throws ClassNotFoundException, InstantiationException, IllegalAccessException {   
        Msntest msn = (Msntest) Class.forName("org.dean.msn.Msntest").newInstance();//创建类实例   
        msn.setEmail("xx@hotmail.com");//设置登录用户   
        msn.setPassword("xxxx");//设置密码   
        msn.start();   
    }   
  
    //打印信息   
    private static void msg(Object obj) {   
        SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm");   
        if (obj instanceof Throwable) {   
            System.err.println("[" + sdf.format(new Date()) + "] " + obj);   
        } else {   
            System.out.println("[" + sdf.format(new Date()) + "] " + obj);   
        }   
    }   
  
    public void start() {   
        messenger = MsnMessengerFactory.createMsnMessenger(email, password);//创建MsnMessenger   
        messenger.setSupportedProtocol(new MsnProtocol[]{MsnProtocol.MSNP12});//设置登录协议   
        messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);//设置用户状态   
        messenger.addListener(this);//注册事件   
        messenger.login();//登录   
    }   
  
    //收到正常信息的时候发生   
    @Override  
    public void instantMessageReceived(MsnSwitchboard switchboard,   
            MsnInstantMessage message, MsnContact contact) {   
        msg(contact.getDisplayName() + "对我说:" + message.getContent());   
        //如果聊天内容为exit,退出   
        if (message.getContent().trim().equalsIgnoreCase("exit")) {   
            msg(contact.getDisplayName() + "对我发出退出指令。");   
            messenger.logout();   
            System.exit(0);   
        }   
        message.setContent("Hello,I'm robot!");//设置要发送消息内容   
        message.setFontRGBColor((int) (Math.random() * 255 * 255 * 255));//设置消息的文本颜色   
        switchboard.sendMessage(message);//发送信息   
    }   
  
    //收到系统信息的时候发生,登录时   
    @Override  
    public void systemMessageReceived(MsnMessenger messenger,   
            MsnSystemMessage message) {   
        //msg(messenger + " recv system message " + message);   
    }   
  
    //当在联系人聊天窗口获得光标并按下第一个键时发生   
    @Override  
    public void controlMessageReceived(MsnSwitchboard switchboard,   
            MsnControlMessage message, MsnContact contact) {   
        msg(contact.getFriendlyName() + "正在输入文字。");   
    }   
  
    //异常时发生   
    @Override  
    public void exceptionCaught(MsnMessenger messenger, Throwable throwable) {   
        msg(messenger + throwable.toString());   
        msg(throwable);   
    }   
  
    //登录完成时发生   
    @Override  
    public void loginCompleted(MsnMessenger messenger) {   
        msg(messenger.getOwner().getDisplayName() + "登录成功!");   
    //messenger.getOwner().setDisplayName("天天持之以恒");   
    }   
  
    //注销时发生   
    @Override  
    public void logout(MsnMessenger messenger) {   
        msg(messenger + " logout");   
    }   
  
    //收到系统广播信息时发生   
    @Override  
    public void datacastMessageReceived(MsnSwitchboard switchboard,   
            MsnDatacastMessage message, MsnContact friend) {   
        msg(switchboard + " recv datacast message " + message);   
        switchboard.sendMessage(message, false);   
    }   
  
    //收到目前不能处理的信息时发生   
    @Override  
    public void unknownMessageReceived(MsnSwitchboard switchboard,   
            MsnUnknownMessage message, MsnContact friend) {   
        //msg(switchboard + " recv unknown message " + message);   
    }   
  
    @Override  
    public void contactListInitCompleted(MsnMessenger messenger) {   
        listContacts();   
    }   
  
    /** */  
    /**  
     * 更新好友列表完成时发生  
     */  
    @Override  
    public void contactListSyncCompleted(MsnMessenger messenger) {   
        listContacts();   
    }   
  
    /** */  
    /**  
     * 关闭一个聊天窗口时发生  
     */  
    @Override  
    public void switchboardClosed(MsnSwitchboard switchboard) {   
        msg("switchboardStarted " + switchboard);   
    }   
  
    /** */  
    /**  
     * 打开一个聊天窗口时发生  
     */  
    @Override  
    public void switchboardStarted(MsnSwitchboard switchboard) {   
        msg("switchboardStarted " + switchboard);   
    }   
  
    //打印联系人   
    private void listContacts() {   
        MsnContact[] cons = messenger.getContactList().getContactsInList(MsnList.AL);   
        if (cons.length == 0) {   
            msg("空");   
        } else {   
            msg("你现在有" + cons.length + "个联系人");   
        }   
        for (int i = 0; i < cons.length; i++) {   
        	System.out.println("邮箱============>"+cons[i].getEmail());
            String personal = ((MsnContactImpl) cons[i]).getPersonalMessage().equals("")   
                    ? "空" : ((MsnContactImpl) cons[i]).getPersonalMessage();   
           msg(cons[i].getDisplayName() + " " + cons[i].getEmail() + " " + cons[i].getStatus() + " " + personal);   
        }   
    }   
  
    public String getEmail() {   
        return email;   
    }   
  
    public void setEmail(String email) {   
        this.email = email;   
    }   
  
    public String getPassword() {   
        return password;   
    }   
  
    public void setPassword(String password) {   
        this.password = password;   
    }   
}  



但是直接在ANDROID上使用会报错,解决方法如下
添加包sun.security.action
添加类
public class GetPropertyAction implements
		java.security.PrivilegedAction<String> {
	private String theProp;
	private String defaultVal;

	@Override
	public String run() {
		String value = System.getProperty(theProp);
		return (value == null) ? defaultVal : value;

	}

	public GetPropertyAction(String theProp, String defaultVal) {
		this.theProp = theProp;
		this.defaultVal = defaultVal;
	}

	public GetPropertyAction(String theProp) {
		this.theProp = theProp;
	}

}



搞定收工
分享到:
评论

相关推荐

    Android获取Wifi列表

    在Android系统中,获取Wi-Fi列表是开发移动应用时常见的需求,这主要涉及到与网络连接相关的API交互。本文将详细讲解如何在Android中获取Wi-Fi列表,并根据信号强度来显示不同的网络图标。 首先,要获取Wi-Fi列表,...

    android获取程序详细权限列表

    "android获取程序详细权限列表"这个话题旨在探讨如何编程获取安装在Android设备上的应用所拥有的所有权限信息。以下是对这个主题的详细解释。 首先,Android系统采用了一种基于权限的模型来控制应用程序对资源和...

    Android中获取后台正在运行的应用列表

    在Android设备中,按Back键会将当前的Activity出栈销毁,而按HOME键却会将之隐藏到后台。如若有多个这样的程序这样操作,我们不知道后台到底有多少个正在运行的应用程序。此程序的目的就列举出后台正在运行的应用...

    android获取wifi列表

    在Android平台上,获取Wi-Fi列表是一项常见的任务,尤其对于开发者来说,这有助于构建与网络相关的应用,例如Wi-Fi热点管理、网络诊断等。本教程将详细介绍如何基于ListFragment框架来实现这一功能,这对于初学者来...

    android获取当前壁纸

    在Android平台上,获取当前桌面壁纸是一项常见的任务,尤其在开发个性化应用或与用户界面相关的功能时。本篇文章将深入探讨如何实现这一功能,基于提供的链接(已无法访问,但可以根据历史资料推测方法)以及Android...

    android jni获取 Mac地址

    本话题关注的是如何在JNI中获取Android设备的MAC地址。 MAC(Media Access Control)地址是网络设备的物理地址,每个设备在网络中都有一个唯一的MAC地址,用于数据传输中的寻址。在Android系统中,由于安全和隐私...

    Android读取通讯录中设置邮件的联系人

    在Android平台上,获取通讯录中的联系人信息是常见的功能需求,尤其当需要处理与电子邮件相关的应用时。这个DEMO展示了如何有效地读取那些在联系人信息中设置了电子邮件地址的联系人。下面我们将深入探讨实现这一...

    Android中获取GSM、CDMA、Wifi信号强度

    "Android中获取GSM、CDMA、Wifi信号强度" Android 中获取 GSM、CDMA、Wifi 信号强度是一个非常重要的功能,特别是在实现某些特定的应用场景时。例如,在某些地区,GSM 信号强度可能会很弱,而 CDMA 信号强度可能会...

    android如何获取相片的拍摄日期

    在Android系统中,获取照片的拍摄日期以及其他相关信息是通过读取图像文件的元数据来实现的。这些元数据通常存储在JPEG文件的Exchangeable Image File Format (EXIF) 标签中。以下是一些关键步骤和知识点,教你如何...

    android FFT 获取音频的频率并实时显示

    在Android平台上进行音频处理时,Fast Fourier Transform(FFT)是一种常用的技术,用于将时域信号转换为频域信号,从而分析音频数据中的频率成分。本文将深入探讨如何使用Android的FFT来获取音频频率,并实现实时...

    android获取wifi和Ethernet信息

    获取带有以太网接口的android系统中ethernet和wifi连接信息(连接状态,IP地址,dns,netmask等信息)

    Android中获取正在运行的服

    本篇文章将详细阐述如何使用`ActivityManager.RunningServiceInfo`来获取Android设备上当前正在运行的服务信息。 `ActivityManager`是Android SDK提供的一个系统服务,它提供了对应用活动生命周期管理的功能,其中...

    Android中获取系统内存信息以及进程信息

    在Android系统中,开发者可以通过Android提供的API来获取系统的内存信息以及正在运行的进程状态。这一功能主要涉及到`ActivityManager`类的使用。`ActivityManager`是Android SDK中的一个关键组件,它提供了对系统...

    Android获取手机短信

    在Android平台上,获取手机短信是一项常见的功能,尤其在开发与通信相关的应用时。本文将深入讲解如何通过Android SDK来实现这一功能,同时提供一个名为"SMSTest"的源代码示例。 首先,我们需要理解Android系统中...

    Android获取手机所有图片并显示

    在Android开发中,获取手机上的所有图片并进行列表展示是一项常见的需求,这通常涉及到多媒体文件的访问、数据的加载和UI的设计。以下是一些相关的知识点: 1. **多媒体存储权限**: 在Android 6.0(API级别23)及...

    android 下gmail邮件包括附件发送和接收

    3. 获取邮件:使用`Folder`对象的`getMessages()`方法获取邮件列表。每个`Message`对象代表一封邮件,可以进一步解析其内容、附件等。 4. 解析邮件:`Message`对象提供了许多方法来获取邮件信息,如`getFrom()`, `...

    android获取wifi的IP,子网掩码,网关,dns等信息

    在Android平台上,获取WiFi网络的IP地址、子网掩码、网关以及DNS信息是开发者经常需要处理的任务,这有助于实现各种网络相关的功能,比如网络诊断、设备间通信或者网络状态监控。以下将详细介绍如何在Android中获取...

    Android获取USB扫描枪扫描数据

    Android获取USB扫描枪扫描数据。Android 平板热插拔USB扫描枪应用场景多,在有界面如EditText时,扫描枪扫描内容自动输入到编辑框了,在没有界面的情况下如何获取扫描枪数据呢。AccessibilityService不了解的同学看...

    android 获取cpu使用率, 内存 实时数据

    在Android平台上,获取CPU使用率和内存实时数据是开发者进行性能监控、优化应用或实现系统监控功能的关键步骤。本文将详细介绍如何在Android中获取这些关键信息,并提供相关的代码示例。 首先,我们要理解CPU使用率...

    Android中获取当前位置的经纬度,并在Google Map Android v2显示

    实现通过GPS或NetWork获取当前位置的经纬度,并且在Google Map Android v2上显示

Global site tag (gtag.js) - Google Analytics