Как позвонить в Android Activity из PhoneGap - PullRequest
8 голосов
/ 03 сентября 2011

Я новичок в PhoneGap и могу реализовать базовое приложение с PhoneGap, теперь, чтобы улучшить его, я хочу подключить PhoneGap к операциям Android, в основном я планирую вызвать метод startActivity () с помощью функции javascript.

Я пытался Связь между Android Java и Phonegap Javascript?

, но мне не удалось вызвать операцию, что вызвало ошибку принудительного закрытия.Помогите мне, ожидая ответа!

Ответы [ 4 ]

26 голосов
/ 13 сентября 2012

Любой вызов Java Native code вызывается без использования какого-либо плагина, как указано ниже.

Выполните следующие шаги.

  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. Добавьте пользовательскую функцию в текущее (это) действие следующим образом.

    public void customFunctionCalled() {
        Log.e("Custom Function Called", "Custom Function Called");
    }
    
  3. Теперь вызовите эту функцию из вашего HTML/ JavaScript код, как показано ниже.

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

Это вызовет 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

2 голосов
/ 22 сентября 2011

Трудно, не зная больше о том, что вы пытаетесь сделать, но идти по пути написания плагина - это, вероятно, путь. Проверить;

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

Этот плагин может работать для вас как есть, или дать вам хороший совет, как сделать это самостоятельно.

0 голосов
/ 08 ноября 2012

Я пробую то, что вы пытались сделать раньше, с обновлениями на phonegap до версии 2.0.0 и выше, лучший способ сделать это с плагином.Это js на phonegap в папке активов.Обязательно создайте элемент div с идентификатором «nativecall» и кнопкой-образцом для его обнаружения. Обязательно посмотрите 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.");
        }
    }
}
0 голосов
/ 15 марта 2012

Попробуйте создать плагины, вот пример некоторых плагинов https://github.com/phonegap/phonegap-plugins

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...