2011-02-14 12 views
8

Yerel kamera uygulamasından alınan bir görüntünün olduğu bir uygulama geliştiriyorum. kullanıcıya gösterilecek. Yaptığım kodudur:Android Samsung: Kamera uygulaması intent.getData() döndürmeyecek.()

burada
/* 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) { 
        // 
       } 
      } 
     } 
    } 
} 

sorun deyişle, yukarıdaki kod denedim tüm cihazlarda çalışıyor (HTC en, SE adlı) ama nedense Samsung olanlar başarısız olur. "Uri selectedImage = returnIntent.getData();" asla bir şey döndürmez. Uygulamamın tamamı, dosya yolunu saklamanın bu mantığı üzerinden oluşturulduğundan, devam edemiyorum. Herhangi bir çözüm var mı?

+0

Bir çözüm buldunuz mu? – Sharj

cevap

11

Resim için bir dosya adı belirtmenizi sağlayan Intent için bir EXTRA_OUTPUT parametresi belirtmek üzere kod için Specify filename for picture to be taken adresine bakın. Aktivite sonucu çağrıldığında dosya adını hatırla ve intent.getData değeri NULL

ise ve bu hata raporundaki diğer yorumları okuyorsanız, bu fotoğrafın Android'e kaç tane resim eklediğini fark edeceksiniz.

+0

"Dosya adını hatırlamaya çalışıyorum" ancak ActivityForResult çağrıldığında üye değişkeni de null ... – ogborstad

+0

@ogborstad değişkeninizi statik alan olarak bildirir ve Null olarak başlatılamıyor, aksi halde değişkenin üzerine yazılır. – Merlin

+0

Bu sorunun yayınlandığından beri bir süredir olduğunu biliyorum, ancak resim galerisinden bir görüntü almak için bunu nasıl yapacağımı biliyor musunuz? Görünüşe göre az sayıda telefon 'Uri uri = data.getData();' her zaman null (S3 mini, W8L..something) döndürür. – Sebek

3

En iyi seçeneğiniz, resmi kaydetmek ve üye değişkeninde saklamak istediğiniz bir dosya yolunu oluşturmaktır. Ardından, kamera aktivitesini çağırırken MediaStore.EXTRA_OUTPUT ekstraına (Uri) koyun.

onSaveInstanceState() ve onRestoreInstanceState() öğesini geçersiz kıldığınızdan emin olun ve bu yolu düzgün şekilde kaydedin/geri yükleyin. Bu, sisteminizdeki etkinliğinizi yeniden başlatmaya karar verirse (ki bu da yönlendirme değişikliklerinden ve/veya bellek yetersizliğinden dolayı çok mümkündür) yine de size sahip olacağınızdan emin olabilirsiniz.

+0

Yukarıdaki örnekte savedInstanceState() ve onRestoreInstanceState() yönteminin nasıl işleneceğine dair bir örnek verebilir misiniz? – Darpan

İlgili konular