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

 

posted @ 2015-07-16 13:29  -下午茶-  阅读(5814)  评论(1编辑  收藏  举报