Ionic Native Camera — 0 Byte Fotoğraf Kaydetme Sorunu (Çözüm)

Merhaba arkadaşlar, geçenlerde Ionic 3 ile yazdığım bir uygulamada Ionic Native Camera (cordova-camera) modülünü kullanarak bir klasöre fotoğraf kaydetmem gerekti. Hiçbir yer belirtmezseniz cordova otomatik olarak Android/data/cache klasörünün altına kaydediyor, fakat Clean Master gibi cache temizleyen programlar bu fotoğrafları silebiliyor. O yüzden dataDirectory dediğimiz uygulamaya ait bölüme kaydetmek daha mantıklı oluyor.

Fotoğrafı base64 encoded olarak çekip bloba çevirip camera.writeFile metoduna gönderiyordum. Olumlu senaryoda her şey güzel çalıştı, fakat bazı Android cihazlarda bir şekilde fotoğraf çekerken timeouta düşüyor, ne hata veriyor ne başarılı oluyor. Fotoğrafı kaydediyor fakat 0 byte boyutlu bir fotoğraf oluşturuyor. Haliyle kaydetmesinin bir esprisi olmuyor.

Biraz araştırma yaptığımda anladım ki, polyfill ve cordovanın index.html’deki sırası önemliymiş. Polyfill dosyasını cordova.js dosyasının üzerine alınca sorun yaşanan Android cihazlarda da sorun çözüldü. İsterseniz kodlarla açıklayayım;

Fotoğraf Kaydetme

// Fotoğraf çekme ve kaydetmenin başlatıldığı fonksiyon
// Önyüzden bu fonksiyonu çağırdığınız zaman kamera açılır ve fotoğraf kaydedilir.
public getPicture() {
// Kamera seçenekleri burada belirtiliyor
const options: CameraOptions = {
quality: 50,
destinationType: this.camera.DestinationType.DATA_URL,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE,
sourceType: this.camera.PictureSourceType.CAMERA,
cameraDirection: 0,
}

Buraya kadar her şey çok güzel çalışıyor. Fotoğrafı çekiyor ve base64 olarak gelen veriyi bloba çevirip yazıyor ama sadece bazı cihazlarda. Stabilitenin sağlanması açısından aşağıdaki sıralamayı da değiştirmek gerekiyor.

index.html Polyfills ve Cordova Sıralaması

Pollyfills.js script etiketi cordova.jsnin üzerine alınmalıdır, şu şekilde;

<script src="build/polyfills.js"></script>
<script src="cordova.js"></script>

Böyle bir deneyim yaşadım, umarım bu yazı bir gün birinin işine yarar ve faydalı bir iş yapmış olurum. Sağlıcakla kalın :)

Written by

Full-Stack Front End Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store