hybrid App开发也不是什么新鲜事了,其中native和h5之间的交互则是必不可少的。Android中是如何和H5交互的?

1、webView加载页面

我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同:

//例如:加载assets文件夹下的test.html页面mWebView.loadUrl("file:///android_asset/test.html")//例如:加载网页mWebView.loadUrl("http://www.baidu.com")

如果只是这样调用mWebView.loadUrl()加载的话,那么当你点击页面中的链接时,页面将会在你手机默认的浏览器上打开。那如果想要页面在App内中打开的话,那么就得设置 setWebViewClient:

mWebView.setWebViewClient(new WebViewClient() {        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {                mWebView.loadUrl(url);                return true;            }        }    });

2、Android本地通过Java调用HTML页面中的JavaScript方法

想要调用js方法那么就必须让webView支持

    WebSettings webSettings = mWebView.getSettings();    //设置为可调用js方法    webSettings.setJavaScriptEnabled(true);

若调用的js方法没有返回值,则直接可以调用 mWebView.loadUrl("javascript:do()"); 其中do是js中的方法;若有返回值时我们可以调用 mWebView.evaluateJavascript() 方法:

 mWebView.evaluateJavascript("sum(1,2)", new ValueCallback() {        @Override        public void onReceiveValue(String value) {            Log.e(TAG, "onReceiveValue value=" + value);        }    });

js代码如下:


3、js调用Android本地Java方法

在Android4.2以上可以直接使用@JavascriptInterface注解来声明,下面是在一个本地Java方法

public class JsInteration {    @JavascriptInterface    public String back() {        return "hello world";    }}

定义完这个方法后再调用 mWebView.addJavascriptInterface() 方法:

 mWebView.addJavascriptInterface(new JsInteration(), "android");

那么在js中怎么来调用呢?

4、拦截HTML页面中的点击事件

mWebView.setWebViewClient(new WebViewClient() {        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {            //判断url拦截事件            if (url.equals("file:///android_asset/test2.html")) {                Log.e(TAG, "shouldOverrideUrlLoading: " + url);                startActivity(new Intent(MainActivity.this,Main2Activity.class));                return true;            } else {                mWebView.loadUrl(url);                return false;            }        }    });

以上就是Java调用js方法以及js调用Java方法的实现交互方式中的一种。下面给出完整代码:
mainActivity

public class MainActivity extends AppCompatActivity {public static final String TAG = "MainActivity";private WebView mWebView; @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mWebView = (WebView) findViewById(R.id.webView);    mWebView.loadUrl("file:///android_asset/test.html");    WebSettings webSettings = mWebView.getSettings();    webSettings.setJavaScriptEnabled(true);    mWebView.addJavascriptInterface(new JsInteration(), "android");    mWebView.setWebViewClient(new WebViewClient() {        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {            if (url.equals("file:///android_asset/test2.html")) {                Log.e(TAG, "shouldOverrideUrlLoading: " + url);                startActivity(new Intent(MainActivity.this,Main2Activity.class));                return true;            } else {                mWebView.loadUrl(url);                return false;            }        }    });}//Android调用有返回值js方法@TargetApi(Build.VERSION_CODES.KITKAT)public void onClick(View v) {     mWebView.evaluateJavascript("sum(1,2)", new ValueCallback() {        @Override        public void onReceiveValue(String value) {            Log.e(TAG, "onReceiveValue value=" + value);        }    });}public class JsInteration {     @JavascriptInterface    public String back() {        return "hello world";    }}}

test.html

点击

 

更多相关文章

  1. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedA
  2. [Android]LayoutInflater的inflate方法半详解
  3. 「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、
  4. Android与Unity交互调用mUnityPlayer.quit()方法退出返回上一个A
  5. Android与H5实现页面交互
  6. Unity3D调用android方法(非插件方式)
  7. Android事件处理方法总结-Handler消息处理

随机推荐

  1. Android之AndroidStudio生成jar
  2. Android-横屏应用在竖屏情况下解锁引起销
  3. Android 面试题总结之Android 基础(五)
  4. Project Volta 让 Android 续航提升了多
  5. android:id="@+id/title"、android:id="@
  6. android 管理手机短信
  7. Android 鲜为人知的 8 个小秘密
  8. android企业级商城源码、360°全景图VR源
  9. Android必备:Android UI控件的了解与学习
  10. Android渗透测试Android渗透测试入门教程