Web to native code communication on Android using JavaScript Interfaces

Javascript Interface can be helpful when you need to call native code from a webview on Android.

In a previous post I described how you can call native Swift code from the JavaScript code of web page loaded inside a . Today I will show you how to achieve the same result for tan Android Apps. I will a part of the Android SDK called .


I will use the same simple I used in the previous post for iOS. The html page contains a form with 2 input fields and a button. We want to be able to read the form data inserted when the user clicks on the button and do some action on the Java code side. In this sample case we will show a simple that contains the form data. Let's start by setting up the that will display the form, . The first thing to do is to setup the by declaring it in the activity layout. After that we can already setup the code that will load the web page in the method of the .

public class MainActivity extends AppCompatActivity {@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
protected void onCreate(Bundle savedInstanceState) {
WebView formWebView = findViewById(R.id.webview);
new FormJavascriptInterface(this), "Android"

The important thing to note in the code above is the call . By calling this method we are creating on the global javascript variable a new object called . I will be able to use it by calling . Where are this method declared? As you can see the first parameter of the method is an object called . This class contains a method named annotated with . This annotation enable the Android SDK to expose this method to the object exposed on the web side.

public class FormJavascriptInterface {
private Context context;
FormJavascriptInterface(Context context) {
this.context = context;

public void showUser(String name, String email) {
new AlertDialog.Builder(context)
.setMessage(name + " " + email)

So as you can imagine now I’m able to call the method inside the html page loaded in the . Let's see the final implementation of the web page.

<!DOCTYPE html>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum
scale=1.0, user-scalable=no" />
<script type="text/javascript">
function submitForm() {
<h2>Enter your data:</h2>
<label for="email">Email:</label>
<input type="email"
placeholder="Enter email"
<label for="name">Name:</label>
<input type="value"
placeholder="Enter name"
<button onclick="submitForm()">Click me</button>

As you can see in the submit form we are calling the method we saw before annotated . The parameter are passed as a normal JavaScript call.
You can find the complete code example in this github repository.


The is really powerful. It lets you implement a deeper web to native integration that could significantly improve the general user experiences. , the best web to native integration for 🤖Android 🤖.

Originally published at https://www.fabrizioduroni.it on September 5, 2019.

I'm a software developer 🤓. I ❤️ mobile application development, computer graphics and web development. I ❤️ computers. https://www.fabrizioduroni.it/

I'm a software developer 🤓. I ❤️ mobile application development, computer graphics and web development. I ❤️ computers. https://www.fabrizioduroni.it/