← Alle Erweiterungen

Native Erweiterung

KlugGallery

com.klug.gallery

KEIN APM NÖTIG. Herunterladen und loslegen. Einfacher geht es nicht. Einfach das Adobe AIR SDK aktualisieren. Wenn Sie Hilfe brauchen, sind wir für Sie da.

Speichern Sie Fotos und Videos aus Ihrer AIR-App in der Galerie des Geräts, auf iOS und Android, mit der kleinsten Berechtigung, die das System anbietet.

iOS Android Im Produktiveinsatz Ab €19 / Jahr · Kaufen

Überblick

KlugGallery speichert Bilder und Videos aus Ihrer AIR-App in der Fotogalerie des Geräts: ein BitmapData, etwa einen Schnappschuss, oder eine Foto- oder Videodatei, die Ihre App aufgenommen oder heruntergeladen hat.

Es fragt nur das ab, was zum Speichern nötig ist. Auf iPhone und iPad fordert es Nur-Hinzufügen-Zugriff an, sodass Ihre App die Mediathek des Nutzers nie sieht. Ab Android 10 braucht das Speichern überhaupt keine Berechtigung; unter Android 6 bis 9 fragt KlugGallery zur Laufzeit nach Speicherzugriff.

Die Dateien landen dort, wo Nutzer sie suchen: in Fotos unter iOS und unter Android in Pictures/<app name> oder Movies/<app name>.

KlugGallery ist in unseren Apps auf iOS und Android täglich im Einsatz, unserem Praxisbeweis.

Funktionen

  • Eigenständig: eine ANE, keine Kernbibliothek und keine abhängigen ANEs, die Sie ergänzen müssten
  • Ein BitmapData als PNG oder JPEG speichern, mit Qualität und Dateiname
  • Eine Foto- oder Videodatei in die Galerie kopieren (mp4, mov und m4v werden als Videos gespeichert)
  • iOS: Nur-Hinzufügen-Zugriff auf Fotos, die Mediathek des Nutzers bleibt privat
  • Ab Android 10: keine Berechtigung nötig; Android 6 bis 9: Speicherberechtigung zur Laufzeit
  • Eigener Albumordner pro App unter Android
  • Berechtigungsstatus und eine Verknüpfung zu den App-Einstellungen nach einer Ablehnung
  • Ein Ereignis pro Ergebnis, mit der Fehlermeldung, wenn etwas fehlschlägt

Unterstützte Plattformen

iOS iPhone · iPad · Fotos, Nur-Hinzufügen-Zugriff
Android Smartphones · Tablets · faltbare Geräte · MediaStore

Auf anderen Plattformen gibt isSupported false zurück, sodass derselbe Code in einer plattformübergreifenden App bleiben kann.

Erste Schritte

Fügen Sie die Erweiterung Ihrem Application Descriptor hinzu:

app.xml
<extensions>
    <extensionID>com.klug.gallery</extensionID>
</extensions>

iOS: Erklären Sie in den InfoAdditions, warum Ihre App in Fotos speichert:

app.xml · iPhone InfoAdditions
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Saves your snapshots and videos to Photos.</string>

Android: nur für Android 6 bis 9 nötig; neuere Versionen ignorieren den Eintrag.

app.xml · Android manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                 android:maxSdkVersion="28"/>
<application>
    <activity android:name="com.klug.gallery.KlugGalleryPermissionActivity" android:exported="false"
              android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
</application>

Codebeispiele

Drei vollständige Abläufe, entnommen der API, die in unseren Apps läuft. Jeder Aufruf kehrt sofort zurück; das Ergebnis kommt als GalleryEvent an. Vollständige Dokumentation →

1 · Einen Schnappschuss speichern
Snapshot.as
import com.klug.gallery.Gallery;
import com.klug.gallery.GalleryEvent;
import flash.display.BitmapData;

var gallery:Gallery = Gallery.getInstance();
gallery.addEventListener( GalleryEvent.ADD_COMPLETE, function( e:GalleryEvent ):void {
    showToast( "Saved to your gallery" );   // your app function
});
gallery.addEventListener( GalleryEvent.ADD_ERROR, function( e:GalleryEvent ):void {
    trace( "could not save: " + e.status );   // the error message
});

function saveSnapshot( picture:BitmapData ):void
{
    if ( !gallery.isSupported ) return;
    // "png" or "jpg"; quality 0..1 counts for jpg
    gallery.addBitmapData( picture, "jpg", 0.9, "snapshot.jpg" );
}
2 · Ein aufgenommenes Video speichern
Video.as
import flash.filesystem.File;

