Android和HTML5混合开发
2016-11-05 12:57
183 查看
Android和HTML5混合开发,废话不多说开干:
下面HTML代码:
location.href:是的html转场景
dmr:getiphone:是Android端和HTML端定义的协议;定义需要Android和HTML自定义一个为协议,是两端之间的通信协议;
下面是Android代码:
public boolean shouldOverrideUrlLoading(WebView view, String url):在点击HTML点击按钮发送转场指令的时候,Android拦截HTML的指令,处理命令
mWebView.loadUrl("javascript:callback(15755170689)");回调给HTML页面,就是把Android处理好的信息给HTML显示处理等等
上面只是描述一个简单的原理,有兴趣的话可以把WebView简单的自定义一下,处理成一个小控件
希望对大家有帮助,谢谢
下面HTML代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hello world</title> <style type="text/css"> input{ width: 100%; margin: 20px; margin-right: 20px; height: 200px; font-size: 50px; background: #00ff00; color: #fff; } #input{ background: #fff ; color: #000; border:0px; } </style> </head> <body> <input type="button" name="开启系统照相机" value="开启系统照相机" onclick="onclicks()"> <input type="button" name="" value="获取电话号码" onclick="getiphone()"> <input type="text" name="text" id="input"> <script type="text/javascript"> function getiphone() { location.href="dmr:getiphone"; } function onclicks() { //alert("这几是web的alert弹框!!!"); location.href = 'dmr:showcamera'; } function callback(ihpone) { document.getElementById("input").value="电话号码是:"+ihpone; //alert("电话号码是:"+ihpone); } function js(hello) { alert(hello+""); } </script> } </body> </html>
location.href:是的html转场景
dmr:getiphone:是Android端和HTML端定义的协议;定义需要Android和HTML自定义一个为协议,是两端之间的通信协议;
下面是Android代码:
package com.vson.webapp; import android.content.Intent; import android.graphics.Bitmap; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private String TAG="MainActivity"; private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView= (WebView) findViewById(R.id.WebView); WebSettings webSettings = mWebView.getSettings(); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(true); webSettings.setSavePassword(false); webSettings.setSaveFormData(false); webSettings.setGeolocationEnabled(true); mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null);//设置硬件加速 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); webSettings.setLoadWithOverviewMode(true); //开浏览器 localStorage 存储用的 webSettings.setDomStorageEnabled(true); webSettings.setSupportZoom(false); mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new MyWebViewClient()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mWebView.setWebContentsDebuggingEnabled(true); } mWebView.loadUrl("http://192.168.1.104:3000/index.html"); } public void onClickButton(View v) { String str ="你好"; mWebView.loadUrl("javascript:js('"+str+"')"); } public class MyWebViewClient extends WebViewClient{ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { /** * 规则是所有的指令都是以dmr:开头; * dmr:showcamera ->展示摄像头 * dmr:getiphone ->拿到电话号码 * * */ if(url.startsWith("dmr:")) { if("showcamera".equals(url.substring(4))) { Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivity(intent); return true; }else if("getiphone".equals(url.substring(4))) { mWebView.loadUrl("javascript:callback(15755170689)"); return true; } } //Log.d(TAG, "shouldOverrideUrlLoading: "+url); return super.shouldOverrideUrlLoading(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); } } }
public boolean shouldOverrideUrlLoading(WebView view, String url):在点击HTML点击按钮发送转场指令的时候,Android拦截HTML的指令,处理命令
mWebView.loadUrl("javascript:callback(15755170689)");回调给HTML页面,就是把Android处理好的信息给HTML显示处理等等
上面只是描述一个简单的原理,有兴趣的话可以把WebView简单的自定义一下,处理成一个小控件
希望对大家有帮助,谢谢
相关文章推荐
- Android-Java和HTML5交互-混合开发-优化
- HTML5:网易博客Android客户端 — native+html5移动应用混合开发实践
- Android+Html5混合开发仿微信朋友圈
- Android Java和js互调案例演示(HTML5混合开发)
- Android混合开发,html5自动更新爬过的坑
- Android和HTML5混合开发中android代码与JS交互
- Android-Java和HTML5交互-混合开发-优化
- html5开发全屏android软件
- 【转】利用HTML5开发Android
- android web应用开发之——HTML5 Storage API
- Android应用开发新路线,利用HTML5开发Android应用程序
- html5开发android应用
- 20岁印度工程师谈HTML5、CSS3开发Android和iOS应用--各语言开发安卓工具
- Android客户端 — native+html5移动应用混合开发
- HTML5开发岗位猛增44% iOS增速不及Android-htm5来了
- HTML5开发岗位猛增44%,iOS增速不及Android
- html5 开发 android 注意点
- 利用HTML5开发Android应用程序 PPT
- html5 开发android
- Android and HTML5 开发手机应用