ncuboy0wsq 2020-03-27
本文记录如何让网页中的JS代码和APP进行交互,简单的说就是如何在网页中执行APP的代码。下面以在网页中执行代码打开拨号键盘并输入电话号码为例介绍如何实现。
一、设置WebView允许它执行js代码。
二、通过调用WebView的addJavascriptInterface添加一个对象给js使用,添加完毕后在js里面相当于给window对象增加了一个子对象,比如addJavascriptInterface(obj,"app"),那么在js里面我们就可以直接使用app.来访问对象暴露给js的方法。
三、不要忘记在清单文件里面给app添加拨打电话权限,<uses-permission android:name="android.permission.CALL_PHONE" />
代码非常简单,就几行代码即可完成,注意不是完善的代码。
APP端:
class MainActivity : AppCompatActivity() { class JsObject(var ctx: Context) { //暴露给js的类 @JavascriptInterface //要想让js访问该类的方法,在方法上加个这,我也不知道是啥玩意 fun call(n:String) { var intent=Intent(Intent.ACTION_DIAL).setData(Uri.parse("tel:" + n)); startActivity(ctx,intent,null); } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) var web:WebView= WebView(this) setContentView(web) web.webViewClient=WebViewClient() web.settings.setJavaScriptEnabled(true);//设置WebView允许它执行js代码 web.loadUrl("file:///android_asset/a.html") //这个地方使用了本地资源 web.addJavascriptInterface(JsObject(this),"app")//暴露给js一个对象app, } }
因为是学习不到2天,很多东西都一知半解,顺便记录下如何把资源打包到APP里面,点击android studio 的file -> new -> Folder -> Assets Folder 弹出对话框选择一个路径,默认即可,这时工程文件里就多了一个assets文件夹,我们把网页文件a.html拷贝到这个文件夹里面在工程里它就自动出现了,我们就可以使用这个文件了,这个文件的路径是file:///android_asset/+文件名。不知道有没有别的办法可以添加资源,也不知道assets文件名字能改不?
a.html代码
<html> <head> <title>测试网页</title> </head> <body> hello </body> </html> <script language="JavaScript"> app.call("123456789"); </script>