1、消息推送查了下资料,后面还是使用了androidpn

(1)java.security.KeyStoreException: KeyStore jks implementation not found

解决方法, 在创建ConnectionConfiguration 时指定证书位置及类型:

connConfig.setTruststorePath("/system/etc/security/cacerts.bks");
        connConfig.setTruststoreType("bks");

(2) 客户端一些说明

asmack的代码以及jar可以从 http://code.google.com/p/asmack/downloads/list 下载.

在android中创建一个service用来管理连接以及处理报文.

创建连接代码如下 ,其中server_ip是jabber服务器的ip, 可以是域名.

Log.i(TAG, "ConnectManager in...");
        ConnectionConfiguration connConfig = new ConnectionConfiguration(server_ip);
        // connConfig.setSecurityMode(SecurityMode.disabled);
        connConfig.setSecurityMode(SecurityMode.required);
        connConfig.setSASLAuthenticationEnabled(false);
        connConfig.setCompressionEnabled(false);
        mConnection = new XMPPConnection(connConfig);

连接到服务器代码:

if (!isConnect()) {
            Log.i(TAG, "Connect to server now...");
            try {
                // Connect to the server
                mConnection.connect();
                Log.i(TAG, "connect success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "connect failed!", e);
            }
        }

判断是否连接上:

mConnection.isConnected();

登录到服务器代码, 需要用户名和密码:

if (!isLogin()) {
            Log.i(TAG, "Login to server now...");
            try {
                mConnection.login(username, passwd);
                Log.i(TAG, "login success!!!");
            } catch (XMPPException e) {
                Log.e(TAG, "login failed!", e);
            }
        }

判断是否登录上:

mConnection.isAuthenticated();

添加连接监听代码:

mConnection.addConnectionListener(new ConnectionListener() {
            public void connectionClosed() {
                // TODO
            }

public void connectionClosedOnError(Exception e) {
                // TODO
            }

public void reconnectingIn(int seconds) {
                // Ignore
            }

public void reconnectionFailed(Exception e) {
                // Ignore
            }

public void reconnectionSuccessful() {
                // Ignore
            }
        });

添加包监听代码, 以名单列表为例:

PacketFilter rosterFilter = new PacketTypeFilter(RosterPacket.class);
      mConnection.addPacketListener(new RosterPacketListener(), rosterFilter);

其中 RosterPacket类是继承Packet类的,  除此之外还有 IQ,  Message,  Presence, AuthMechanism, Response五种类型的包.

可以使用OrFilter来同时处理多种类型的包. 以下代码用来接收所有的包:

PacketFilter rosterPF = new PacketTypeFilter(RosterPacket.class);
        PacketFilter IQPF = new PacketTypeFilter(IQ.class);
        PacketFilter MSGPF = new PacketTypeFilter(Message.class);
        PacketFilter PresencePF = new PacketTypeFilter(Presence.class);
        PacketFilter AMPF = new PacketTypeFilter(AuthMechanism.class);
        PacketFilter REPF = new PacketTypeFilter(Response.class);
        
        OrFilter allPF = new OrFilter(rosterPF, IQPF);
        allPF.addFilter(MSGPF);
        allPF.addFilter(PresencePF);
        allPF.addFilter(AMPF);
        allPF.addFilter(REPF);
        PacketListener myListener = new PacketListener() {
            public void processPacket(Packet pk) {
                Log.i(TAG, "receive message : " + pk.toString());
            }
        };
        mConnection.addPacketListener(myListener, allPF);

android安卓开发问题集 XMPP篇的更多相关文章

  1. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  2. Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码

    以前写过两个Android开发配置文档,使用NDK进行JNI开发,这样能够利用以前已经写好的C++代码. 前两篇博客地址: http://blog.csdn.net/watkinsong/articl ...

  3. Android UI开发第三十篇——使用Fragment构建灵活的桌面

    http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android ...

  4. Android安卓开发一环境配置

    安卓项目开发 我采用的安卓开发软件是IDEA,IDEA功能强大,具有集成的安卓开发环境. 安卓开发的首要任务是在IDEA配置安卓开发环境 第一步新建一个安卓项目 按照提示完成操作,首次建立安卓项目它会 ...

  5. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  6. Android 图片开发内幕系列第一篇

    前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很 ...

  7. Android UI开发第三十三篇——Navigation Drawer For Android API 7

    Creating a Navigation Drawer中使用的Navigation Drawer的android:minSdkVersion="14",现在Android API ...

  8. Android UI开发第三十一篇——Android的Holo Theme

    好长时间没写Android UI方面的文章了,今天就闲扯一下Android的Holo主题.一直做android开发的可能都知道,Android 系统的UI有过两次大的变化,一次是android 3.0 ...

  9. 【转】Android UI开发第三十一篇——Android的Holo Theme

    好长时间没写Android UI方面的文章了,今天就闲扯一下Android的Holo主题.一直做android开发的可能都知道,Android 系统的UI有过两次大的变化,一次是android 3.0 ...

随机推荐

  1. qt 多线程之间通讯

    问题描述:界面线程MainApp为主线程,工作线程MyThread为一子线程,从工作线程向主线程传递字符串用于在主线程中显示. Qt的信号与槽机制可以将任何继承自QObject类的对象捆绑在一起,使不 ...

  2. java中list、set和map 的区别

    List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...

  3. Rightmost Digit(快速幂+数学知识OR位运算) 分类: 数学 2015-07-03 14:56 4人阅读 评论(0) 收藏

    C - Rightmost Digit Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit ...

  4. Graph.js

    Graph.js Graph.js A JavaScript library for rendering a graph of nodes

  5. initial pointer [expert c]

    initial differece between pointer and array Both arrays and pointers can be initialized with a liter ...

  6. ARM LDR伪指令使用方法具体解释

    LDR伪指令 10.45 LDR pseudo-instruction   功能:把一个32位马上数或一个32位的内存地址载入到一个寄存器中. 注意:这里描写叙述的是LDR伪指令,而不是LDR指令   ...

  7. android之ListPreference的用法_PreferenceActivity用法

    首先,我们明确,preference是和数据存储相关的.        其次,它能帮助我们方便的进行数据存储!为什么这个地方一定要强调下方便的这个词呢?原因是,我们可以根本就不使用,我们有另外的N种办 ...

  8. JAVA HashMap与HashTable 区别

    HashTable和HashMap区别 第一,继承不同. public class Hashtable extends Dictionary implements Mappublic class Ha ...

  9. 如何改变word修订模型下的视图

    在Word中执行与Find.Range等相关的操作时,需对修订模式下的文档进行特殊处理. 核心知识点 Word中的 RevisionsView 属性只有两种设置:显示标记的最终状态(Final Sho ...

  10. java使用注解和反射打造一个简单的jdbc工具类

    a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...