Cortar imagem no Android (intenção de corte)

Eu usei issocódigo para usar as ferramentas de corte de imagem do android. Meu código é o seguinte

 public void takePicture(){
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null){
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
        takePictureIntent.putExtra("crop", "true");
        takePictureIntent.putExtra("aspectX", 0);
        takePictureIntent.putExtra("aspectY", 0);
        takePictureIntent.putExtra("outputX", 200);
        takePictureIntent.putExtra("outputY", 150);
        takePictureIntent.putExtra("return-data", true);

        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

}

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        imageViewImage.setImageBitmap(imageBitmap);

    }
}

takePicture é chamado dentro de um ouvinte de clique para um botão. O que é feito é que eu posso abrir a câmera do Android e tirar a foto e, ao pressionar Salvar, a imagem é salva no meu imageView. Mas nenhuma atividade de corte aparece, além da imagem no imageView parecer horrível. A qualidade é como se estivesse pixelizada. Estou fazendo algo errado? Usei um Samsung Galaxy Tab 3 para testar meu aplicativo

EDITAR usando a resposta abaixo ... Ainda não está funcionando

 protected void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Log.d("onActivityResult", "Inside on activity for result");
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        imageViewImage.setImageBitmap(imageBitmap);
        fileUri = getImageUri(this, imageBitmap);χ
        cropImage();
    }else if (requestCode == REQUEST_IMAGE_CROP && resultCode == RESULT_OK){
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap)extras.get("data");
        imageViewImage.setImageBitmap(imageBitmap);


    }
}

 public void takePicture(){
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null){

        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

}

 public void cropImage() {
    try {

        Intent cropIntent = new Intent("com.android.camera.action.CROP");

        cropIntent.setDataAndType(fileUri, "image/*");
        cropIntent.putExtra("crop", "true");
        cropIntent.putExtra("aspectX", 1);
        cropIntent.putExtra("aspectY", 1);
        cropIntent.putExtra("outputX", 128);
        cropIntent.putExtra("outputY", 128);
        cropIntent.putExtra("return-data", true);
        startActivityForResult(cropIntent, REQUEST_IMAGE_CROP);
    }
    // respond to users whose devices do not support the crop action
    catch (ActivityNotFoundException anfe) {
        // display an error message
        String errorMessage = "Whoops - your device doesn't support the crop action!";
        Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
        toast.show();
    }
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

LocCat aqui

questionAnswers(1)

yourAnswerToTheQuestion