gallery.addEventListener( GalleryEvent.ADD_FILE_COMPLETE, function( e:GalleryEvent ):void {
    showToast( "Video saved" );
});
gallery.addEventListener( GalleryEvent.ADD_FILE_ERROR, function( e:GalleryEvent ):void {
    trace( "could not save the video: " + e.status );
});

// a File or a native path; mp4, mov and m4v are saved as videos, everything else as a photo
var clip:File = File.applicationStorageDirectory.resolvePath( "clips/last.mp4" );
gallery.addFile( clip );
3 · Die Berechtigung nur bei Bedarf abfragen
Permission.as
var pending:BitmapData;

function save( picture:BitmapData ):void
{
    var status:String = gallery.authorisationStatus();
    if ( status == Gallery.AUTHORISED || status == Gallery.LIMITED )
        gallery.addBitmapData( picture, "png" );
    else if ( status == Gallery.DENIED || status == Gallery.RESTRICTED )
        askToOpenSettings();                 // your dialog, then gallery.openDeviceSettings()
    else
    {
        pending = picture;                   // not asked yet: show the system prompt
        gallery.requestAuthorisation();
    }
}

gallery.addEventListener( GalleryEvent.AUTHORISATION, function( e:GalleryEvent ):void {
    if ( e.status == Gallery.AUTHORISED && pending != null )
        gallery.addBitmapData( pending, "png" );
    pending = null;
});

API-Übersicht

Gallery.getInstance()Gibt die einzige Instanz zurück.
isSupportedTrue unter iOS und Android, sonst false.
authorisationStatus()AUTHORISED, DENIED, NOT_DETERMINED, SHOULD_EXPLAIN, RESTRICTED, LIMITED oder UNKNOWN.
requestAuthorisation()Zeigt die Systemabfrage, solange der Nutzer noch nicht entschieden hat. Die Antwort kommt als GalleryEvent.AUTHORISATION an.
addBitmapData(bitmapData, format, quality, filename)Speichert das Bild als "png" oder "jpg". Ergebnis: ADD_COMPLETE oder ADD_ERROR.
addFile(file)Kopiert eine Foto- oder Videodatei (File oder nativer Pfad) in die Galerie. Ergebnis: ADD_FILE_COMPLETE oder ADD_FILE_ERROR.
canOpenDeviceSettingsTrue, wo sich die App-Einstellungen öffnen lassen.
openDeviceSettings()Öffnet die Einstellungsseite Ihrer App.

Ereignisse

GalleryEvent: Der type benennt, was passiert ist, status enthält die Details.

GalleryEvent.AUTHORISATIONstatus = der neue Berechtigungsstatus
GalleryEvent.ADD_COMPLETEdas Bild wurde gespeichert
GalleryEvent.ADD_ERRORstatus = die Fehlermeldung
GalleryEvent.ADD_FILE_COMPLETEdie Datei wurde gespeichert
GalleryEvent.ADD_FILE_ERRORstatus = die Fehlermeldung

KlugGallery kaufen

Eine Jahreslizenz für eine AIR-Anwendung, mit allen Updates für 12 Monate. Nach der Zahlung erhalten Sie die Erweiterung, die ActionScript-Bibliothek und die Dokumentation per E-Mail, in der Regel innerhalb eines Werktags. Lizenz und Bedingungen

Simple
€19 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Kein Support
Simple kaufen
Standard
€149 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Antwort per E-Mail innerhalb von 7 Tagen
Standard kaufen
Priority
€299 / Jahr
  • Lizenz für eine AIR-Anwendung
  • Alle Updates für 12 Monate
  • Antwort per E-Mail innerhalb von 48 Stunden
Priority kaufen
Die Steuern werden an der Kasse von Link (Stripe) berechnet. Die Application-ID Ihrer AIR-App geben Sie beim Bezahlen ein.

Voraussetzungen

AIR SDK51.x (HARMAN)
iOSiOS 13 oder neuer (Nur-Hinzufügen-Zugriff ab iOS 14)
AndroidAndroid 6.0 (API 23) oder neuer
iOS-DescriptorNSPhotoLibraryAddUsageDescription in den InfoAdditions
Android-DescriptorBerechtigungs-Activity; Speicherberechtigung für Android 6 bis 9