关于html5plus的资料参考http://www.html5plus.org/
最近通过html5做手机app,其中涉及到网络通过,必须采用原生的socket,websocket无法满足要求,html5plus可以调用java包,java包封装了socket,以多线程的方式工作,收到数据之后,以event的方式通知js,开发工具包括hbuilder和eclipse。
java代码:
ClientSocket类:
package io.dcloud.net; import java.io.IOException; import java.net.Socket; import java.io.*; public class ClientSocket { public ClientSocket(String site, int port) { try { socket = new Socket(site, port); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader userin = new BufferedReader(new InputStreamReader( System.in)); //new SendThread(out, userin, false).start(); m_recThread = new ReceiveTread(socket, in, out, userin); m_recThread.start(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } ReceiveTread m_recThread=null; public void test() { return; } public void setEventOberver(DataArrivedEvent event) { m_recThread.setEventOberver(event); } private Socket socket; //发送消息 public Boolean sendMsg(String msg){ try{ //BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream()); out.println(msg); out.flush(); }catch(IOException e){ e.printStackTrace(); return false; } return true; } }
DataArrivedEvent接口:
package io.dcloud.net; public interface DataArrivedEvent { //public void onDataArrived(char [] data,int nsize); public void onDataArrivedString(String data); }
ReceiveTread类:
package io.dcloud.net; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class ReceiveTread extends Thread{ BufferedReader in ; ServerSocket server; PrintWriter out; BufferedReader userin; Socket client; public ReceiveTread(ServerSocket server,BufferedReader in,PrintWriter out,BufferedReader userin,Socket client) { this.in = in; this.server = server; this.client = client; this.out = out; this.userin = userin; } public ReceiveTread(Socket client ,BufferedReader in,PrintWriter out,BufferedReader userin) { this.in = in; this.client = client; this.out = out; this.userin = userin; } DataArrivedEvent m_event=null; public void setEventOberver(DataArrivedEvent event) { m_event=event; } @Override public void run() { try { while(true){ String info = in.readLine(); if(info !=null){ //System.out.println(info); if(m_event!=null) m_event.onDataArrivedString(info); if(info.equals("end")) break; } } in.close(); out.close(); userin.close(); if(client != null){ client.close(); } server.close(); } catch (IOException e) { e.printStackTrace(); } } }
html5plus代码:
function plusReady(){ // 隐藏滚动条 plus.webview.currentWebview().setStyle({scrollIndicator:'none'}); // Android处理返回键 plus.key.addEventListener('backbutton',function(){ if(confirm('确认退出吗?')){ plus.runtime.quit(); } },false); compatibleAdjust(); //添加测试代码 var ClientSocket=plus.android.importClass("io.dcloud.net.ClientSocket"); var hevent = plus.android.implements( "io.dcloud. htnet.DataArrivedEvent", { "onDataArrivedString":function( info ){ console.log( "onDataArrivedString: "+info ); // 输出“Invoked Object’s name: Tester” if(confirm('开到接收数据了吗:'+info)){ }; } } ); //创建ClientSocket var clientSocket=new ClientSocket("192.168.2.139",20000); clientSocket.test(); clientSocket.setEventOberver(hevent); }
小米3手机调试通过。