androidpn的一次親密接觸(二)

簡單看了一下源碼的實現,這裏貼一點個人覺得比叫重要的代碼。

 

XmppManager.java

  • 構造方法:
public XmppManager(NotificationService notificationService)

 

 在這裏主要是從共享引用中取得xmpp服務器地址和端口號、用戶名和密碼。

 

  • 內部類
private class ConnectTask implements Runnable

 

 這個內部類主要實現的是連接服務器的操作。通過connection.connect();實現連接服務器。通過如下語句實現發送連接消息。

ProviderManager.getInstance().addIQProvider("notification",
                            "androidpn:iq:notification",
                            new NotificationIQProvider());

 最後通過xmppManager.runTask();執行任務隊列中的任務。

 

  • 內部類
 private class RegisterTask implements Runnable
  這個內部類主要實現的是在服務器上註冊用戶的操作。如果沒有註冊,隨即生成用戶名和密碼註冊到服務器上。同樣通過connection.sendPacket(registration);發送消息實現註冊功能。

  • 內部類
private class LoginTask implements Runnable
 這個內部類主要實現的是用戶的登錄操作。通過註冊到服務器上的用戶名和密碼登錄到服務器上。最後通過connection.addPacketListener(packetListener, packetFilter);實現消息的監聽。最後一樣通過xmppManager.runTask();在消息隊列中執行任務(執行這個線程)。這個類就是實現服務器推動的主要類。

上述爲客戶端的實現。總的來說客戶端仍然是通過xmpp協議實現消息的傳輸。值得注意的是在NotificationService這個類中(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);方法取得了系統的消息的相關服務。主要爲類是取得設備的ID,但我在源碼中沒有看到使用這個設備ID的地方。很是不解,看來還是需要繼續深入的研究。


哈哈。到現在爲止,總共完成了對openfire開發環境、openfire插件的製作、smack和openfire通信、androidpn的部署方式以及androidpn的使用方法的研究調研工作。對這些方面都是停留在皮毛,希望以後可以通過實際應用可以學到更加深層次的東西。對了,聽一位業內人士說,xmpp是很複雜的,希望以後我能更加了解一點。

明天研究寫什麼呢?明天可能要計劃一下怎麼把公司現有的工作流做到android上來。
未完待續...

 

發佈了27 篇原創文章 · 獲贊 0 · 訪問量 4899
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章