Android开发-新活动开放太快

Android开发-新活动开放太快,android,android-studio,Android,Android Studio,我正在开发一个应用程序,它可以拍照,然后切换到新的活动。以下是执行此操作的函数: public void takePhoto(View view){ final int REQUEST_IMAGE_CAPTURE = 1; // open camera Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if(takePictureIntent.resolveActivi

我正在开发一个应用程序,它可以拍照,然后切换到新的活动。以下是执行此操作的函数:

public void takePhoto(View view){
    final int REQUEST_IMAGE_CAPTURE = 1;

    // open camera
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if(takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

    // open "Enter Info" screen
    startActivity(new Intent(MainActivity.this, EnterInfoActivity.class));
}
但是,“输入信息”活动在相机启动之前打开。我想在开始新活动之前打开相机。按“后退”键将我带到相机,这对我来说意味着相机确实加载了,但活动被赋予了更高的优先级

我想在开始新活动之前打开相机

然后不要为
EnterInfoActivity
调用
startActivity()
,直到从
ACTION\u IMAGE\u CAPTURE
活动中调用
onActivityResult()
。因此,您需要等待
操作\u图像\u捕获
的结果,然后开始下一个活动

private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

in onActivityResult Open Your Second Activity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // if the result is capturing Image
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // successfully captured the image
            // display it in image view
            previewCapturedImage();
        } else if (resultCode == RESULT_CANCELED) {
            // user cancelled Image capture
            Toast.makeText(getApplicationContext(),
                    "User cancelled image capture", Toast.LENGTH_SHORT)
                    .show();
        } else {
            // failed to capture image
            Toast.makeText(getApplicationContext(),
                    "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

moew info查看此信息,

如我所见,您正在使用startActivityForResult启动照片活动,这意味着您正在打开的新活动将返回一个调用activityResult方法的值

实施该方法,检查您是否来自照片的活动,然后打开下一个活动

private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

in onActivityResult Open Your Second Activity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // if the result is capturing Image
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            // successfully captured the image
            // display it in image view
            previewCapturedImage();
        } else if (resultCode == RESULT_CANCELED) {
            // user cancelled Image capture
            Toast.makeText(getApplicationContext(),
                    "User cancelled image capture", Toast.LENGTH_SHORT)
                    .show();
        } else {
            // failed to capture image
            Toast.makeText(getApplicationContext(),
                    "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}
您的流程应该是这样的:

  • 开始拍照活动
  • 当照片活动结束时,将调用activityresult方法
  • 从ActivityResult上的
    启动EditInfo活动
您可以从以下答案中找到有关管理活动的具体信息:


PD:我不能测试代码,自从我为Android编写代码以来已经有一段时间了。如果我回到家,可以轻松地启动一个小的android项目,我将发布一些示例。

startActivityForResult有一个回调函数,因此您必须在块中放入下一个意图