2013-12-13 13 views
5

Da Android 4.4, quando lanci e Intenti del tipo Intent.ACTION_GET_CONTENT, invece di scegliere tra Galleria, Dropbox e così via, apre il nuovo Browser documenti. Questo va bene se vuoi solo aprire un'immagine, poiché questa può ancora essere eseguita nello stesso modo rispetto all'APIS precedente. Il problema si presenta quando devi ritagliare l'immagine selezionata, poiché il browser dei documenti ignora l'Uri che sto passando ad esso e il parametro di ritaglio. Questo è quello che sto facendo:Ritaglia mentre selezioni dalla Galleria su Android 4.4

void take_photo() { 
    File file = null; 
    try { 
     file = PhotoUtils.createTemporaryFile("picture", ".jpg", 
       EditProfileActivity.this); 
     file.delete(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    photoUri = Uri.fromFile(file); 
    Intent galleryIntent= new Intent(Intent.ACTION_GET_CONTENT); 
    galleryIntent.setType("image/*"); 
    galleryIntent.putExtra("crop", "true"); 
    galleryIntent.putExtra("aspectX", 2); 
    galleryIntent.putExtra("aspectY", 2); 
    galleryIntent.putExtra("outputX", 1300); 
    galleryIntent.putExtra("outputY", 1300); 
    galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 
    startActivityForResult(galleryIntent, ACTIVITY_SELECT_IMAGE); 
} 

Poi ho salvato il mio photoUri per essere sicuro che ho avuto a disposizione sul ritorno:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if (photoUri != null) 
     outState.putString("uri", photoUri.toString()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    if (savedInstanceState.containsKey("uri")) 
     photoUri = Uri.parse(savedInstanceState.getString("uri")); 
} 

E poi nel onActivityResult, ho solo bisogno di aprire un InputStream con photoUri perché la galleriaIntent aveva creato il file con l'immagine ritagliata.

Ora, quando lo faccio, il file specificato da photoUri nell'intento non viene mai creato. C'è un nuovo modo per farlo?

risposta

4

È possibile utilizzare i dati dell'intento restituito Uri.

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

    if (requestCode == ACTIVITY_SELECT_IMAGE) { 

    if(resultCode == RESULT_OK){  
     Uri realUri = intent.getData(); 
    } 
    } 
} 

Ora poiché DocumentsActivity non sa come "ritagliare" nulla. Puoi modificare la tua azione in: Intent.ACTION_PICK

Questo ti permetterà di aggirare la DocumentAttività andando direttamente alla Galleria o all'app Foto.

Suggerirei comunque di utilizzare due Intenti. Un intento di scegliere una foto, e poi un intento per ritagliare quella foto. Questo è molto più affidabile poiché alcune app, come l'app Foto, non sanno cosa fare con il ritaglio "extra".

+0

Questo è quello che sto facendo in Kitkat, ma ciò non consente comunque il parametro di ritaglio – Makerhack

Problemi correlati