本文記錄如何讓網頁中的JS代碼和APP進行交互,簡單的說就是如何在網頁中執行APP的代碼。下麵以在網頁中執行代碼打開撥號鍵盤並輸入電話號碼為例介紹如何實現。 一、設置WebView允許它執行js代碼。 二、通過調用WebView的addJavascriptInterface添加一個對象給js使用,添 ...
本文記錄如何讓網頁中的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>