← Alle udvidelser

Native udvidelse

KlugGallery

com.klug.gallery

INGEN APM NØDVENDIG. Download og nyd. Det bliver ikke enklere. Opdater blot Adobe AIR SDK. Har du brug for hjælp, er vi her.

Gem fotos og videoer fra din AIR-app i enhedens galleri, på iOS og Android, med den mindste tilladelse, systemet tilbyder.

iOS Android I produktion Fra €19 / år · Køb

Oversigt

KlugGallery gemmer billeder og videoer fra din AIR-app i enhedens fotogalleri: en BitmapData som f.eks. et snapshot, eller en foto- eller videofil, som din app har optaget eller downloadet.

Den beder kun om det, som lagringen kræver. På iPhone og iPad anmoder den om adgang kun til at tilføje, så din app aldrig ser brugerens bibliotek. På Android 10 og nyere kræver lagringen slet ingen tilladelse; på Android 6 til 9 anmoder KlugGallery om lageradgang under kørsel.

Filerne havner, hvor brugerne leder efter dem: i Fotos på iOS og i Pictures/<app name> eller Movies/<app name> på Android.

KlugGallery er i daglig brug i vores apps på iOS og Android, vores proof of concept.

Funktioner

  • Selvstændig: én ANE, intet kernebibliotek eller afhængige ANE'er at tilføje
  • Gem en BitmapData som PNG eller JPEG, med kvalitet og filnavn
  • Kopiér en foto- eller videofil til galleriet (mp4, mov og m4v gemmes som videoer)
  • iOS: fotoadgang kun til at tilføje, brugerens bibliotek forbliver privat
  • Android 10 og nyere: ingen tilladelse nødvendig; Android 6 til 9: lagertilladelse under kørsel
  • Egen albummappe pr. app på Android
  • Tilladelsesstatus og en genvej til appindstillingerne efter et afslag
  • Én hændelse pr. resultat, med fejlmeddelelsen, når noget mislykkes

Understøttede platforme

iOS iPhone · iPad · Fotos, adgang kun til at tilføje
Android telefoner · tablets · foldables · MediaStore

På andre platforme returnerer isSupported false, så den samme kode kan blive i en cross-platform-app.

Kom i gang

Tilføj udvidelsen til din applikationsdescriptor:

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

iOS: forklar i InfoAdditions, hvorfor din app gemmer i Fotos:

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

Android: kun nødvendig for Android 6 til 9; nyere versioner ignorerer den.

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>

Kodeeksempler

Tre komplette flows, taget fra den API, der kører i vores apps. Hvert kald vender straks tilbage; resultatet ankommer som en GalleryEvent. Fuld dokumentation →

1 · Gem et snapshot
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 · Gem en optaget video
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 · Anmod kun om tilladelse, når den er nødvendig
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-oversigt

Gallery.getInstance()Returnerer den enkelte instans.
isSupportedSand på iOS og Android, falsk andre steder.
authorisationStatus()AUTHORISED, DENIED, NOT_DETERMINED, SHOULD_EXPLAIN, RESTRICTED, LIMITED eller UNKNOWN.
requestAuthorisation()Viser systemets prompt, så længe brugeren endnu ikke har besluttet sig. Svaret ankommer som GalleryEvent.AUTHORISATION.
addBitmapData(bitmapData, format, quality, filename)Gemmer billedet som "png" eller "jpg". Resultat: ADD_COMPLETE eller ADD_ERROR.
addFile(file)Kopierer en foto- eller videofil (File eller native sti) til galleriet. Resultat: ADD_FILE_COMPLETE eller ADD_FILE_ERROR.
canOpenDeviceSettingsSand, hvor appindstillingerne kan åbnes.
openDeviceSettings()Åbner indstillingssiden for din app.

Events

GalleryEvent: type angiver, hvad der skete, status bærer detaljerne.

GalleryEvent.AUTHORISATIONstatus = den nye tilladelsesstatus
GalleryEvent.ADD_COMPLETEbilledet blev gemt
GalleryEvent.ADD_ERRORstatus = fejlmeddelelsen
GalleryEvent.ADD_FILE_COMPLETEfilen blev gemt
GalleryEvent.ADD_FILE_ERRORstatus = fejlmeddelelsen

Køb KlugGallery

En årlig licens til én AIR-applikation, med alle opdateringer i 12 måneder. Efter betaling modtager du udvidelsen, ActionScript-biblioteket og dokumentationen pr. e-mail, normalt inden for én hverdag. Licens og vilkår

Enkel
€19 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Ingen support
Køb Enkel
Standard
€149 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 7 dage
Køb Standard
Prioritet
€299 / år
  • Licens til én AIR-applikation
  • Alle opdateringer i 12 måneder
  • Svar pr. e-mail inden for 48 timer
Køb Prioritet
Moms og afgifter beregnes ved checkout af Link (Stripe). Du angiver application ID'et for din AIR-app under checkout.

Krav

AIR SDK51.x (HARMAN)
iOSiOS 13 eller nyere (adgang kun til at tilføje fra iOS 14)
AndroidAndroid 6.0 (API 23) eller nyere
iOS-descriptorNSPhotoLibraryAddUsageDescription i InfoAdditions
Android-descriptorTilladelses-activity; lagertilladelse til Android 6 til 9