<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    Location-Aware-Instant:開發即時位置感知的Android客戶端(轉)

      一、回顧

          在分享這個項目之前先來回顧以前的三篇文章:

          《基于即時通信和LBS技術的位置感知服務(一):提出問題及解決方案》(外網地址)

          在第一篇文章中我們提出了要讓A與B在不同地方能即刻獲取對方準確位置的需求。之后討論了解決這一問題做出的方案選擇,即放棄使用輪詢(Pooling) 的方式在不同客戶端進行數據的更新,理由是因為B不知道A何時需要自己的位置信息,所以B只能一直post自己的位置數據給服務器,而A要定時通過 RESTful Web請求去服務器獲取B的信息。

          最后確定采用基于XMPP協議的PubSub(Publish/Subscribe,發布/訂閱)方式進行異步消息實時傳遞。

          《基于即時通信和LBS技術的位置感知服務(二):XMPP協議總結以及開源解決方案》(外網地址)

          第二篇文章主要是對XMPP協議進行總結,以及為什么要采用XMPP,最后介紹了XMPP協議的Java開源解決方案:Openfire+Smack+Spark。

          《基于即時通信和LBS技術的位置感知服務(三):搭建Openfire服務器+測試2款IM客戶端》(外網地址)

          第三篇文章詳細講解了基于XMPP協議的openfire服務架設,以及使用2款異構的基于XMPP協議的桌面客戶端測試即時消息傳遞。

          特別提示:為了更好的了解本項目要解決的問題,強烈建議去看看前面的三篇連載。

         

          二、Location-Aware-Instant項目概括

          Location-Aware-Instant是一個運行在Android OS 上具有位置即時感知功能的Android應用程序客戶端。與之前第三篇文章里介紹了2款桌面程序一樣,遵循開放標準的XMPP協議。

          開發過程查找和參考了不少外文資料和相關項目,利用周末和晚上的時間、現在已經終于完成了90%。

         

          本程序的架構和技術基礎:

          1. Android OS 應用開發技術:包括地圖應用開發。

          2. Openfire服務器:基于XMPP協議的開源Java服務器端程序。

          3. Smack 開發庫:對XMPP協議進行了封裝的客戶端實現的Java開發包。本項目采用的是ASmack Library(適合與Android OS 的Smack優化版)。

         

          本項目的實現原理。共分三個層次:

          1. 首先使用Openfire作為服務器,通過使用ASmack庫開發出帶有聯系人列表的即時消息傳遞程序;

          2. 然后客戶端發送和接收消息之間植入自己的攔截預處理邏輯,并通過定制特殊的命令,實現消息的自動應答功能;

          3. 最后一層在接收消息時,根據預處理命令判斷是否對方的意圖為定位請求,如果是則調用位置定位相關方法獲取本地位置并自動恢復給發送請求一方,請求方根據預處理命令判斷到來的消息是否與位置相關,如果有關則將對方的位置定位在Google 地圖上。

     

          注意:本文的內容是描述一種應用,并非代碼講解(本項目可能以后會結合Android開發總結來講解)。 

        

           三、項目功能展示

          由于只有一臺測試手機HTC G6,而這個項目是與位置有關的,所以用Android 開發模擬器來最為雙方通信的一端。

          測試帳號分別是test2@192.168.0.177(由于登錄htc g6上的Location-Aware-Instant客戶端),test@192.168.0.177(用來登錄模擬器上的Location-Aware-Instant客戶端)。上面2個帳號格式是Jabber Id(XMPP協議中的帳號,可以參考前排第二篇介紹XMPP的文章),本來是使用test@im.comit.com.cn 在其他桌面客戶端解析正常,但手機將im.comit.com.cn的域名解析成一個其他的IP,所以直接使用我本機的IP地址。

          本程序的logo:icon,logo來源自百度百科的XMPP介紹:image,我簡單的處理了一下。  

     

          1. 首先是登錄界面(分別使用上面的2個帳號登錄兩款手機客戶端):

          g6_loginHTC g6的登錄界面      login 開發模擬器的登錄界面

     

          2. 雙方登錄并連接到openfire服務器時,會出現雙方的在線情況。也就是在服務器上注冊了自己的狀態為在線。

          g6_listHTC g6可以看到對方(test)      list開發模擬器顯示test2在線

     

          3. 操作(目前只加入了定位對方的功能,其實還有發送普通信息、刪除聯系人等功能,添加聯系人)

          g6_list_opHTC g6      list_op

     

          4. 先來看通過手機模擬器定位htc g6客戶端的演示,即點擊第三步中手機模擬器(右邊)的”獲取位置“選項操作。

          雖然測試環境在室內,無法獲取GPS信號。但HTC g6插入了聯通的3G卡所以即時在室內也是可以使用基站定位大概位置。

          locate

          此時手機模擬器在向G6發送位置感知的請求,G6應該回應自己所在的位置,不到2秒鐘后,得到的結果如下圖:

     

          locate_ok

          我住在棠下,所以G6通過基站大概定位了我的位置,并將位置數據回應給手機模擬器,模擬器將G6所在的位置定位在地圖上。

     

          5. 上面演示了通過模擬器定位到G6的位置,現在演示的是G6獲取模擬器的位置。但是因為手機模擬器不能獲取真實的位置信息,也就無法將自己的信息回復給 G6。解決的方法是在開發工具中輸入一個自定義的位置數據。如下圖,輸入公司在所位置的經緯度(23.143791, 113.347533)。

          latlng

          圖中emulator 5554就是我們的模擬器(HT03GNX0404是HTC G6手機)。這樣模擬器的位置就定位在公司做位置。

     

          現在嘗試通過G6來感知模擬器這個客戶端所在的位置,即點擊第三步中HTC G6 (左邊)的”獲取位置“選項操作。結果如下圖:

          g6_locate

          G6客戶端程序正在等待手機模擬器的回應,不到2秒鐘后:

     

          g6_locate_ok

          OK,成功定位到公司所在位置,即G6即可感知到了手機模擬器的位置信息。

     

          到這里手機的位置感知服務基本框架已經出來了。能夠即可感知對方的位置,是不是很Cool的體驗!

     

          四、項目內容以及結構介紹(代碼太長,截圖分成上下兩部分)

          項目結構圖1      項目結構2 圖2

          代碼結構介紹:以下包名忽略了cn.com.comit.locationaware父包

          圖1:chat包:與消息發送有關的類

                   data包:聯系人列表,消息等實體類

                   dialogs包: 交互有關的對話框類

                   exception包:異常相關的類

                   map包:與地圖和LBS有關的類

          圖2:service包:封裝Smack庫和對方提供XMPP服務的封裝類。

                   util包:工具類包

                   widget.quickantion包:聯系人操作(如第三章第3步中的“獲取位置”)操作選項控件類

                   cn.com.comit.locationaware父包:入口以及輔助類

                   Google APIs 2.2:引用的google android 地圖開發包

                   引用的庫:asmack-2010.05.07.jar – Smack的Android優化版API庫、trace.jar錯誤追蹤相關包。

     

          五、結束語

          1. 傳統網絡操作方式我們用到 Restful Get獲取數據、Post提交數據,但這不是萬能的(雖然可以解決大多數的網絡應用問題)。通過引入基于PubSub(發布/訂閱)的即時通信有時候可以 取得意想不到的體驗效果,本項目提出了一個研究方向和思路(雖然離商用還有很長的路要走,可路終究是找到了一條,并且邁出了“萬里長征的第一步”)。

          2. 最近基于LBS的應用層出不窮,能夠將LBS和即時通信進行整合運行,讓研究的方向更明確(例如本項目的自動應答功能)。

          3. 將即時通信和LBS有機的結合或許可以稱作為傳說中的“微創新”,畢竟創新不一定是非得創造。

    posted on 2011-06-12 22:04 都市淘沙者 閱讀(644) 評論(1)  編輯  收藏 所屬分類: Android/J2ME/Symbian/Jabber

    評論

    # re: Location-Aware-Instant:開發即時位置感知的Android客戶端(轉) 2011-07-27 15:31 fpeter

    有Location-Aware-Instant源碼? thaks!
    QQ:fanxin21cn@sina.com

      回復  更多評論   

    主站蜘蛛池模板: 无码国产精品一区二区免费虚拟VR| 亚洲美女视频一区| 成人五级毛片免费播放| 久久成人免费大片| 国产一区二区三区亚洲综合| 亚洲一区二区三区久久| 久久久久亚洲AV无码专区首| 亚洲成AⅤ人影院在线观看| 成人最新午夜免费视频| 91免费播放人人爽人人快乐| 一区二区三区福利视频免费观看| jizz中国免费| 日韩精品免费一线在线观看| 亚洲AV无码男人的天堂| 亚洲一线产区二线产区区| 亚洲国产视频网站| 亚洲理论在线观看| 亚洲精品视频在线播放| 亚洲AV日韩AV永久无码绿巨人 | 亚洲精品美女久久久久| 亚洲成AV人片在| 精品国产亚洲一区二区三区| 亚洲中文字幕无码一区二区三区| 亚洲国产aⅴ综合网| 免费在线不卡视频| 亚洲国产成人a精品不卡在线| 四虎永久在线免费观看| 午夜国产羞羞视频免费网站| 国产美女a做受大片免费| 日本最新免费不卡二区在线| 免费的一级黄色片| 国产精品黄页在线播放免费| 欧洲精品免费一区二区三区| 国产公开免费人成视频| 免费人成网站在线高清| 久久激情亚洲精品无码?V| 亚洲精品国产成人片| 久久精品亚洲一区二区| 2022年亚洲午夜一区二区福利 | 成人无码a级毛片免费| 久别的草原电视剧免费观看|