android中通过kotlin使用WebView

Posted 孤山独剑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中通过kotlin使用WebView相关的知识,希望对你有一定的参考价值。

  本文记录如何让网页中的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端:

 1 class MainActivity : AppCompatActivity() {
 2     class JsObject(var ctx: Context) {  //暴露给js的类
 3         @JavascriptInterface  //要想让js访问该类的方法,在方法上加个这,我也不知道是啥玩意
 4         fun call(n:String)
 5         {
 6             var intent=Intent(Intent.ACTION_DIAL).setData(Uri.parse("tel:" + n));
 7             startActivity(ctx,intent,null);
 8         }
 9     }
10     override fun onCreate(savedInstanceState: Bundle?) {
11         super.onCreate(savedInstanceState)
12         var web:WebView= WebView(this)
13         setContentView(web)
14         web.webViewClient=WebViewClient()
15         web.settings.setJavaScriptEnabled(true);//设置WebView允许它执行js代码
16         web.loadUrl("file:///android_asset/a.html")   //这个地方使用了本地资源
17         web.addJavascriptInterface(JsObject(this),"app")//暴露给js一个对象app,
18     }
19 }

  因为是学习不到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>

以上是关于android中通过kotlin使用WebView的主要内容,如果未能解决你的问题,请参考以下文章

Android Webview 文件和相机上传 - Kotlin

在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器

Android 在WebView中通过javascript获取网页源码,并在TextView或者在EditText中显示问题

如何使用 Android Kotlin 在 WebView 中加载 URL?

使用 Kotlin 的 Android Studio WebView“期望成员声明”

在 Swift 中通过 WebView 下载 .pdf 或 .ppt