0

Im using the gallery view for the user to select an image. When the user has selected an image, he will be passed to the "cropping page". (This is not a custom activity as i've done)

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true"); 
startActivityForResult(photoPickerIntent, 1);

When I return to onActivityResult my data is null and I cant retreive the cropped image.

Does anyone know how to fix this? Thanks!

4

2 回答 2

1

尝试额外添加意图

intent.putExtra("return-data", true);

请参阅以下示例:

http://nullpointerblog.com/2012/06/17/android-photo-chooser-with-crop/

于 2013-04-28T13:09:20.470 回答
0

使用此代码

private static final String TEMP_PHOTO_FILE = "temporary_holder.jpg";  

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);

private Uri getTempUri() {
   return Uri.fromFile(getTempFile());
}

private File getTempFile() {

  if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

    File file = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
    try {
        file.createNewFile();
    } catch (IOException e) {}

    return file;
 } else {

    return null;
  }
}

protected void onActivityResult(int requestCode, int resultCode,
    Intent imageReturnedIntent) {

super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

switch (requestCode) {
    case REQ_CODE_PICK_IMAGE:
        if (resultCode == RESULT_OK) {  
            if (imageReturnedIntent!=null) {

                File tempFile = getTempFile();

                String filePath= Environment.getExternalStorageDirectory()
                    +"/"+TEMP_PHOTO_FILE;
                System.out.println("path "+filePath);


                Bitmap selectedImage =  BitmapFactory.decodeFile(filePath);
                _image = (ImageView) findViewById(R.id.image);
                _image.setImageBitmap(selectedImage );

                if (tempFile.exists()) tempFile.delete();
            }
        }
   }       
}

添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

资源

于 2013-04-28T13:23:51.197 回答