2011-02-14 19 views
8

Zajmuję się tworzeniem aplikacji, w której obraz jest pobierany z natywnej aplikacji aparatu. ma być pokazywany użytkownikowi. Kod Zrobiłem to:Android Samsung: aplikacja aparatu nie zwróci intent.getData()

/* Intent */ 
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
startActivityForResult(intent, TAKE_PICTURE); 

/* Result */ 
onActivityResult(int requestCode, int resultCode, 
     Intent returnIntent) { 
    if(requestCode == TAKE_PICTURE) { 
     //picture from Camera 
     if (resultCode == Activity.RESULT_OK) { 
      if(returnIntent != null) { 
       try { 
        // Get the file path where the image is stored. 
        // This runs fine on all devices, except Samsung ones. 
        Uri selectedImage = returnIntent.getData(); 

        if(selectedImage == null) { 
         if(returnIntent.getExtras() != null && 
          returnIntent.getExtras().get(AppConstants.DATA) != null) { 

          // But, I get the image Bitmap here. Means the image is stored in disk. 
          Bitmap bmp = (Bitmap) returnIntent.getExtras().get(AppConstants.DATA); 
         } 
        } 
       } catch (Exception e) { 
        // 
       } 
      } 
     } 
    } 
} 

Problemem jest tutaj, powyższy kod działa poprawnie na wszystkich urządzeniach próbowałem (HTC, SE), ale jakoś nie w tych, Samsung. "Uri selectedImage = returnIntent.getData();" nigdy nie zwraca niczego. Ponieważ cała moja aplikacja jest zbudowana na tej logice przechowywania ścieżek plików, nie mogę kontynuować. Czy jest jakieś rozwiązanie ludzi.

+0

znalazłeś rozwiązanie? – Sharj

Odpowiedz

11

Zobacz Specify filename for picture to be taken dla kodu, aby określić parametr EXTRA_OUTPUT dla celu, który pozwala określić nazwę pliku dla obrazu. Zapamiętaj nazwę pliku, gdy wywoływany jest wynik działania, i użyj go, jeśli intent.getData ma wartość NULL

A jeśli przeczytasz inne komentarze w tym raporcie o błędzie, zobaczysz, ile problemów ma to zdjęcie w systemie Android.

+0

Próbuję "zapamiętywać nazwę pliku", ale moja zmienna składowa jest również pusta, gdy funkcja ActivityForResult jest wywoływana ... – ogborstad

+0

@ogborstad zadeklaruj zmienną jako pole statyczne i NIE inicjalizuj do wartości null, w przeciwnym razie zmienna zostanie nadpisana. – Merlin

+0

Wiem, że minęło trochę czasu od opublikowania tego pytania, ale czy wiesz, jak to zrobić, aby uzyskać zdjęcie z galerii obrazów? Podobno na małej liczbie telefonów 'Uri uri = data.getData();' zawsze zwraca null (S3 mini, W8L.. coś). – Sebek

3

Najlepiej jest wygenerować ścieżkę do pliku, w której chcesz zapisać obraz i zapisać go w zmiennej członkowskiej. Następnie, wywołując działanie kamery, umieść ją (jako Uri) w MediaStore.EXTRA_OUTPUT extra.

Pamiętaj, aby zastąpić onSaveInstanceState() i onRestoreInstanceState() i odpowiednio zapisać/przywrócić tę ścieżkę. Dzięki temu będziesz mieć pewność, że nadal będziesz go mieć, jeśli system zdecyduje się ponownie uruchomić twoją działalność w międzyczasie (co jest bardzo możliwe z powodu zmian orientacji i/lub braku pamięci).

+0

Czy możesz podać przykład sposobu obsługi savedInstanceState() i onRestoreInstanceState() w powyższym przykładzie? – Darpan

Powiązane problemy