背景

这两天在做划词搜索时,需要让前端的js调用后端的Android方法,但总是调不成,经过搜索,问题解决,现记录成文。

 

解决方案

1、确定调用了webView.addJavascriptInterface()方法并且webView支持js

webView支持js是前提,设置方法:webView.getSettings().setJavascriptEnabled(true)

webView.addJavascriptInterface(object, string)方法用来给webview的网页绑定安卓端的对象。object就是安卓端的对象,string是这个对象在前端的名字

 

2、确定要调用的方法加了@JavascriptInterface注解,而且访问修饰符是public

如果js要调安卓端的某个方法,必须在安卓端的这个方法前加上@JavascriptInterface注解,而且,如果targetSdkVersion >= 17的话,还要加上@SuppressLint("JavascriptInterface")注解,而且要保证这些方法是公有的

 

3、考虑代码混淆

如果项目用了代码混淆,则要在项目的proguard-project.txt文件里声明下面几句话,保证混淆时@JavascriptInterface注解不被去掉

-keepattributes *JavascriptInterface*-keep class com.example.szc.TextSelectionHelper-keep class com.example.szc.TextSelectionHelper {public *;}

第一行表示保留JavascriptInterface注解

第二行是保持TextSelectionHelper类,因为我是在这个类里使用JavascriptInterface注解的

第三行表示保持这个类里所有公有字段,因为使用JavascriptInterface注解的方法只有是公有的,才有效

 

结语

解决思路就如上所示,我是通过第三步解决的,坑了一天才完事。

更多相关文章

  1. LayoutInflater的用法
  2. Android(安卓)DataBinding & MVVM
  3. 【Android】快速切换到主线程更新UI的几种方法
  4. Android(安卓)N Settings 架构剖析
  5. Android(安卓)四大组件流程、Handler、AsyncTask、IntentService
  6. Android(安卓)插件化分析(3)- Activity启动流程
  7. Android理解:IntentService
  8. 使用 Eclipse 调试 android 程序(debug 方法)
  9. 个人android工具包——androidkit更新

随机推荐

  1. Android原生下载管理相关记录
  2. Android > 浅谈获取时间
  3. Android VTS test
  4. Android多渠道打包解决方案(兰贝壳儿)
  5. Android安全检查之网络环境检测
  6. Android解决暴力点击方案
  7. android menu,activity,AlertDialog...
  8. android OkHttp3.0
  9. android 设置activity通用的全局变量(新手
  10. 用ant编译Android程序