一、应用背景介绍
最近由于要开发一个运行在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通过这个注册对象的事件代码间接调用
转自:http://blog.youkuaiyun.com/ex_net/article/details/8829348