本文記錄如何讓網頁中的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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/18490.html
標籤:Android
