2011-01-08 16 views
7

varsayılan kamera etkinliğini aramayaDahili bellekte kamera aktivitesinden dönen tam boyutlu görüntüyü saklamanın bir yolu var mı?

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(externalFileObj)); 

niyet kullanıyorum. Tam resmi elde etmek için intent.putExtra() öğesini belirtmeniz gerekir. Ancak bu her zaman yalnızca harici depolama dosyaları için çalışan URI'yi gerektirir.

Ben dahili bellekte bir temp.jpg görüntüsünü oluşturmak ve URI

Uri.fromFile(new File(getFilesDir() + "/temp.jpg")); 

geçmek çalıştı ama görüntü çekildikten sonra kamera etkinlik geri döndürmez.

Herhangi bir harici depolama kullanmadan etkinliğimizdeki varsayılan kamera uygulamasından Tam boyutlu görüntü elde etmenin bir yolu yok mu? Cihazda SD kart bulunmadığı veya şu anda kullanımda olduğu varsayıldığından, bunu kullanmaktan kaçınmam mümkün değil mi?

Evet Kendi kamera bölümümüzü oluşturabileceğimizi biliyorum ancak varsayılan kamera uygulamasını çok daha fazla seçenekle doğal olduğu için kullanmak istiyorum.

Teşekkürler. Aşağıdaki gibi

cevap

1

Ah! Anladım. Dahili belleğindeki dosya dizininiz varsayılan olarak özeldir ve harici uygulamalar tarafından yazılabilir değildir (örn. Camera uygulaması harici uygulama)

Uygulama alanınızda (dahili bellek) yazılabilir modda yeni bir dizin oluşturun ve bu URI'yi iletin. kamera etkinliği. Ve her şey iyi çalışıyor. Herhangi bir harici depolamaya gerek yok. Test edildi ve iyi çalışıyor.

+1

Eklemek için, root izinleriniz olmadıkça hala bundan memnun kalmayacaksınız. Dahili bellek klasöründeki Kamera etkinliği tarafından döndürülen sonuç görüntüsü farklı izinler grubuna (-rwxrwx ---) sahip olduğundan ve uygulamanız uygulama alanınızda ve kendi oluşturulan klasörünüzde olmasına rağmen uygulamanıza erişmesine izin verilmediğinden! – Pritam

+2

Birisi root izinlerini nasıl alabilir ve yazılabilir modda nasıl yeni bir dizin oluşturabilirim? Aynı sorun yaşıyorum ... –

+0

Kök izni, kullanıcının cep telefonunu başka ayrıcalıklar için kesmesidir. Bir geliştirici olarak, Android pazarında uygulamayı yayınlamayı düşünüyorsanız ve yalnızca droidleri kökü olan sınırlı kitleyi hedeflemek istemiyorsanız, bu gibi durumları üstlenmemeyi öneriyorum. Ayrıca bu, daha yeni API'ların herhangi bir çıkış yolu sağlayıp sağlamadığından emin olmadığından emin olun. – Pritam

0

Sadece kullanmış kodu:

mTempFilePath = File.createTempFile("myappprefix_", ""); 
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFilePath)); 

dahili depolamaya olmak zorunda bir sebep mi var? HTC Incredible (dahili fotoğraf depolama sistemi) gibi telefonların sadece fotoğrafları dahili olarak saklayabileceklerini umuyordum.

+0

Dahili depolama nedenleri, fotoğraf makinesinden alınan görüntülerin gizli ve sadece benim uygulamam için kullanılması/gösterilmesidir. Harici depolama kullanımı, görüntülerin başka uygulamalar veya kullanıcı tarafından erişilemediği/değiştirilmediği anlamına gelmez. Bunun için dahili hafıza dışında bir alan bulamadım. Birisi bir yolu bilirse lütfen bana bildirin. – Pritam

+0

Tek yapmanız gereken, fotoğrafın harici depolama biriminde çekilmesi ve ardından uygulamanızdaki diğer verilerin güvenliğini sağlamak için kullandığınız herhangi bir güvenli çözüme götürülmesidir. Bunu yapmasanız bile, kamera etkinliği ile çekilen fotoğrafı otomatik olarak telefon galerisine ekleyecek bazı telefonlar olduğunu unutmayın. Tam olarak hangi telefonları gördüğümü hatırlıyorum - belki de Droid Eris ve diğer birkaç SenseUI telefonu? – jjb

+0

Bu bilgi için teşekkürler. Bu yüzden kamera aktivitesini kullanmak akıllıca değildir, hala bir kopyasını tutabilir. Şu anda benim kopmamın değiştirilmemesi yeterli. Bu yüzden harici depolamada geçici bir kopya oluşturup daha sonra dahili belleğe geri taşımakla aynı şeyi yapıyoruz. Ancak diğer gizlilik durumları için varsayılan uygulamalara güvenemeyeceğimiz anlamına gelir. Bunu yapan telefonları hatırlarsan haberim olsun. – Pritam

İlgili konular