当前位置:   article > 正文

Android与H5相互接口调用及Android端接口整理_h5开发本地程序调用安卓串口

h5开发本地程序调用安卓串口

 

近几年随着HTML5的功能越来越强大,H5页面的性能虽然稍差,单其灵活性很高,更新页面成本比原生小很多,一个页面可以被android和ios同时使用开发成本也比较低,所以移动端的开发已经不是单单的原生开发了,于是乎这就避免不了会进行Android和H5的交互。


一、H5调用android接口。

js 中调用Android的方法

  1. //H5中调用Android的方法
  2. function myOnclick(){
  3. //调用android本地方法 ,方法由Android提供 (具体对象名和方法待定,可变更)
  4. mobile.callAndroid("给Android传递的数据");
  5. }

 android给webView添加js接口

  1. //设置编码
  2. mWebView.getSettings().setDefaultTextEncodingName("utf-8");
  3. //支持js
  4. mWebView.getSettings().setJavaScriptEnabled(tr
  5. //设置本地调用对象及其接口
  6. //第一个参数为实例化自定义的接口对象 第二个参数为提供给JS端调用使用的对象名
  7. mWebView.addJavascriptInterface(new Contact
  8. @JavascriptInterface //必须加的注解
  9. @Override
  10. public void openActivityByPath(String path) {//android给H5开的接口
  11. Intent intent = new Intent();
  12. intent.setClassName(mActivity, path);
  13. mActivity.startActivity(intent);
  14. }
  15. }, "mobile");
  16. //定义接口,提供给JS调用
  17. interface Contact {
  18. @JavascriptInterface
  19. void callAndroid(String phone);
  20. }


二、android调用H5接口。

js给android提供的接口

  1. //H5给Android提供的方法
  2. function callH5(data){
  3. document.getElementById("result").innerHTML="result success for Android to:"+data;
  4. }

android在点击事件中调用js接口 

  1. findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. //Android调用Js方法
  5. mWebView.loadUrl("javascript:callH5('Android给H5传递的参数')");
  6. }
  7. });


三、android接口简单整理。

如果js接口过多会导致对webView的配置过长,影响代码的可读性和维护性,可以把给h5提供的接口都提取到一个类里,在webView 的配置中这样代码就清晰了很多。

  1. AndroidJsUtils mAndroidJsUtils = new AndroidJsUtils(DoWebViewActivity.this);
  2. mWebView.addJavascriptInterface(mAndroidJsUtils, "mobile");

 接口类

  1. public class AndroidJsUtils implements Serializable {
  2. private BaseActivity mActivity; //工程的baseActivity
  3. public AndroidJsUtils(BaseActivity activity) {
  4. this.mActivity = activity;
  5. }
  6. /**
  7. * 打开任意页面
  8. * @param path 页面的完整路径例如:"com.xiaoxiao9575.demo.activity.DemoActivity"
  9. */
  10. @JavascriptInterface
  11. public void openActivityByPath(String path) {
  12. Intent intent = new Intent();
  13. intent.setClassName(mActivity, path);
  14. mActivity.startActivity(intent);
  15. }
  16. }


四、WebView统一设置。

如果项目中有多个页面都用到了webView,各自配置维护起来就比较麻烦了,可以采用下面的方式统一配置。

  1. /**
  2. * author: xiaoxiao9575
  3. * email: xiaoxiao9575@126.com
  4. * csdn: https://blog.csdn.net/weixin_40998254
  5. * createTime: 2019/4/11 10:09 AM
  6. */
  7. public class MyBaseWebView extends WebView {
  8. private AndroidJsUtils mAndroidJsUtils;
  9. public MyBaseWebView(Context context) {
  10. super(context);
  11. }
  12. public MyBaseWebView(Context context, AttributeSet attrs) {
  13. super(context, attrs);
  14. }
  15. public MyBaseWebView(Context context, AttributeSet attrs, int defStyleAttr) {
  16. super(context, attrs, defStyleAttr);
  17. }
  18. @SuppressLint("SetJavaScriptEnabled")
  19. public void initWebViewSetting(Activity activity){
  20. final WebSettings mWebSettings = this.getSettings();
  21. mWebSettings.setJavaScriptEnabled(true);
  22. this.setOverScrollMode(View.OVER_SCROLL_NEVER);
  23. mWebSettings.setDefaultTextEncodingName("utf-8");
  24. mWebSettings.setUseWideViewPort(true);
  25. mWebSettings.setLoadWithOverviewMode(true);
  26. mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
  27. mWebSettings.setDomStorageEnabled(true);
  28. mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  29. mWebSettings.setNeedInitialFocus(false);
  30. mWebSettings.setAllowFileAccess(true);
  31. mWebSettings.setAppCacheEnabled(true);
  32. mWebSettings.setAllowFileAccessFromFileURLs(true);
  33. mWebSettings.setDatabaseEnabled(true);
  34. String dbPath = activity.getDir("database", Context.MODE_PRIVATE).getPath();
  35. mWebSettings.setDatabasePath(dbPath);
  36. mWebSettings.setAppCachePath(dbPath);
  37. mWebSettings.setAppCacheMaxSize(5 * 1024 * 1024);
  38. mWebSettings.setGeolocationEnabled(true);
  39. mWebSettings.setGeolocationDatabasePath(dbPath);
  40. //不显示webview缩放按钮
  41. mWebSettings.setDisplayZoomControls(false);
  42. if (Build.VERSION.SDK_INT >= 21) {
  43. mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
  44. }
  45. mAndroidJsUtils = new AndroidJsUtils(activity);
  46. this.addJavascriptInterface(mAndroidJsUtils, "mobile");
  47. }
  48. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/163597?site
推荐阅读
相关标签
  

闽ICP备14008679号