Deixar a imagem de recorte do usuário

Eu estou tendo dificuldade em descobrir como deixar o usuário cortar a imagem. Eu gostaria de dar variável bitmap com bitmap carregado para cortar a imagem antes de defini-lo como papel de parede. Mas eu não estou conseguindo fazer isso ... Aqui está o que eu tentei.

Primeira versão. = Funciona como esperado MAS a imagem retornada está em baixa resolução. Alterar a saída para um valor mais alto não ajuda. Como vi em alguns posts, não é recomendado usar a câmera, pois nem todos os dispositivos suportam isso.

Intent intent = new Intent("com.android.camera.action.CROP");  
String path = Images.Media.insertImage(context.getContentResolver(), loaded,null, null);
Uri uri = Uri.parse(path);              
intent.setData(uri);  
intent.putExtra("crop", "true");  
intent.putExtra("aspectX", 1);  
intent.putExtra("aspectY", 1);  
intent.putExtra("outputX", 300);  
intent.putExtra("outputY", 300);  
intent.putExtra("noFaceDetection", true);  
intent.putExtra("return-data", true);                                  
startActivityForResult(intent, 2);

Segundo. Carregue o seletor de imagens e corte depois. Como posso configurá-lo para carregar o crop diretamente na minha imagem? Assim como na versão 1

Intent photoPickerIntent = new Intent(MediaStore.ACTION_PICK);
photoPickerIntent.setData(uri);
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, 2);

E resultado onActivity

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) { return; }
    if(requestCode == 2) {
        Bundle extras = data.getExtras();  
        if(extras != null ) {  
            Bitmap photo = extras.getParcelable("data");  
            loaded = photo;
        }
        WallpaperManager myWallpaperManager = WallpaperManager.getInstance(getApplicationContext());

        try {
            myWallpaperManager.setBitmap(loaded);
        } catch (IOException e) {}
    }
}

Eu não sei se esses são os métodos corretos para fazer isso, mas espero que alguém possa me apontar na direção certa. Qual, por que e como usar.

Atualizar: Eu ainda estou esperando por alguém para mostrar como fazer isso corretamente, as respostas abaixo estão funcionando, mas retornando imagens em baixa resolução, então elas não são uma opção para usar

questionAnswers(4)

yourAnswerToTheQuestion