先来唠叨几句websocket,顾名思义,websocket也是socket,用来通信的,只是用在web上,所以叫websocket。websocket是html5规范中的一项,在chrome、ff等主流浏览器中都已经支持。但是在我们android的原生浏览器却……而android中的webview也是用的原生浏览器的核心,所以同样悲剧。

   在websocket出现之后就有人开发了socket.io,这又是个啥呢?其实它就干了一个事,就是封装websocket,使得即使不支持websocket的平台在调用socket.io时也能正常通信。而且在使用socket.io时,不管支不支持websocket,都只要一份代码就可以。

   有了socket.io,我们就可以在android环境的webview当中使用socket通信了。但是,android并不支持websocket啊,socket.io到底是怎么实现的socket通信呢?原来socket.io会在平台不支持websocket的情况下使用其他的方式实现,比如:xhr、flashsocket。在android中,socket.io实现使用的就是xhr方式。

   xhr是实现了通信,但是与websocket相比,xhr的实现方式性能上还是不能比。那么有没有方式让android也实现真正的websocket呢?有,有人就想出了迂回的办法:

   利用webview与页面可以相会调用的特性,采用JAVA NIO将websocket实现了一遍,这下可就是货真价实的socket了!


   其实已经有人实现了这种方式,而且只需要导入一些插件及修改极少的代码即可采用socket.io的代码在android的webview中实现websocket。

   项目github地址:https://github.com/koush/android-websockets#readme


下面我简单讲一下使用方法:

  1. 在Eclipse中新建Android Project项目

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

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

  4. 修改项目启动类App.java

    在App.java的onCreate方法中加入如下代码:

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


  5. 添加

   必须注意的是这行必须在加载socket.io.js之前加载







更多相关文章

  1. Unity3D调用android方法(非插件方式)
  2. Android跨进程通信之小例子(一)
  3. Android原生方式获取经纬度和城市信息
  4. Unity3d Android SDK接入解析(二)Unity3d Android SDK的设计与两种
  5. Android开发利器之pidcat安装方式
  6. 【android】布局之盒模型、对齐方式、填充(类比web理解)
  7. Android 定时任务的多种实现方式
  8. Android studio制作计算器源代码

随机推荐

  1. android View类详解。
  2. Google 内部演示文稿建议让部分合作商可
  3. Android实战技巧之四十五:复用原有C代码的
  4. AMS 深入了解(一、进程管理)(and5.1)
  5. Android脚本envsetup.sh逐行分析
  6. 时隔半年,继续关注Android
  7. Android程序员指南(19)
  8. Android客户端制作之连接URL
  9. Android实现为Tab添加Menu的方法
  10. Android(安卓)RxJava 实战系列:联想搜索优