Call a unity script function from android java code?

I have a game which has lot of C# scripts in Unity. From one of the scripts I call android Java code which works fine using AndroidJavaObject. But I am not able to call a C# function back(needs to be a callback) from Java Code.
Went through this link and able to create a simple app which contain one C# file
http://forum.unity3d.com/threads/78598-Android-Plugin-Call-C-from-Java

My C# file contain function =>void JavaMessage(string message)

Was able to call this using => UnityPlayer.UnitySendMessage(“Main Camera”, “JavaMessage”, “Message to send”);

But when i tried calling same thing in complete game project which contains Main Camera, GUI2D, Preloads etc and many C# script none of the below was able to make a call to C# function

UnityPlayer.UnitySendMessage(“Main Camera”, “JavaMessage”, “Message to send”);

UnityPlayer.UnitySendMessage(“CallJavaCode”, “recieve”, “Message to send1”);

CallJavaCode is C# file name or class name.

C# Code

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
using System;

public class CallJavaCode : MonoBehaviour {

private static AndroidJavaObject _admobPlugin;

void OnGUI ()
{
	if (GUI.Button(new Rect (15, 125, 450, 100), "Push button To call Java code"))
	{
		Screen.sleepTimeout = SleepTimeout.NeverSleep;
		
		Debug.Log("BeforeCalling Java Function : getURL");
		
		using(var pluginClass = new AndroidJavaClass("com.example.helloworld.TestApp"))
			_admobPlugin = pluginClass.CallStatic("instance");
		_admobPlugin.Call("getURL","Shashank");
		Debug.Log("After Calling Java Function: getURL");
	}
}

void recieve(string message){
	Debug.Log("On recieve message: getURL");
	Debug.Log(message);
	
}

}

Java Code

public class TestApp {

public static TestApp m_instance;
private UnityPlayer mUnityPlayer;

public static TestApp instance(){
	if(m_instance == null)
		m_instance = new TestApp();
	return m_instance;
}

private TestApp(){
	
}

private void getURL(String message){
	Log.d("Unity","This is onbuttonclickresponse =>"+ message);
	UnityPlayer.UnitySendMessage("Main Camera", "JavaMessage", "Message to send");
	
}

}

function UnityPlayer.UnitySendMessage 's first param should be the gameobject name in scene,
this gameobject should have a script which contains a function named “JavaMessage”

I got the same issue , Kindly suggest something

Please check below my script File and UnityPlayerActivity :-

using UnityEngine; 
using System.Collections; 
 
public class scriptfile : MonoBehaviour { 
 
    // Use this for initialization 
    void Start () { 
 
 
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
        jo.Call("shareText","236","236");
    } 
 
    public void OnGUI(){ 
    } 
 
    // Update is called once per frame 
    void Update () { 
 
    } 
 
    void showMessage(string message){
 
        print ("hello"); 
        Debug.Log ("hello");
 
 
 
    } 
 
} 

UnityPlayerActivity

/** 
 * Created by CH-E01073 on 28-09-2015. 
 */ 
public class MainAct extends UnityPlayerActivity implements RegistrationListener,BOffersListener { 
    Context context;
    SharedPreferences prefs ;
    String AppIds="";
    String PublisherIDs="";
     public void shareText(String AppId,String PublisherID) {
       context=MainAct.this;
        prefs = PreferenceManager
               .getDefaultSharedPreferences(context);
       Log.e("AppID", AppId);
       Log.e("PublisherID",PublisherID);
 
        AppIds=AppId;
        PublisherIDs=PublisherID;
 
         runOnUiThread(new Runnable() {
             @Override 
             public void run() { 
                 UnityPlayer.UnitySendMessage("Main Camera","showMessage","Start UI Thread"); 
                 if (prefs.getString(FreeBConstants.ID, null) == null
                         || prefs.getString(FreeBConstants.ID, null).equals("")
                         || !Build.VERSION.RELEASE.equals(prefs.getString(
                         FreeBConstants.VERSION, null)) 
                         || !FreeBCommonUtility.getDeviceId(context).equals(
                         (prefs.getString(FreeBConstants.DEVICE_ID, null)))) {
                BSDKLogger.enableLogging(true); 
                SDKRegistration.initialize(MainAct.this, getApplicationContext(), AppIds,PublisherIDs);
                 }else{ 
 
                Offers Offers = new Offers(MainAct.this);
                 Offers.setOnFreeBOffersListener(MainAct.this);
                 Offers.setTitle(
                         "Pick Any Offer to unlock your premium features", 
                         "#FFFFFF", "#FF6D00"); 
                 } 
         } 
         }); 
 
 
 
    } 
 
    @Override 
    public void onOffersLoaded(String code,String freeBOffers) {
        CommonUtility.showToast(getApplicationContext(), code);
        UnityPlayer.UnitySendMessage("Main Camera","showMessage",freeBOffers);
    } 
 
    @Override 
    public void onShowOffers() { 
 
         UnityPlayer.UnitySendMessage("Main Camera","showMessage","Show Offers"); 
    } 
 
    @Override 
    public void noOfferInstalled(String s, String s2) {
    } 
 
    @Override 
    public void onLeaveApplication(String s, String s2) {
    } 
 
    @Override 
    public void onDialogDismiss(String s) {
    } 
 
    @Override 
    public void onOffersFailed(String code, String errorMessage) {
 
        FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);
        UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
    } 
 
    @Override 
    public void onOffersInstallSuccess(String code, String errorMessage) {
         FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);
    } 
 
    @Override 
    public void onOffersInstallFailure(String code, String errorMessage) {
         FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);
    } 
 
 
    @Override 
    public void onRegistrationFailed(String code, String errorMessage) {
        FreeBCommonUtility.showToast(getApplicationContext(), errorMessage);
        UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
    } 
 
    @Override 
    public void onRegistrationSuccess(String code, String errorMessage) {
      // FreeBCommonUtility.showToast(getApplicationContext(), errorMessage); 
        Log.e("SUCCESS", errorMessage);
        // TODO Auto-generated method stub 
        UnityPlayer.UnitySendMessage("Main Camera","showMessage",errorMessage);
 
        Offers Offers = new Offers(MainAct.this);
        Offers.setOnFreeBOffersListener(MainAct.this);
       Offers.setTitle(
             "Pick Any Offer to unlock your premium features", 
              "#FFFFFF", "#FF6D00"); 
    } 
} 

Reference Link for More Detail :-