参考博客
Android版本要求及H5 api支持情况
在Android版本4.4之前,由于维护和开发Android版本时使用的是AppleWebkit开源内核,虽然也非常不错,但不支持许多html5 api,在Android4.4使用了Chromium才得以发展,
目前支持的html 5如下:
Web Workers | 支持 | javaScript多线程 |
WebSocket | 支持 | javascript套接字,TCP长链接 |
IDBFactory/indexDB | 支持 | 索引数据库 |
ApplicationCache | 支持 | web离线缓存 |
postMessage/onMessage | 支持 | 收发消息 |
ondeviceorientation,ondevicemotion,onorientationchange | 支持 | 屏幕旋转,移动 |
onvolumechange | 支持 | 声音改变 |
RequestAnimationFrame | 支持 | 页面UI动画更新引擎 |
LocalStorage/sessionStorage | 支持 | 本地缓存 |
FileReader | 支持 | 本地文件读取 |
FormData | 支持 | 模拟表单,表单模型 |
EventSource | 支持 | Server-Sent Events(SSE)功能,允许服务端推送数据到客户端。(通常叫数据推送) |
CacheStorage | 不支持 | 异步缓存 |
Promise | 不支持 | 异步范式 |
Crypto | 不支持 | javascript加密API |
WebAudio | 不支持 | 流媒体播放 |
WebRTC | 不支持 | 流媒体通讯 |
WebGL | 不支持 | Web GL图像框架 |
GeoLocation | 支持 | 地理定位 |
Notification | 不支持 | web通知 |
Blob | 支持 | 二进制数据对象 |
在这里我们主要了解WebSocket在Android WebView上的支持,这里给出一个基于php WebSocketServer的例子:
【以下例子来自开源中国博客】
体验位置:http://www.yxsss.com/ui/sk.html
(请使用你的PC浏览器和你的Android4.4的设备上的浏览器)
WebSocket Server端实现
php端
<?php
error_reporting(E_ALL ^ E_NOTICE);
ob_implicit_flush();
class Sock{
public $sockets;
public $users;
public $master;
private $rec_data_packets=array();//已接收的数据
private $sum_length=array();//数据总长度
private $rec_data_length=array();//接收数据的长度
private $salt_key=array();//加密key
private $per_data_len=array(); //每组数据长度
public function __construct($address, $port,$maxLink=16){
$this->master=$this->createSocketServer($address, $port,$maxLink);
$this->sockets=array($this->master);
}
function run()
{
while(true){
$changes=$this->sockets;
$write=NULL;
$except=NULL;
socket_select($changes,$write,$except,NULL);
/**
* 监听读写操作,socket_select (array &$read, array &$write, array &$except, $tv_sec, $tv_usec = null)
* $read 注意,这里使用了引用,$read表示要监听读操作的socket,socket_select可以调用多次,之前监听的socket不会被取消(注意,socket连接也是read)
* $write 注意,这里使用了引用,$read表示要监听写操作的socket,socket_select可以调用多次,之前监听的socket不会被取消
* $$except 监听异常的socket
* 以上&read,&write,&except是被引用的,也就意味着变量的值可以输入输出,把监听到的socket输出,把想被监听的socket输入
* 最后一个参数是超时时间,默认是0
*
* 该函数会阻塞
*/
foreach($changes as $sock){
if($sock==$this->master){
/**
* 接受客户端