如何从第三个子活动中调用父活动

时间:2014-09-24 03:06:33

标签: android android-intent android-activity cordova-3

我目前正在添加一个cordova插件来启动我自己的自定义相机应用程序。我还包括Aviary做一些照片编辑。现在我最大的问题是我不知道如何从活动(3)返回到我需要能够访问和呼叫的活动(1):

this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));

我搜索了stackoverflow和众多博客上的很多帖子。我已经看到了我已经看到的回归父母活动的对流,但是我还没有看到任何来自A - >的东西。 B - > C - >答:我目前的代码发布在下面。目前我可以从Aviary上升 - >到我的第二个活动(相机预览),但我很难过为什么我不能进一步上升一级。

不可能走得那么远吗? 是不是只能添加finish();要尽可能地回到你想要的地方?

我的执行方法根据cordova文档驻留在活动1中:

(1)CordovaPlugin

public class Aviary extends CordovaPlugin{

    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
            this.callbackContext = callbackContext;

            Intent i = new Intent(cordova.getActivity(), CameraActivity.class);
            this.cordova.startActivityForResult((CordovaPlugin) this, i, (CAMERA + 1) * 16 + returnType + 1);


    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        logger.i("ACTIVITYRESULT - returned from cameraActivity, now in aviary");

        if (resultCode == Activity.RESULT_OK && requestCode == CameraConstants.FROM_CAMERA_TO_EXECUTE)
            // I need this to launch with the uri data contained within the intent
            //build json array here
            this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result));

然后我的第二个活动开始于相机预览。捕获图像后,我会使用捕获的位图启动一个活动,并将其显示在屏幕上,并提供选项以发布图像或使用鸟舍进行编辑。

(2)CameraActivity:启动后捕获屏幕

Intent intent = new Intent(context, PostCaptureActivity.class);
intent.putExtra(CameraConstants.URI, path);
intent.putExtra("requestCode", CameraConstants.FROM_SAVEIMAGETASK_TO_POSTCAPTURE);
intent.putExtra(CameraConstants.SOURCE, CameraConstants.SOURCE_CAMERA);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivityForResult(intent, CameraConstants.FROM_SAVEIMAGETASK_TO_POSTCAPTURE);

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CameraConstants.FROM_POSTCAPTURE_TO_PREVIEW)
    {
        logger.i("ACTIVITYTHREAD - inCameraActivity about to call finish");
        Intent intent= new Intent();
        setResult(RESULT_OK, intent);
        //intent.putExtra("uri", data.getData());
        intent.putExtra("requestCode", CameraConstants.FROM_CAMERA_TO_EXECUTE);
        finish();
    }

活动3:PostCaptureActivity(启动Aviary)

private void setupAviaryIntent() {
    logger.i("Launching Aviary");
    Intent intent = new Intent(PostCaptureActivity.this, FeatherActivity.class);
    intent.setData(Uri.parse(uri));
    intent.putExtra("requestCode", CameraConstants.LAUNCH_AVIARY);
    intent.putExtra( "output-quality", 100 );
    intent.putExtra( "output-format", Bitmap.CompressFormat.JPEG.name() );
    intent.putExtra( "effect-enable-fast-preview", true );
    intent.putExtra("tools-list", new String[]{"CROP", "EFFECTS", "ADJUST", "ENHANCE",
            "DRAWING", "TEXT", "SHARPNESS", "BRIGHTNESS", "CONTRAST",
            "BLEMISH", "SATURATION", "RED_EYE", "WHITEN", "COLORTEMP"});
    startActivityForResult(intent, CameraConstants.LAUNCH_AVIARY);
}


@Override
public void onActivityResult( int requestCode, int resultCode, Intent data )
{
    super.onActivityResult(requestCode, resultCode, data);
    /** FROM: Aviary TO: Preview*/
    if(resultCode == RESULT_OK && requestCode == CameraConstants.LAUNCH_AVIARY )
    {
        logger.i("in PostCaptureActivity, should go back to CameraActivity");
        Uri uri = data.getData();
        Intent intent = new Intent();
        setResult(RESULT_OK, intent);
        intent.putExtra("requestCode", CameraConstants.FROM_POSTCAPTURE_TO_PREVIEW);
        intent.putExtra("uri", uri);
        finish();
    }
}

我正在寻找的是从活动3开始的方式并返回到父活动(1)或者我可以如何跳回到活动1并且能够使用我的图片运行sendPluginResult方法的一些示例信息。

编辑: 所以事实证明我在完成()之后无法返回上一个活动的原因;是因为我在其中一个意图中添加了标志。重读文档后,我意识到错误是什么。删除此行后,我能够按预期工作。

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

1 个答案:

答案 0 :(得分:0)

在第二项活动中使用NO HISTORY标志。