Bildauswahl-Dialog mit PhoneGap auf Blackberry- und Android-Tablets

phonegap_dp2Das Problem sind die Quirks! PhoneGap kann einem viel Arbeit hinsichtlich der Kompatibilität zwischen den verschiedenen Geräten und den entsprechenden JavaScript-APIs abnehmen. Manchmal klappt es aber nicht. So ist es z.B. bei dem sourceType: PHOTOLIBRARY. In der Camera-API.

Die Ausgangssituation

Ich möchte in meiner App per Datei-Browser eine Bilddatei auslesen lassen. Wenn man sich die Camera-API in der PhoneGap-Dokumentation anschaut, ist dies auch gar kein Problem. Es sollte genügen Camera.PictureSourceType.PHOTOLIBRARY als sourceType der Methode getPicture zu übergeben. Dies funktioniert prima, wenn man sich auf Android-Geräten tummelt. Auf dem Blackberry Playbook geht in diesem Fall trotzdem die Kamera auf.

Hilfe durch WebWorks-Plugin

Schon vor ein paar Wochen habe ich mein WebWorks-Plugin für Blackberry in den GitHub gestellt. Damit ist es ganz einfach den nativen Bildauswahl-Dialog auf dem BlackBerry zu öffnen.

Die Lösung

Die vollständige Lösung (kann) dann so aussehen. Wer meinen Blog nicht verfolgt: It’s TypeScript Zwinkerndes Smiley

    export class FileDialog {

        public static browseForImage(title: string, callback: (data: string) => void ) {
            if (device.platform=="BlackBerry") {

                // Bei Blackberry kannn man direkt per WebWorks-Plugin browsen
                FileDialog.browseForOpen(title, "Images", "*.jpg;*.png;*.bmp;*.gif", (imageData: string) => {
                    callback("file://" + imageData);
                });

            } else {

                // Bei Android kann man die Camera-API nutzen (nicht Blackberry)
                navigator.camera.getPicture((imageData:string) => {
                    
                    // Android stellt hier noch den Zusatz "content://" voran. 
                    callback(imageData);

                }, (message) => {

                    // Wenn ein Fehler aufritt, in die Konsole damit
                    console.log("getPicture-Error: " + message);
                }, {
                    quality: 100,
                    destinationType: 1, /* File-Url */
                    sourceType: 0 /* PhotoLibrary */
                });
            }
        }

        public static browseForOpen(title: string, filterText: string, filter: string, callback: (data: string) => void ) {
            blackberry.devbar.dialog.browseForOpen(title, filterText, filter, callback);
        }

        public static browseForSave(title: string, callback: (data: string) => void ) {
            blackberry.devbar.dialog.browseForSave(title, callback);
        }
    }

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>