Javascript 如何从PhoneGap调用Android活动

Javascript 如何从PhoneGap调用Android活动,javascript,android,cordova,android-activity,Javascript,Android,Cordova,Android Activity,我是PhoneGap新手,我能够用PhoneGap实现基本应用程序,现在为了进一步增强它,我想将PhoneGap与Android活动连接起来,基本上我计划使用javascript函数调用startActivity()方法 我试过了 但我未能调用活动,导致强制关闭错误。 一定要帮我,等待答复 如果你不知道你到底想做什么,那就很难了,但是写一个插件可能是最好的选择。退房 这个插件可以按原样为您工作,也可以为您自己提供很好的指导。尝试创建插件,下面是一些插件示例在不使用任何插件的情况下调用任何Jav

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

我试过了

但我未能调用活动,导致强制关闭错误。
一定要帮我,等待答复

如果你不知道你到底想做什么,那就很难了,但是写一个插件可能是最好的选择。退房


这个插件可以按原样为您工作,也可以为您自己提供很好的指导。

尝试创建插件,下面是一些插件示例

在不使用任何插件的情况下调用任何Java本机代码,如下所示

public void customFunctionCalled() {
    Log.e("Custom Function Called", "Custom Function Called");
}
<script type="text/javascript">
    function callNewActivity() {
        window.MainActivity.customFunctionCalled();
    }
</script>
遵循以下步骤

  • 用现有的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");
    }
    
  • 在当前(此)活动中添加自定义函数,如下所示

    public void customFunctionCalled() {
        Log.e("Custom Function Called", "Custom Function Called");
    }
    
    <script type="text/javascript">
        function callNewActivity() {
            window.MainActivity.customFunctionCalled();
        }
    </script>
    
  • 现在从HTML/JavaScript代码中调用此函数,如下所示

    public void customFunctionCalled() {
        Log.e("Custom Function Called", "Custom Function Called");
    }
    
    <script type="text/javascript">
        function callNewActivity() {
            window.MainActivity.customFunctionCalled();
        }
    </script>
    
    
    函数callNewActivity(){
    window.MainActivity.customFunctionCalled();
    }
    
  • 这将在
    MainActivity
    中调用
    customFunctionCalled()

    测试环境 Eclipse-3.7.2 安卓2.2模拟器 PhoneGap-2.0.0

    请在这里提供您的评论,以改进博客文章。

    我尝试了您以前尝试过的方法,将phonegap更新到2.0.0版及以上,最好的方法是使用插件。这是资产文件夹中的js on phonegap。确保构造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”的新类方法


    我用了很长时间。但是最近安卓4.2.2出现了一些问题。从web上了解到,它在sdk>=17的情况下工作正常。你能告诉我使用sdk>=17???@AvtarSingh Suchariya需要做哪些更改吗?为什么我遵循了你的教程,但我得到了:07-08 23:44:04.845:E/Web控制台(25296):未捕获类型错误:Object[Object Object Object]在file:///android_asset/www/js/index.js:31 为什么呢?我听说如果目标SDK为17或更多,则必须进行一些修改(我认为这是我的情况)。但我不知道那些是什么。你能帮帮我吗?@AtanuCSE-hy-man你知道如何使用sdk>=17的脚本了吗?你能告诉我怎么做吗?@AlexStanese不,因为我没有使用任何繁重的本机功能,我只是将我的目标SDK降低到16以使它暂时工作。@AtanuCSE我得到了它!!!只需在“public void customFunctionCalled(){”之前添加“@JavascriptInterface”