你好,游客 登录 注册 搜索
背景:
阅读新闻

JCFXBL与WebView整合打造安卓应用服务平台 - 张建波专栏

[日期:2013-04-20] 来源:  作者: [字体: ]

JCFXBL与WebView整合打造安卓应用服务平台

 

本系列文章由ex_net(张建波)编写,转载请注明出处。

http://blog.csdn.net/ex_net/article/details/8829348

作者:张建波 邮箱: 281451020@qq.com 电话:13577062679 欢迎来电交流!

 

一、应用背景介绍

        最近由于要开发一个运行在Android环境上的设区级的服务平台,由于里面的功能模块需要经常更新,因此就打算采用WEB方式来开发。简单来说,就是开发一个网站。只是这个网站是伪装在一个APK里的而已。

 

 

二、智能终端应用环境介绍

 

三、采用Html+JavaScript开发WebAPP的优缺点分析

 优点:

       (1)将TCP 或 UDP封装在Java函数里,然后提供JS调用接口,可以使得WebApp很方便的采用UDP或TCP与远程服务器进行socket通信;

       (2)在移动终端(嵌入式)环境编程下,经常要获取MAC、IP、设备ID等等信息,如果仅仅靠JavaScript本身的代码是很难实现的,提供安卓本身的APK编程就可以很容易实现了;

       (3)移植方便,如果要把这些WebAPP应用移植到IOS、或windows上,仅仅只需要重新实现这个“外壳”而已。

 

   缺点

 

四、在JavaScript中通过JS函数调用APK里的Java方法

 (1) APK程序WebView关键代码如下

webview1.getSettings().setJavaScriptEnabled(true);
webview1.setWebChromeClient(new WebChromeClient());
webview1.addJavascriptInterface(this, "JavaObj");		

(2)JavaScript调用APK里的Java函数关键代码

function btnTS_onclick(){
   var obj = window.JavaObj;
   obj.btn1Click();
}

程序效果说明:

    通过在网页里添加一个Button按钮,当用户点击这个按钮时,他会调用APK本身的一个Button按钮的事件。

完整的APK代码如下:

package a.b;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;

public class WebtestActivity extends Activity {
	/** Called when the activity is first created. */
	WebView webview1;
	Button button1;
	Handler handler;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.main);
		webview1 = (WebView) findViewById(R.id.webView1);
		button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
            	Toast.makeText(getApplicationContext(), "button1 is click",
            		     Toast.LENGTH_SHORT).show();
            }
        });
		
		handler = new Handler() {

	        public void handleMessage(Message msg) {
	            switch (msg.what) {
	            	case 0:{
	            		button1.performClick();
	            		break;
	            	}
	            }
	        }

	    };
		
		webview1.getSettings().setJavaScriptEnabled(true);
		webview1.setWebChromeClient(new WebChromeClient());
		webview1.addJavascriptInterface(this, "JavaObj");
		webview1.loadUrl("http://192.168.0.22/test.html");
	}
	
    public void btn1Click() {   
    	Message msg = new Message();
    	msg.obj = "";  
		msg.what = 0;
		handler.sendMessage(msg);  
    } 
}

这个APK启动后,将在webview里注册一个JavaObj对象,注册完毕后,自动打开 test.html 这个网页。


在 test.html 这个页面里,按钮调用 btnTS_onclick()这个函数,就可以调用APK里的btn1Click().

 function btnTS_onclick()

{

var obj = window.JavaObj;

obj.btn1Click();

}

 

五、效果截图如下:

 

 

 

六、注意事项

       通过JavaScript调用APK里面的GUI控件时,要首先绑定一个事件代码,然后JS通过这个注册对象的事件代码间接调用

 

 

更多案例敬请期待...

 

(1)获取系统信息例子

(2)UDP案例

(3)TCP案例

(4)JCFXBL调用接口案例

 





收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