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有一个回调函数,因此您必须在块中放入下一个意图