我正在开发一个使用自定义相机(带有Surfaceview等)的应用程序,我正在使用ObjectActivity中的startActivityForResult转到名为CameraActivity的相机的活动。此方法中会发生这种情况。
public void addPicture(View v) {
final CharSequence[] items = { "Take Photo", "Choose from Gallery", "Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(ObjectActivity.this);
builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Take Photo")) {
executeOnResume = false;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
int hasWriteExternalStoragePermission = checkSelfPermission(Manifest.permission.CAMERA);
if (hasWriteExternalStoragePermission != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA},
REQUEST_CODE_ASK_PERMISSIONS);
}
}
Intent intent = new Intent(ObjectActivity.this,CameraActivity.class);
startActivityForResult(intent, REQUEST_CAMERA);
} else if (items[item].equals("Choose from Gallery")) {
executeOnResume = false;
Intent intent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(
Intent.createChooser(intent, "Select File"),
REQUEST_SELECT_FILE);
} else if (items[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
更具体地说,它发生在以下行:
Intent intent = new Intent(ObjectActivity.this,CameraActivity.class);
startActivityForResult(intent, REQUEST_CAMERA);
这很好用,但是当我在拍照后尝试返回 ObjectActivity 时,这里会发生:
Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//TODO Code to process picture taken
//create a new intent...
Intent intent = new Intent();
intent.putExtra("data",data);
//close this Activity...
setResult(Activity.RESULT_OK, intent);
finish();
}
};
它返回到名为 MainActivity 的 ObjectActivity 之前的活动,而它应该返回到 ObjectActivity 并调用 onActivityResult():
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
executeOnResume = false;
loadStuff();
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CAMERA || requestCode == REQUEST_SELECT_FILE) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setTitle("Description");
alertDialog.setMessage("Enter Description");
final EditText input = new EditText(this);
alertDialog.setView(input);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
alertDialog.setView(input);
alertDialog.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
description = input.getText().toString();
if (description == null || description.equals("")) {
description = "-";
}
try {
savePhoto(requestCode,data);
} catch (IOException e) {
e.printStackTrace();
}
}
});
final AlertDialog.Builder tmpDialog = alertDialog;
final AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
dlgAlert.setTitle("Direction");
dlgAlert.setMessage("Stand with your phone facing the same direction as the picture made and press Ok");
dlgAlert.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mBearingProvider.updateBearing();
bearing = mBearingProvider.getBearing();
cardinalDirection = bearingToString(bearing);
Log.e("Direction", cardinalDirection + "," + bearing);
tmpDialog.create().show();
dialog.dismiss();
}
});
dlgAlert.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
tmpDialog.create().show();
}
});
dlgAlert.create().show();
}
}
}
但它永远不会到达那里。有谁知道为什么会这样?
摆脱那个getParent。 您希望为当前活动设置结果,而不是为父活动设置结果。 所以替换:
//close this Activity...
if (getParent() == null) {
setResult(Activity.RESULT_OK, intent);
} else {
getParent().setResult(Activity.RESULT_OK, intent);
}
跟
setResult(Activity.RESULT_OK, intent);
找到了解决方案,如果我不发送带有意图的字节[](而是可能写出一个文件并使用意图发送该文件的路径),代码似乎有效并且 ObjectActivity 打开。
我删除/更改的部分:
intent.putExtra("data",data);
我不知道为什么这有效,我想知道为什么,但现在我很高兴它有效。