根据Androidpn提供的DEMO框架,从中理出了最简单的连接和接收推送的一个DEMO.
package com.test.pn;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Registration;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.xmlpull.v1.XmlPullParser;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class NotificationService extends Service{
public void onCreate() {
ConnectionConfiguration connConfig = new ConnectionConfiguration(
"10.0.2.2", 5222);
connConfig.setSecurityMode(SecurityMode.required);
connConfig.setSASLAuthenticationEnabled(false);
connConfig.setCompressionEnabled(false);
Connection connection = new XMPPConnection(connConfig);
try {
connection.connect();
ProviderManager.getInstance().addIQProvider("notification",
"androidpn:iq:notification",
new IQProvider(){
public IQ parseIQ(XmlPullParser parse) throws Exception {
Log.i("接收", "接收到消息......");
return null;
}
});
Registration registration = new Registration();
PacketFilter packetFilter = new AndFilter(new PacketIDFilter(
registration.getPacketID()), new PacketTypeFilter(
IQ.class));
PacketListener packetListener = new PacketListener(){
public void processPacket(Packet arg0) {
}
};
connection.addPacketListener(packetListener, packetFilter);
registration.setType(IQ.Type.SET);
registration.addAttribute("username", "12345");
registration.addAttribute("password", "12345");
connection.sendPacket(registration);
connection.login("12345", "12345", "AndroidpnClient");
connection.addConnectionListener(new ConnectionListener(){
public void connectionClosed() {
}
public void connectionClosedOnError(Exception arg0) {
}
public void reconnectingIn(int arg0) {
}
public void reconnectionFailed(Exception arg0) {
}
public void reconnectionSuccessful() {
}
});
} catch (XMPPException e) {
e.printStackTrace();
}
super.onCreate();
}
public void onDestroy() {
super.onDestroy();
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
public IBinder onBind(Intent intent) {
return null;
}
}
再附上所用到的资源:
客户端:http://download.youkuaiyun.com/detail/synge33/3580925
服务端: http://download.youkuaiyun.com/detail/synge33/3580920
自己整理的客户端的简易DEMO: http://download.youkuaiyun.com/detail/synge33/3580934
使用方法可以看下这个人的博客:http://yangzc106.iteye.com/blog/1101595