在android的webview中實現websocket

   先來嘮叨幾句websocket,顧名思義,websocket也是socket,用來通訊的,只是用在web上,因此叫websocket。websocket是html5規範中的一項,在chrome、ff等主流瀏覽器中都已經支持。可是在咱們android的原生瀏覽器卻……而android中的webview也是用的原生瀏覽器的核心,因此一樣悲劇。html

   在websocket出現以後就有人開發了socket.io,這又是個啥呢?其實它就幹了一個事,就是封裝websocket,使得即便不支持websocket的平臺在調用socket.io時也能正常通訊。並且在使用socket.io時,無論支不支持websocket,都只要一份代碼就能夠。
html5

   有了socket.io,咱們就能夠在android環境的webview當中使用socket通訊了。可是,android並不支持websocket啊,socket.io究竟是怎麼實現的socket通訊呢?原來socket.io會在平臺不支持websocket的狀況下使用其餘的方式實現,好比:xhr、flashsocket。在android中,socket.io實現使用的就是xhr方式。
java

   xhr是實現了通訊,可是與websocket相比,xhr的實現方式性能上仍是不能比。那麼有沒有方式讓android也實現真正的websocket呢?有,有人就想出了迂迴的辦法:android

   利用webview與頁面能夠相會調用的特性,採用JAVA NIO將websocket實現了一遍,這下可就是貨真價實的socket了!
git


   其實已經有人實現了這種方式,並且只須要導入一些插件及修改極少的代碼便可採用socket.io的代碼在android的webview中實現websocket。
github

   項目github地址:https://github.com/koush/android-websockets#readmeweb


下面我簡單講一下使用方法:chrome

  1. 在Eclipse中新建Android Project項目瀏覽器

  2. 把animesh kumar的websocket-android-phonegap項目java文件(WebSocketFactory.java和WebSocket.java)打成jar包,存放在 android project的libs目錄下並導入工程websocket

  3. 把websocket.js存放在 assets/www/js目錄下

  4. 修改項目啓動類App.java

    在App.java的onCreate方法中加入以下代碼:

    appView.addJavascriptInterface(new WebSocketFactory(appView), "WebSocketFactory");


  5. 添加<script src="js/websocket.js"></script>

   必須注意的是這行必須在加載socket.io.js以前加載

相關文章
相關標籤/搜索