我正在向用户显示一个选择器,用于在图库或相机之间进行选择以选择照片.如果我选择相机,那么一旦相机加载我旋转拍摄风景照片,拍照并点击完成,它返回我的应用程序但返回的图像为空.
如果我不旋转相机,图像将返回正常.
我错过了什么?
我知道旋转导致重建Activity,但为什么onActivityResult不包含正确的信息?
这是我的open Image意图:
如果我不旋转相机,图像将返回正常.
我错过了什么?
我知道旋转导致重建Activity,但为什么onActivityResult不包含正确的信息?
这是我的open Image意图:
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); }
和onActivityResult方法:
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); } } }