关于html5plus的资料参考http://www.html5plus.org/
最近通过html5做手机app,其中涉及到网络通过,必须采用原生的socket,websocket无法满足要求,html5plus可以调用java包,java包封装了socket,以多线程的方式工作,收到数据之后,以event的方式通知js,开发工具包括hbuilder和eclipse。
java代码:
ClientSocket类:
packageio.dcloud.net;importjava.io.IOException;importjava.net.Socket;import java.io.*;public classClientSocket {public ClientSocket(String site, intport) {try{
socket= newSocket(site, port);
BufferedReader in= new BufferedReader(newInputStreamReader(
socket.getInputStream()));
PrintWriter out= newPrintWriter(socket.getOutputStream());
BufferedReader userin= new BufferedReader(newInputStreamReader(
System.in));//new SendThread(out, userin, false).start();
m_recThread = newReceiveTread(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 voidtest() {return;
}public voidsetEventOberver(DataArrivedEvent event) {
m_recThread.setEventOberver(event);
}privateSocket socket;//发送消息
publicBoolean sendMsg(String msg){try{//BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = newPrintWriter(socket.getOutputStream());
out.println(msg);
out.flush();
}catch(IOException e){
e.printStackTrace();return false;
}return true;
}
}
DataArrivedEvent接口:
packageio.dcloud.net;public interfaceDataArrivedEvent {//public void onDataArrived(char [] data,int nsize);
public voidonDataArrivedString(String data);
}
ReceiveTread类:
packageio.dcloud.net;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;public class ReceiveTread extendsThread{
BufferedReader in ;
ServerSocket server;
PrintWriter out;
BufferedReader userin;
Socket client;publicReceiveTread(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;
}publicReceiveTread(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 voidsetEventOberver(DataArrivedEvent event) {
m_event=event;
}
@Overridepublic voidrun() {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代码:
functionplusReady(){//隐藏滚动条
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手机调试通过。