← Alla tillägg

Inbyggt tillägg

KlugGallery

com.klug.gallery

INGEN APM BEHÖVS. Ladda ner och njut. Det blir inte enklare än så. Uppdatera bara Adobe AIR SDK. Behöver du hjälp finns vi här.

Spara foton och videor från din AIR-app i enhetens galleri, på iOS och Android, med den minsta behörighet som systemet erbjuder.

iOS Android I produktion Från €19 / år · Köp

Översikt

KlugGallery sparar bilder och videor från din AIR-app i enhetens fotogalleri: en BitmapData, till exempel en ögonblicksbild, eller en foto- eller videofil som din app har spelat in eller laddat ned.

Det ber bara om det som sparandet kräver. På iPhone och iPad begär det åtkomst endast för att lägga till, så att din app aldrig ser användarens bibliotek. På Android 10 och senare kräver sparandet ingen behörighet alls; på Android 6 till 9 ber KlugGallery om lagringsåtkomst vid körning.

Filerna hamnar där användarna letar efter dem: i Bilder på iOS, och i Pictures/<app name> eller Movies/<app name> på Android.

KlugGallery används dagligen i våra appar på iOS och Android, vårt proof of concept.

Funktioner

  • Fristående: ett ANE, inget kärnbibliotek eller beroende-ANE:er att lägga till
  • Spara en BitmapData som PNG eller JPEG, med kvalitet och filnamn
  • Kopiera en foto- eller videofil till galleriet (mp4, mov och m4v sparas som videor)
  • iOS: fotoåtkomst endast för att lägga till, användarens bibliotek förblir privat
  • Android 10 och senare: ingen behörighet behövs; Android 6 till 9: lagringsbehörighet vid körning
  • Egen albummapp per app på Android
  • Behörighetsstatus och en genväg till appinställningarna efter ett nekande
  • En händelse per resultat, med felmeddelandet när något misslyckas

Plattformar som stöds

iOS iPhone · iPad · Bilder, åtkomst endast för att lägga till
Android telefoner · surfplattor · vikbara enheter · MediaStore

På andra plattformar returnerar isSupported false, så att samma kod kan ligga kvar i en plattformsoberoende app.

Kom igång

Lägg till tillägget i din applikationsbeskrivning (application descriptor):

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

iOS: förklara i InfoAdditions varför din app sparar i Bilder:

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

Android: behövs bara för Android 6 till 9; nyare versioner ignorerar 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>

Kodexempel

Tre kompletta flöden, hämtade från det API som körs i våra appar. Varje anrop returnerar direkt; resultatet kommer som en GalleryEvent. Fullständig dokumentation →

1 · Spara en ögonblicksbild
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 · Spara en inspelad 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 · Be om behörighet bara när den behövs
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-översikt

Gallery.getInstance()Returnerar den enda instansen.
isSupportedTrue på iOS och Android, false på övriga.
authorisationStatus()AUTHORISED, DENIED, NOT_DETERMINED, SHOULD_EXPLAIN, RESTRICTED, LIMITED eller UNKNOWN.
requestAuthorisation()Visar systemets fråga så länge användaren inte har bestämt sig. Svaret kommer som GalleryEvent.AUTHORISATION.
addBitmapData(bitmapData, format, quality, filename)Sparar bilden som "png" eller "jpg". Resultat: ADD_COMPLETE eller ADD_ERROR.
addFile(file)Kopierar en foto- eller videofil (File eller inbyggd sökväg) till galleriet. Resultat: ADD_FILE_COMPLETE eller ADD_FILE_ERROR.
canOpenDeviceSettingsTrue där appinställningarna kan öppnas.
openDeviceSettings()Öppnar inställningssidan för din app.

Händelser

GalleryEvent: type anger vad som hände, status bär detaljerna.

GalleryEvent.AUTHORISATIONstatus = den nya behörighetsstatusen
GalleryEvent.ADD_COMPLETEbilden sparades
GalleryEvent.ADD_ERRORstatus = felmeddelandet
GalleryEvent.ADD_FILE_COMPLETEfilen sparades
GalleryEvent.ADD_FILE_ERRORstatus = felmeddelandet

Köp KlugGallery

En årslicens för en AIR-applikation, med alla uppdateringar i 12 månader. Efter betalning får du tillägget, ActionScript-biblioteket och dokumentationen via e-post, vanligtvis inom en arbetsdag. Licens och villkor

Enkel
€19 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Ingen support
Köp Enkel
Standard
€149 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Svar via e-post inom 7 dagar
Köp Standard
Prioritet
€299 / år
  • Licens för en AIR-applikation
  • Alla uppdateringar i 12 månader
  • Svar via e-post inom 48 timmar
Köp Prioritet
Skatter beräknas i kassan av Link (Stripe). Du anger application ID för din AIR-app under köpet.

Krav

AIR SDK51.x (HARMAN)
iOSiOS 13 eller senare (åtkomst endast för att lägga till från iOS 14)
AndroidAndroid 6.0 (API 23) eller senare
iOS-descriptorNSPhotoLibraryAddUsageDescription i InfoAdditions
Android-descriptorBehörighetsaktivitet; lagringsbehörighet för Android 6 till 9