Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • Calling application methods from WebView in android

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 244
    Comment on it

    Sometimes it is required to show useful information to the user in android App and in that case,WebView is very useful.But to access WebView,we need to develop a two-way connection between application and WebView.

    Here I will show you the best way to develop the connection using Javascript.

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical">
    
            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/click_me" />
        </LinearLayout>
    
        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/container" />
    
    </RelativeLayout>

    MainActivity.java

    1. Firstly onCreate method of class

      webView = (WebView) findViewById(R.id.webView);
      button = (Button) findViewById(R.id.button);
      
      webView.getSettings().setJavaScriptEnabled(true);
      
      // Add the custom WebViewClient class
      webView.setWebViewClient(new CustomWebViewClient());
      
      // Add the javascript interface
      webView.addJavascriptInterface(new JavaScriptInterface(), "interface");
      
      // Load the example html file to the WebView
      webView.loadUrl("file:///android_asset/index.html");
      
      button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
      
              webView.loadUrl("javascript:(function() { callFromApp();})()");
          }
      });
    2. CustomWebViewClient method:

      private class CustomWebViewClient extends WebViewClient {
      
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
      
              // If the url to be loaded starts with the custom protocol, skip
              // loading and do something else
              if (url.startsWith("myApp://")) {
      
                  Toast.makeText(MainActivity.this, "Yipee..", Toast.LENGTH_LONG).show();
      
                  return true;
              }
      
              return false;
          }
      }

      3.JavaScript Interface method:

    private class JavaScriptInterface {
    
        @JavascriptInterface
        public void callFromJS() {
            Toast.makeText(MainActivity.this, "JavaScript interface call", Toast.LENGTH_LONG).show();
        }
    }

    Make asset folder in application and put html file in it and name it as index.html.Now the two way connection is ready and on button click ,you can check for the result u want.

     

    Note-The name of your file u put in asset folder should have the same name which u used while loading url in webView.

     

    That's all there.Hope it helps

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: