【问题标题】:PhoneGap Android Plugin - close the plugin ActivityPhoneGap Android Plugin - 关闭插件Activity
【发布时间】:2014-02-18 15:56:03
【问题描述】:

我编写了一个 PhoneGap Android 插件,并在那里打开了第二个活动:

 cordova.getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Context context = cordova.getActivity().getApplicationContext();
            Intent intent = new Intent(context, secondActivity.class);
            cordova.getActivity().startActivity(intent);
        }
    });

现在我想用一个按钮关闭活动并将插件结果发送到 JavaScript,但我无法关闭活动并返回到 PhoneGap 应用程序 - 我该怎么做?

我希望有人可以帮助我。谢谢大家的回答。

【问题讨论】:

    标签: android cordova cordova-plugins


    【解决方案1】:

    在您的插件中,使用 CordovaInterface 类中的 startActivityForResult 而不是 Android 中的 startActivity

    this.cordova.startActivityForResult(this,intent,0);
    

    (0是一个int值,用于标识启动的activity,如果需要启动多个activity,使用其他数字)

    在您的活动中,您添加以下函数以将结果返回给插件:

    public void returnResult(int code, String result) {
        Intent returnIntent = new Intent();
        returnIntent.putExtra("result", result);
        setResult(code, returnIntent);
        finish();
    }
    

    所以当你想退出你的活动时,你可以使用 RESULT_CANCELED 或 RESULT_OK 和一个代表你想要返回的字符串来调用这个函数。

    最后在你的插件类中,添加以下函数:

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (requestCode) {
        case 0: //integer matching the integer suplied when starting the activity
             if(resultCode == android.app.Activity.RESULT_OK){
                 //in case of success return the string to javascript
                 String result=intent.getStringExtra("result"); 
                 this.callbackContext.success(result);
             }
             else{
                 //code launched in case of error
                 String message=intent.getStringExtra("result");
                 this.callbackContext.error(message);
             }
             break;
        default:
             break;
        }
    }
    

    希望它是你要找的。​​p>

    【讨论】:

    • 这就是我需要的,但它不起作用 - 我有一个类 Target.java,我有一个方法 onClick(View v) 在这个方法中我打开返回结果('MainActivity act = new MainActivity(); act.returnResult(android.app.Activity.RESULT_OK, result);') returnResult 的打开工作,但它不会关闭实际的 MainActivity 并且调用 Plugin.java 中的 onActivityResult 导致到错误“不幸的是应用程序已停止”。我的错误是什么?
    • 当你在你的插件中时,你开始你的意图,它实例化 MainActivity 类,从那里你实例化一个目标类,然后你尝试从这个目标类创建一个 MainActivity 的新实例,这就是问题所在.当您实例化 Target 类时,您应该将它传递给 MainActivity 对象(使用构造函数),然后使用此 ref 调用 returnResult 而不是尝试执行新的 MainActivity。
    • 谢谢,现在它关闭了活动,但没有调用 onActivityResult。
    • 您是否使用 startActivityForResult 来启动活动? (对不起,我昨天写错了,在示例调用中写了 startActivity,我现在编辑它!)
    • 是的,我使用第一篇文章中发布的函数调用活动,但替换了“cordova.getActivity().startActivity(intent);”行用“cordova.getActivity().startActivityForResult(intent, 0);”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2012-05-26
    • 2020-05-26
    • 2013-05-10
    相关资源
    最近更新 更多