在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手机调试通过。
在android手机上通过Html5Plus调用java类。的更多相关文章
- Android手机上监听短信的两种方式
		Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ... 
- android 手机上运行图像算法
		在pc上调试好的图像处理算法想要在android手机上跑一下看看速度需要一下几个步骤 1.建立一个android application,通过ndk调用你写好的图像算法的c/c++ code 2. 然 ... 
- xe5 android 手机上使用sqlite   [转]
		在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank applicatio ... 
- Android 手机上获取手机当前上网IP地址
		[转] 原文 Android 手机上获取手机当前上网IP地址 (手机网关给手机号分配的IP) 每个手机上网通过移动网关的时候,网关都会给该手 ... 
- android webView开发之js调用java代码示例
		1.webView设置 webView.getSettings().setJavaScriptEnabled(true);//设置支持js webView.addJavascriptInterface ... 
- 如何通过wifi在android手机上安装调试应用
		如何通过wifi在android手机上安装调试应用 1. 首先还是要打开手机的usb调试选项,并通过usb线连接手机.2. 然后执行“adb tcpip 5555”,把adb从usb模式切换到tcpi ... 
- delphi xe5 android  手机上使用sqlite
		本篇我们介绍一下在android手机上怎样使用sqlite数据库,这里用Navigator实现 增删改查. 1.新建firemonkey mobile application 2.选择blank ap ... 
- 如何在 Android 手机上实现抓包?
		如何在 Android 手机上实现抓包? http://www.zhihu.com/question/20467503 我想知道某个应用究竟在数据提交到哪里,提交了什么.网上的教程太复杂,不想麻烦.有 ... 
- Android 手机上安装并运行 Ubuntu 12.04
		ubuntu.sh脚本的原地址变动了,导致下载不了,现在更新了网盘地址.小技巧:遇到一些下载失效的时候可以试一试p2p下载工具(如 easyMule.迅雷等)试一试,说不定有人分享过~* —————— ... 
随机推荐
- ElasticSearch查询 第二篇:文档更新
			<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ... 
- iOSPush自动隐藏tabbar
			只需要在UITabBarController添加控制器的时候调用YZNav初始化,就可以实现tabbar的自动隐藏了. 直接上github地址:https://github.com/YouZhiZhe ... 
- HTML 表格实例
			1.表格这个例子演示如何在 HTML 文档中创建表格. <p>每个表格由 table 标签开始.</p><p>每个表格行由 tr 标签开始.</p>&l ... 
- centos 7:network: 正在打开接口 ens33: 错误:激活连接失败:No suitable device found for this connection.
			Mar :: localhost systemd: Starting LSB: Bring up/down networking... Mar :: localhost network: 正在打开环回 ... 
- LintCode——第K大元素
			第K大元素:在数组num中找到第k大的元素(可以交换数组中的元素的位置) 样例: 数组 [9,3,2,4,8],第三大的元素是 4 数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4 ... 
- 详细聊聊k8s deployment的滚动更新(二)
			一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍: livenessProbe:存活性探测.判断pod是否已经停止 readinessProbe:就绪 ... 
- Kali信息收集-搜索引擎
			1.google hacking intext:搜索正文内容 intitile:网页标题中的内容 inurl:url中的关键字 site:目标站点下 filetype:文件类型 cache:缓存 li ... 
- cloudflare 加https、加SSL(加CF处理)实操流程
			建站过程中,少不了SSL证书等cf添加操作,cf,即cloudflare的简写 首先,点击如图“Add site”,弹出输入框后,填写已在如阿里云.goDaddy.freedom等域名平台购买的域名: ... 
- 该帐户当前被锁定,所以用户 'sa' 登录失败。系统管理员无法将该帐户解锁。
			用WINDOWS账户登录查询分析器,输入一下语句并执行: ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = '你的新密码' unloc ... 
- JavaBeans与内省(Introspector)
			JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大. 现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ... 
