Thursday, February 7, 2013

Call JavaScript inside WebView from Android activity, with parameter passed.




Sending Values Android Activity to Javascript have two solutiions

they are  1).Using Webview Object
              2).Using loadUrl Method



Solutions 1:

send values from Android activity to javascript function it is not difficult.just follow these steps

Step1: First create webview object in android layout
------
           
main.xml:     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                     xmlns:tools="http://schemas.android.com/tools"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     tools:context=".BeWithMeActivity" >
<!-- Here created webview object-->
                  <WebView
                   android:id="@+id/webview"
                   android:layout_width="fill_parent"
                   android:layout_height="fill_parent" />
    
                  <TextView
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_centerHorizontal="true"
                   android:layout_centerVertical="true"
                   android:text="@string/hello_world" />

               </RelativeLayout>


------

Step2:
                     Below code configured where we want call the javascript function

package com.asman.bwithme;
import org.apache.cordova.DroidGap;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.support.v4.app.NavUtils;

public class MainActivity extends DroidGap {

public WebView myWebView ;
 static String message;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        message = intent.getStringExtra(GCMIntentService.EXTRA_MESSAGE);
        System.out.println("message:::"+message);
        setContentView(R.layout.activity_main);
      //This code related calling javascript function
        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl("file:///android_asset/www/pushnotification.html");
        final MyJavaScriptInterface myJavaScriptInterface = new MyJavaScriptInterface(this);
        
   myWebView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
      
    
   }
   /** Responsible to call java script method
    * 
    *
    *
    */
   public class MyJavaScriptInterface {
   Context mContext;

      MyJavaScriptInterface(Context c) {
          mContext = c;
      }
  
      public void showToast(){
       System.out.println(message);
       myWebView.loadUrl("javascript:callFromActivity('" + message + "');");
      
          
      }
     
    
  }
}



             Here created Html page and javascript function

pushnotification.html:


step3:
---------------------
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Push Notification</title>
<script type="text/javascript" src="js/cordova-2.0.0.js"></script>
<script type="text/javascript" src="jquery.mobile-1.2.0/js/jquery.js"></script>
<script type="text/javascript" src="jquery.mobile-1.2.0/js/jquery.mobile-1.2.0.js"></script>
<script type="text/javascript" src="js/push.js"></script>
<link rel="stylesheet" href="jquery.mobile-1.2.0/css/jquery.mobile.structure-1.2.0.css" />       
        <link rel="stylesheet" href="jquery.mobile-1.2.0/css/jquery.mobile-1.2.0.css" />
      <link rel="stylesheet" href="css/main.css" />  
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=places">



function sendGcmIdToJS(){
AndroidFunction.showToast();
}

function callFromActivity(msg) {
//$("#mydiv").prepend(msg);
//document.getElementById("mydiv").value = msg;
 gcmId = id;
}




</script> 
       
</head>
<body onload="sendGcmIdToJS()">
<header class="title"> Banner </header>
<div data-role="button" data-inline="true" data-theme="b" class="role" onclick="accept()">Accept</div><br>
<!-- <p id="mydiv">data from notification::</p> -->
<input type="text" id="mydiv" style="width: 500px;height: 30px;"/>
<div data-role="button" data-inline="true" data-theme="b" class="role" onclick="denny()">Denny</div><br> 
<div id="dvTraceMap"></div>
</body>
</html>



Solution2:
-------------


Using super.loadUrl() method we can achive this functionality



My Activity.java:
----------------------


import org.apache.cordova.DroidGap;

import android.os.Bundle;

import android.view.Menu;

public class MainActivity extends DroidGap {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

             String Data="sending values to javascript";
  super.loadUrl("file:///android_asset/www/uploadPhoto.html?param="+Data);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}


uploadPhoto.html:
--------------------------



<!DOCTYPE html>

<html>

<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Vote My Paint</title>
<script src="jquery.mobile-1.2.0/js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/cordova-2.0.0.js"></script>
<!-- <script type="text/javascript" src="js/analytics.js"></script> -->

<link href="css/style_ipad.css" rel="stylesheet" type="text/css" />

<!-- <script type="text/javascript" charset="utf-8" src="js/InAppPurchaseManager.js"></script>
        <script type="text/javascript" charset="utf-8" src="js/asmanPlugin.js"></script> -->


<script type="text/javascript">
function pathInfoFromActivity()
          {
        var data=  getURLParameters("param");
alert(data);

           }


       function getURLParameters(paramName) 
{
var sURL = window.document.URL.toString();
if (sURL.indexOf("?") > 0)
{
var arrParams = sURL.split("?"); 
var arrURLParams = arrParams[1].split("&");
var arrParamNames = new Array(arrURLParams.length);
var arrParamValues = new Array(arrURLParams.length);
var i = 0;
for (i=0;i<arrURLParams.length;i++)
{
var sParam =  arrURLParams[i].split("=");
arrParamNames[i] = sParam[0];
if (sParam[1] != "")
arrParamValues[i] = unescape(sParam[1]);
else
arrParamValues[i] = "No Value";
}
for (i=0;i<arrURLParams.length;i++)
{
   if(arrParamNames[i] == paramName){
//alert("Param from activity:"+arrParamValues[i]);
return arrParamValues[i];
}
}
return "No Parameters Found";
}
}

</script>
</head>

<body onload="pathInfoFromActivity()">
</body>
</html>










4 comments:

  1. Hi,thanks for the tutorial it worked well for me

    ReplyDelete
  2. This is an awesome post.Really very informative and creative contents about Java. These concept is a good way to enhance the knowledge.I like it and help me to development very well.Thank you for this brief explanation and very nice information.Well, got a good knowledge.
    Java training in chennai | Java training in annanagar | Java training in omr | Java training in porur | Java training in tambaram | Java training in velachery

    ReplyDelete
  3. Very well written blog and I always love to read blogs like these because they offer very good information to readers with very less amount of words.keep it up!!!

    Android Training in Chennai

    Android Online Training in Chennai

    Android Training in Bangalore

    Android Training in Hyderabad

    Android Training in Coimbatore

    Android Training

    Android Online Training

    ReplyDelete