如何从PhoneGap调用Android活动

时间:2011-09-03 10:25:05

标签: javascript android cordova android-activity

我是PhoneGap的新手,我能够使用PhoneGap实现基本应用程序,现在进一步增强它,我想将PhoneGap与Android活动连接,基本上我计划使用javascript函数调用startActivity()方法

我尝试了Communication between Android Java and Phonegap Javascript?

但是我没有调用某个活动,导致强制关闭错误。 帮帮我,等待回复!

4 个答案:

答案 0 :(得分:26)

在不使用任何插件的情况下调用任何Java Native代码调用。

按照以下步骤操作。

  1. 将以下代码替换为现有的DroidGap活动。

    @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. 在当前(this)活动中添加自定义函数,如下所示。

    public void customFunctionCalled() {
        Log.e("Custom Function Called", "Custom Function Called");
    }
    
  3. 现在从您的HTML / JavaScript代码中调用此函数,如下所示。

    <script type="text/javascript">
        function callNewActivity() {
            window.MainActivity.customFunctionCalled();
        }
    </script>
    
  4. 这会在customFunctionCalled()中调用MainActivity

    经过测试的环境 Eclipse - 3.7.2 Android 2.2模拟器 PhoneGap - 2.0.0

    请在此处提供您的评论以改进博客帖子。 http://phonegapexplorers.blogspot.in/2012/08/call-native-java-code-phonegap-android.html

答案 1 :(得分:2)

很难知道你正在努力做的事情,但是在编写插件的道路上可能是要走的路。退房;

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

这个插件可能对你有用,或者你自己如何做好指示。

答案 2 :(得分:0)

尝试创建插件,这里有一些插件示例https://github.com/phonegap/phonegap-plugins

答案 3 :(得分:0)

我尝试过你之前尝试做的事情,将phonegap更新到2.0.0及更高版本,最好的方法是使用插件。这是资产文件夹中的phonegap上的js。确保构造id为“nativecall”的div元素和一个检测它的示例按钮。确保观察LogCat以检查错误消息。

    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();

在src上添加服务名称为“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.");
        }
    }
}