How to call an Android Activity from PhoneGap

后端 未结 4 1094
北恋
北恋 2020-12-14 13:15

I am new to PhoneGap and I am able to implement the basic app with PhoneGap, now to enhance it further, I want to connect PhoneGap with Android Activities, basically what I

相关标签:
4条回答
  • 2020-12-14 13:44

    Any Java Native code call be called without using any plugin as following.

    Follow The following Steps.

    1. Replace the following code with your existing DroidGap Activity.

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          super.init(); // Calling this is necessary to make this work
          appView.addJavascriptInterface(this, "MainActivity");
      
          /* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */
      
          super.loadUrl("file:///android_asset/www/index.html");
      }
      
    2. Add the custom function in current (this) activity as following.

      public void customFunctionCalled() {
          Log.e("Custom Function Called", "Custom Function Called");
      }
      
    3. Now call this function from your HTML/JavaScript code as following.

      <script type="text/javascript">
          function callNewActivity() {
              window.MainActivity.customFunctionCalled();
          }
      </script>
      

    This will call customFunctionCalled() in MainActivity.

    Tested Environment Eclipse - 3.7.2 Android 2.2 Emulator PhoneGap - 2.0.0

    Please provide your comments here to improve blogs post. http://phonegapexplorers.blogspot.in/2012/08/call-native-java-code-phonegap-android.html

    0 讨论(0)
  • 2020-12-14 14:05

    Its hard without knowing more about what you're trying to do exactly, but going down the road of writing a plugin is probably the way to go. Check out;

    http://smus.com/android-phonegap-plugins

    This plugin might work for you as is, or give you good pointers in how to do this yourself.

    0 讨论(0)
  • 2020-12-14 14:05

    Try creating plugins, here are some plugins example https://github.com/phonegap/phonegap-plugins

    0 讨论(0)
  • 2020-12-14 14:06

    I try what you trying to do before, with updates on phonegap to version 2.0.0 and upward the best way to do is with plugin. This is the js on phonegap within assets folder. Make sure to construct div element with id "nativecall" and a sample button to do detect it.Be sure to watch LogCat to check error messages.

        window.echo = function(str, callback) {
        cordova.exec(callback, function(err) {
            callback('Nothing to echo.');
        }, "Echo", "echo", [str]);
    };
    
    var app = {
        // Application Constructor
        initialize: function() {
            this.bindEvents();
        },
        // Bind Event Listeners
        //
        // Bind any events that are required on startup. Common events are:
        // 'load', 'deviceready', 'offline', and 'online'.
        bindEvents: function() {
            document.addEventListener('deviceready', this.onDeviceReady, false);
        },
        // deviceready Event Handler
        //
        // The scope of 'this' is the event. In order to call the 'receivedEvent'
        // function, we must explicity call 'app.receivedEvent(...);'
        onDeviceReady: function() {
            app.receivedEvent('deviceready');
        },
        // Update DOM on a Received Event
        receivedEvent: function() {
    
            var abiter = $('#nativecall').html();
    
                $("#abutton").click(function () {
                        window.echo(abiter, function(echoValue) {
                        alert(echoValue = abiter); // should alert true.
                    });
                });
    
    
        }
    };
    
    app.initialize();
    

    on src add new class method with service name "Echo".

        package org.apache.cordova.plugin;
    
    import org.apache.cordova.api.CallbackContext;
    import org.apache.cordova.plugin.AndroidActivities;
    import org.apache.cordova.api.CordovaPlugin;
    import org.json.JSONArray;
    import org.json.JSONException;
    
    /**
     * This class echoes a string called from JavaScript.
     */
    public class Echo extends CordovaPlugin {
        @Override
        public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
            if (action.equals("echo")) {
                String message = args.getString(0);
                new AndroidPublicFunction(message); //call function from AndroidActivities
                this.echo(message, callbackContext);
                return true;
            }
            return false;
        }
    
        private void echo(String message, CallbackContext callbackContext) {
            if (message != null && message.length() > 0) { 
                callbackContext.success(message);
            } else {
                callbackContext.error("Expected one non-empty string argument.");
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题