packagecom.homer.jsandroid;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.StringTokenizer;importandroid.R.anim;importandroid.annotation.SuppressLint;importandroid.app.Activity;importandroid.content.pm.ActivityInfo;importandroid.os.Bundle;importandroid.os.Handler;importandroid.view.KeyEvent;importandroid.view.View;importandroid.webkit.WebChromeClient;importandroid.webkit.WebSettings;importandroid.webkit.WebView;importandroid.widget.TextView;importandroid.widget.Toast;public class JSAndroidActivity extendsActivity {private Activity mActivity = null;private WebView mWebView = null;privateString message;privateJsInterface jsInterface;private String[] params = null;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
mActivity= this;//锁定横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
params= new String[2];
jsInterface= newJsInterface();
showWebView();
}
@SuppressLint("SetJavaScriptEnabled")private voidshowWebView() {try{
mWebView=(WebView) findViewById(R.id.mWebView);
mWebView.requestFocus();
mWebView.setWebChromeClient(newWebChromeClient() {
@Overridepublic void onProgressChanged(WebView view, intprogress) {
JSAndroidActivity.this.setTitle("Loading...");
JSAndroidActivity.this.setProgress(progress);if (progress >= 80) {
JSAndroidActivity.this.setTitle("JsAndroid Test");
}
}
});
mWebView.setOnKeyListener(newView.OnKeyListener() {
@Overridepublic boolean onKey(View v, intkeyCode, KeyEvent event) {if (keyCode ==KeyEvent.KEYCODE_BACK&&mWebView.canGoBack()) {
mWebView.goBack();return true;
}return false;
}
});//WebView的管理设置状态
WebSettings webSettings =mWebView.getSettings();//设置android下容许执行js的脚本
webSettings.setJavaScriptEnabled(true);//编码方式
webSettings.setDefaultTextEncodingName("utf-8");/** 使用这个函数将一个对象绑定到Javascript,因此可以从Javascript访问的方法,
* Android(Java)与js(HTML)交互的接口函数, jsObj 为桥连对象可随意设值*/mWebView.addJavascriptInterface(jsInterface,"jsObj");/** Android(Java)访问js(HTML)端代码是通过loadUrl函数实现的,访问格式如:
* mWebView.loadUrl("javascript: showFromHtml()");*/mWebView.loadUrl("file:///android_asset/index.html");
}catch(Exception e) {
e.printStackTrace();
}
}private classJsInterface {/*** js中通过window.jsObj.HtmlcallJava2("参数") 可以调用此方法并且把js中input中的值作为参数传入,
* 但这是在点击js中的按钮得到的,若实现点击java中的按钮得到,需要方法 clickView(View v)
*
*@paramparam*/
public void HtmlcallJava2(finalString param) {
message=param;
String str=message;
StringTokenizer st= new StringTokenizer(str, ",;");while(st.hasMoreTokens()) {for (int i = 0; i < params.length; i++) {
params[i]=st.nextToken();
System.out.println(params[i]);
}
}
Toast.makeText(JSAndroidActivity.this, param, Toast.LENGTH_SHORT)
.show();
}
}/*** button的点击事件
*
*@paramv*/
public voidclickView(View v) {
runOnUiThread(newRunnable() {
@Overridepublic voidrun() {/*** 调用js中的方法实现点击java中的按钮得到js中input的值*/mWebView.loadUrl("javascript: showHtmlcallJava2()");
}
});
}
}