在android手机上通过Html5Plus调用java类。

时间:2023-03-09 00:12:09
在android手机上通过Html5Plus调用java类。

关于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手机调试通过。