activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/base_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#fbfffc"
>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
MainActivity.java
package com.cfsuman.me.androidcodesnippets;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Context mContext;
private Activity mActivity;
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the application context
mContext = getApplicationContext();
mActivity = MainActivity.this;
// Get the widget reference from xml layout
mWebView = findViewById(R.id.web_view);
// Toast the current api level
Toast.makeText(mContext,"API LEVEL: "+Build.VERSION.SDK_INT,Toast.LENGTH_SHORT).show();
// Set the web view client
mWebView.setWebViewClient(new WebViewClient(){
// For api level bellow 24
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
Toast.makeText(mContext, "Old Method",Toast.LENGTH_SHORT).show();
if(url.startsWith("http")){
Toast.makeText(mContext,"Page link",Toast.LENGTH_SHORT).show();
// Return false means, web view will handle the link
return false;
}else if(url.startsWith("tel:")){
// Handle the tel: link
handleTelLink(url);
// Return true means, leave the current web view and handle the url itself
return true;
}
return false;
}
// From api level 24
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
Toast.makeText(mContext, "New Method",Toast.LENGTH_SHORT).show();
// Get the tel: url
String url = request.getUrl().toString();
if(url.startsWith("http")){
Toast.makeText(mContext,"Page link",Toast.LENGTH_SHORT).show();
// Return false means, web view will handle the link
return false;
}else if(url.startsWith("tel:")){
// Handle the tel: link
handleTelLink(url);
// Return true means, leave the current web view and handle the url itself
return true;
}
return false;
}
});
// Load the url into web view
//mWebView.loadUrl("https://paulund.co.uk/add-telephone-number-links-with-html5");
mWebView.loadUrl("https://developers.google.com/web/fundamentals/native-hardware/click-to-call/");
}
// Custom method to handle html tel: link
protected void handleTelLink(String url){
// Initialize an intent to open dialer app with specified phone number
// It open the dialer app and allow user to call the number manually
Intent intent = new Intent(Intent.ACTION_DIAL);
// Send phone number to intent as data
intent.setData(Uri.parse(url));
// Start the dialer app activity with number
startActivity(intent);
}
}

