Android 与H5交互的小Demo
来源:互联网 发布:辐射4捏脸数据 美女 编辑:程序博客网 时间:2024/06/05 09:23
Android与H5交互
最近H5与Android交互,混合型开发看样子很火啊,平时也只是听说,都没有实际的去玩过,正好今天玩了玩,并不是很难啊,今天就记录下来步骤,方便以后直接查看
Web View确实是Android提供的一个很强大的控件啊,以前用的不多,现在才发现它的功能确实不可小觑
WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);
想要与H5交互,这步还真的必不可少
//加载assets文件夹下的test.heml页面webView.loadUrl("file:///android_asset/test.html");
这步就是加载assets文件夹下的HTML文件
当让就这样的话,也是用你手机里的浏览器去打开的,想要用本App去加载的话还要设置WebViewClient
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { webView.loadUrl(url); return true; }});
这样我们写的App就能去加载网页了
说到交互,就是H5里面的代码和本地Java代码互相调用嘛,那就先定义个让H5 去调用的方法
private class JsInteration { @JavascriptInterface public String back(){ return "hello world"; }}
记得加上注解,这个注解的功能语义上就已经很明显了
接着,Java代码中调用WebView的一个方法
webView.addJavascriptInterface(new JsInteration(),"android");
这样在H5里面我们就可以调用Java本地方法了,第二个参数嘛,随便起,只要和H5里面的代码想对应就行,代码在后面会展示滴
接着就来看Java是怎么调用JS的吧
调用JS的基本格式为 webView.loadUrl("javascript:methodName(parameterValues)");
比方说我们调用没有返回值的方法
webView.loadUrl("javascript:do()");
webView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() { @Override public void onReceiveValue(String s) { Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show(); }});
如果说JS里面的方法是带返回值的,也可直接调用evaluateJavascript()就行了,个人比较喜欢用这个
MainActivity.class
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView= (WebView) findViewById(R.id.webview); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //加载assets文件夹下的test.heml页面 webView.loadUrl("file:///android_asset/test.html"); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { webView.loadUrl(url); return true; } }); webView.addJavascriptInterface(new JsInteration(),"android");}@TargetApi(Build.VERSION_CODES.KITKAT)public void onClick(View view){ webView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() { @Override public void onReceiveValue(String s) { Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show(); } });}private class JsInteration { @JavascriptInterface public String back(){ return "hello world"; }}
test.html
<html><head> <title></title> <script type="text/javascript"> function sum(a,b){ return a+b; } function s(){ var result=window.android.back(); document.getElementById("p").innerHTML=result; } </script></head><body><button onclick="s()">调本地方法</button><a href="www.baidu.com">点击</a><p id="p"></p></body></html>
0 0
- Android 与H5交互的小Demo
- Android与H5的交互
- Android与H5的交互
- Android与H5的交互
- Android与H5的交互
- android与H5的交互
- Android与H5交互
- Android与H5交互
- Android与H5交互
- android与h5交互
- Android与h5交互
- Android 与H5交互
- Android与H5交互
- Android与h5交互
- Android与H5交互
- android与h5交互
- Android与H5的交互问题
- H5与android原生的JS交互
- 用Babel解决node.js运行ES6的问题
- linux下postgresql的备份与恢复
- µC/OS-II在80x86上的移植
- 群体遗传学--近交系数
- Defense Lines UVA
- Android 与H5交互的小Demo
- Mac下通过Homebrew安装redis
- libgcrypt使用举例
- 网狐6603 框架
- Java hashcode浅析
- Apache+PHP
- title: JavaFx自定义Tab-Order
- Ubuntu下忘记MySQL root密码解决方法
- 显示权限的名称