h5混合开发之Js和android简单交互
2017-03-15 17:13
399 查看
以后可能会用h5混合开发,所以趁着没事了解了下,把自己的见解以及遇到的问题记录下来。
先去网上找个demo跟着敲了下,主要学习如何交互,遇到一个问题,回调webview.getUrl()方法报了一个异常,要求所有的webview的方法运行在一个线程中,从网上找到了解决的方法。下面贴上代码,主要部分都有注释!
1.index.html
先去网上找个demo跟着敲了下,主要学习如何交互,遇到一个问题,回调webview.getUrl()方法报了一个异常,要求所有的webview的方法运行在一个线程中,从网上找到了解决的方法。下面贴上代码,主要部分都有注释!
1.index.html
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="UTF-8" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <script type="text/javascript"> function showToast(toast) { javascript:control.showToast(toast); } function log(msg){ var d= document.getElementById("d"); d.innerHTML=msg; } function share() { javascript:control.share(); } </script> </head> <body> <input type="button" value="toast" onClick="showToast('来自Js')"/> <div id="d">我是div</div> <input type="button" value="share" onClick="share()"/> </body> </html>2.MainActivity.java
package com.clem.h5demo; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.web_view); //解决点击链接跳转浏览器问题 webView.setWebViewClient(new WebViewClient()); //js支持 WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //允许访问assets目录 settings.setAllowFileAccess(true); //assets文件路径 String path = "file:///android_asset/index.html"; //注入自己写的交互接口,并且一个名字 webView.addJavascriptInterface(new JsInterface(), "control"); //加载Html页面 webView.loadUrl(path); } /* 点击返回上一个页面,而不是退出整个Activity 相当于后退操作的网页,而不是app */ @Override public void onBackPressed() { if (webView.canGoBack()) { webView.goBack(); } else { super.onBackPressed(); } } /* 自定义Js和Android交互接口 */ public class JsInterface { /* js调用的方法 */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show(); log("来自app"); } /* 向js输出信息的方法 */ public void log(final String msg) { webView.postDelayed(new Runnable() { @Override public void run() { webView.loadUrl("javascript: log(" + "'" + msg + "'" + ")"); } }, 3000); } /* 警告:所有的WebView方法必须调用在同一线程 使用webView.post(new Runnable()) */ @JavascriptInterface public void share() { // 如果在这个地方调用webview的方法就会报一个异常:要求webview的方法运行在同一个线程中 //结果 com.clem.h5demo E/当前线程: :11266 Log.e("当前线程", ":" + Thread.currentThread().getId()); webView.post(new Runnable() { @Override public void run() { //com.clem.h5demo E/主线程: :1 Log.e("主线程", ":" + Thread.currentThread().getId()); String url = webView.getUrl(); defaultShare(url); } }); /*//因为在主线程用的webview,所以也可以用下面这种方法 runOnUiThread(new Runnable() { @Override public void run() { String url = webView.getUrl(); defaultShare(url); } });*/ } } /* 工具:启用系统默认分享 */ private void defaultShare(String url) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); // intent.putExtra(Intent.EXTRA_SUBJECT, "标题"); intent.putExtra(Intent.EXTRA_TEXT, "你懂的" + url); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(Intent.createChooser(intent, "不知道")); } }
相关文章推荐
- 混合APP开发的套路(三): android和javascript初步交互(js调安卓)
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- 浅谈混合开发与Android,JS数据交互
- android h5 js 混合开发解决webview加载白屏,不加载网页的问题(硬件加速网页渲染,优化体验)
- Android与H5交互(混合开发)
- Android和H5(JS)简单交互
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- Android混合开发js与native交互两种方式
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- android webview H5开发若干问题之问题三:android和js交互问题
- Android混合开发 java和js交互
- android native+h5——混合开发初步,通过js交互数据
- Android和HTML5混合开发中android代码与JS交互
- android web混合开发 混合开发实例——JS与Java的交互
- Android 开发之 WebVIew 与 JS 交互
- b+c 模式 H5 与 Android 混合 开发详解
- Phonegap跨平台开发JS与Android的交互(本地)
- H5与android原生的JS交互
- JS H5界面简单交互