2012-11-15 23 views
8

Fotoğraf makinesinden bir görüntü yakalamak ve bunu özel uygulama önbellek dizinine kaydetmek istiyorum. Özel dizime yazmak için kamera uygulaması iznini vermem gerektiğini anlıyorum, bu yüzden FLAG_GRANT_WRITE_URI_PERMISSION bayrağını ekledim.Fotoğraf makinesini özel uygulama önbellek dizinine depolayın

Neler oluyor, kamera uygulaması açılıyor, fotoğrafı çekebilirim, ancak OK düğmesine tıkladığımda hiçbir şey olmuyor. Kamera uygulaması açık kalıyor. Kayıt çıkışı yok. Sanırım bir izin problemi yüzünden.

private void getCameraImage() { 
    try { 
     mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir()); 
     Uri imgUri = Uri.fromFile(mTmpFile); 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); 
     i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
     // i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception 
     startActivityForResult(i, REQUEST_CAMERA); 
    } catch (IOException e) { 
     Log.e(TAG, "getCameraImage()", e); 
     Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show(); 
    } 
} 

Herhangi anlayışlar, nasıl bunu düzeltmek olabilir?

Düzenleme:

ben kamu SD karta dizin değiştirdiğinizde, o zaman gayet iyi çalışıyor. Bunun yerine http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera kullanabilirsiniz resim depolamak için Uri geçen

mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory()); 

Teşekkür Simon

+1

Bir izin sorunu olsaydı, LogCat'ta bir hata ortaya çıktı. – PearsonArtPhoto

+0

Bundan emin değilsiniz. FLAG_GRANT_WRITE_URI_PERMISSION bayrağını kaldırdığımda bile herhangi bir günlük çıkışı almıyorum. Belki kamera uygulaması izni kontrol eder ve dosyayı yazamazsa eylemi iptal eder. – SimonSays

cevap

2

.

ve içeriği uygulama belleğinizde alın. Oradan istediğin her şeyi yapabileceksin.

Fotoğraf makinesi uygulamalarının da galeri olduğunu ve galeri uygulamasının özel dizininizi kontrol etmesine izin verilmediğini unutmayın.

+0

Peki, bu resim çekmek istediğimden çok farklı bir yol. Aslında asıl sorunun cevabı değil, yine de sorunu çözebilir. Artık bu uygulama üzerinde çalışmıyorum ve bu yüzden çözümü test edemediğimden, sadece devam edip cevabı kabul ediyorum - sadece bir tane var :-) – SimonSays

+0

Takdir için çok teşekkürler ve evet doğrudan değil sorunuzu yanıtlayın, ancak söylediğiniz gibi, sadece "uygulamanıza" ait olan ve medyayı kullanan herhangi bir kişiye ait olmayan bir şeyi yapmanın tek yolu. Bu yöntemi kendim kullandım ... Teşekkürler – danysz

+0

Bu çözüm, API 21'de kullanımdan kaldırıldı –

İlgili konular