I show the user a selector to select "Gallery" or "Camera" to select a photo. If I select a camera, then as soon as the camera boots up, I will turn to take a landscape photo, take a picture and make a click, it will return to my application, but the returned image will be zero. If I do not rotate the camera, the image returns in order. What am I missing? I know that a rotation leads to a restructuring of the Activity, but why not include the correct information onActivityResult? Here is my openImage principle:
public void openImageIntent() { // Determine Uri of camera image to save. final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyAppImages" + File.separator); root.mkdirs(); SimpleDateFormat sdf = new SimpleDateFormat("ddMMyy-hhmmss"); final String fname = String.format("%s.jpg", sdf.format(new Date())); final File sdImageMainDirectory = new File(root, fname); outputFileUri = Uri.fromFile(sdImageMainDirectory); // Camera. final List<Intent> cameraIntents = new ArrayList<Intent>(); final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); final PackageManager packageManager = getPackageManager(); final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); for (ResolveInfo res : listCam) { final String packageName = res.activityInfo.packageName; final Intent intent = new Intent(captureIntent); intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); intent.setPackage(packageName); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); cameraIntents.add(intent); } // Filesystem. final Intent galleryIntent = new Intent(); galleryIntent.setType("image/*"); galleryIntent.setAction(Intent.ACTION_GET_CONTENT); // Chooser of filesystem options. final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source"); // Add the camera options. chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[] {})); startActivityForResult(chooserIntent, SELECT_PICTURE_REQUEST); }
And the onActivityResult method:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == SELECT_PICTURE_REQUEST) { final boolean isCamera; if (data == null) { isCamera = true; } else { final String action = data.getAction(); if (action == null) { isCamera = false; } else { isCamera = true; } } Uri selectedImageUri; if (isCamera) { selectedImageUri = outputFileUri; } else { selectedImageUri = data == null ? null : data.getData(); } if (imageDelegate != null) { Log.e(TAG, "imageDelegate not null: " + imageDelegate); imageDelegate.gotNewImageUri(selectedImageUri); imageDelegate = null; } else if (getSupportFragmentManager().findFragmentByTag("addofferdialog") != null) { imageDelegate = (AddOfferFragment) getSupportFragmentManager().findFragmentByTag("addofferdialog"); Log.e(TAG, "imageDelegate is null but found fragment: " + imageDelegate); Log.e(TAG, "Activity image: " + selectedImageUri); imageDelegate.gotNewImageUri(selectedImageUri); imageDelegate = null; } else { Log.e(TAG, "cannot find imageDelegate!!!!"); } Log.e(TAG, "selectedImageUri: " + selectedImageUri); } } }
source share