2013-12-13 12 views
5

Od chwili uruchomienia Androida 4.4, po uruchomieniu i zamierzeniu typu Intent.ACTION_GET_CONTENT, zamiast wybierać między Gallery, Dropbox, itp., Otwiera się nowa przeglądarka dokumentów. Jest to dobre, jeśli chcesz tylko otworzyć obraz, ponieważ może on być nadal wykonywany w taki sam sposób, jak w starszych APIS. Problem pojawia się, gdy trzeba przyciąć wybrany obraz, ponieważ przeglądarka dokumentów ignoruje Uri I przekazuje do niego i parametr przycinania. To, co robię:Przytnij podczas wybierania z Galerii w systemie 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); 
} 

Wtedy uratował mi photoUri być pewien, że gdyby dostępny na zwrot:

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

A potem w onActivityResult, ja po prostu potrzebne, aby otworzyć InputStream z photoUri ponieważ galleryIntent utworzył plik z przyciętym obrazem.

Teraz, gdy to zrobię, plik określony przez photoUri w zamierzeniu nigdy nie zostanie utworzony. Czy istnieje nowy sposób robienia tego?

Odpowiedz

4

Możesz chcieć użyć zwróconych danych URI.

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

    if (requestCode == ACTIVITY_SELECT_IMAGE) { 

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

Teraz, od kiedy DocumentsActivity nie wie, jak "ciąć" wszystko. Możesz zmienić akcję na: Intent.ACTION_PICK

Pozwoli ci to obejść DocumentsActivity przechodząc bezpośrednio do galerii lub aplikacji Zdjęcia.

Proponuję jednak użyć dwóch intencji. Jeden z nich ma zamiar wybrać zdjęcie, a następnie jedno zamierzenie, aby przyciąć to zdjęcie. Jest to o wiele bardziej niezawodne, ponieważ niektóre aplikacje, takie jak aplikacja Zdjęcia, nie wiedzą, co zrobić z dodatkiem "crop".

+0

To właśnie robię w KitKat, ale to nie pozwala na parametr parametru – Makerhack

Powiązane problemy