2013-12-13 20 views
5

Seit Android 4.4, wenn Sie starten und Intent des Typs Intent.ACTION_GET_CONTENT, statt die Auswahl zwischen Galerie, Dropbox, etc, öffnet es den neuen Dokument-Browser. Dies ist in Ordnung, wenn Sie nur ein Bild öffnen möchten, da dies immer noch auf die gleiche Weise wie in älteren APIS durchgeführt werden kann. Das Problem tritt auf, wenn Sie das ausgewählte Bild zuschneiden müssen, da der Dokumentbrowser den URI ignoriert, den ich ihm übergebe und den Crop-Parameter. Das ist, was ich tue:Crop bei der Auswahl aus der Galerie in 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); 
} 

Dann habe ich meine photoUri gerettet sein, dass ich es bei der Rückkehr zur Verfügung hatte:

@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")); 
} 

Und dann in onActivityResult, ich brauchte nur einen Inputstream mit photoUri zu öffnen weil der galleryIntent die Datei mit dem kopierten Bild erstellt hat.

Jetzt, wenn ich dies tue, wird die von photoUri in der Absicht angegebene Datei nie erstellt. Gibt es einen neuen Weg dies zu tun?

Antwort

4

Vielleicht möchten Sie die Daten der zurückgegebenen Absicht Uri verwenden.

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

    if (requestCode == ACTIVITY_SELECT_IMAGE) { 

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

Nun da die DocumentsActivity nicht weiß, wie man "zuschneidet". Sie können Ihre Aktion ändern in: Intent.ACTION_PICK

Dadurch können Sie die DocumentsActivity umgehen, die direkt in die Galerie oder die Fotos App geht.

Ich würde vorschlagen, Sie verwenden jedoch zwei Intents. Eine Absicht, ein Foto auszuwählen, und dann eine Absicht, das Foto zuzuschneiden. Dies ist viel zuverlässiger, da einige Apps, wie die Fotos-App, nicht wissen, was mit dem "crop" extra zu tun ist.

+0

Das ist, was ich in Kitkat mache, aber das erlaubt den Crop-Parameter sowieso nicht – Makerhack

Verwandte Themen