在 WebView 裡面有撥電話的連結
使用類似下面這樣的 html 碼
<a href="tel:0288888888">0288888888</a>
點下連結時 Android 會叫出撥號介面並且自動將號碼填進去
使用者只要按下撥號鍵就可以撥出
不過要是電話號碼有分機資訊時
我們需要的電話號碼可能是 0288888888,123 這樣的格式(","代表暫停兩秒)
使用上述方法叫出撥號介面的話
Android 會把","及其後面的號碼都給去掉
為此我做了一些測試
發現如果是透過 Intent.ACTION_DIAL 叫出撥號介面會出現一樣情形
但是 Intent.ACTION_CALL 直接撥號可以正常撥出分機
所以只要我讓 WebView 呼叫 java
透過 Intent.ACTION_CALL 直接撥號
就可以解決分機的問題了
那要怎麼做呢?
就是用 addJavascriptInterface 這個方法
把要做的事情寫在一個對應 Object 的 method 裡面
MyObj myObj = new MyObj(); public class MyObj{ //After API 17, you will have to annotate each method with @JavascriptInterface within your class that you'd like to access from Javascript. @JavascriptInterface public void telext(String telStr) { Uri uri = Uri.parse("tel:"+telStr); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent); } }
在 WebView 載入資料前要指定對應的 Obj
//打開 JavaScriptEnabled 並加入對應物件 myWebView.getSettings().setJavaScriptEnabled(true); myWebView.addJavascriptInterface(myObj, "myObj");
addJavascriptInterface 需要傳入兩個參數
第一個是 Object 物件,第二個是 javascript 呼叫時的名稱
載入的 html 就可以用類似這樣的方式呼叫 java
<a href="#" onClick="window.myObj.telext('"+sContactTel+"');\">sContactTel</a>
沒有留言:
張貼留言