Hirdetés

Alkalmazásfejlesztés badára: Távoli Flash tartalmak lejátszása

A mai bejegyzésben az előző posztban ismertetett Flash lejátszót fogjuk továbbfejleszteni. A múltkori cikkben létrehoztunk egy Flash tartalmak lejátszására alkalmas vezérlőt, a visszajátszást három gombbal vezérelhettük: stop, play és play/pause billentyűket használtunk. Ma kibővítjük az alkalmazást, a lejátszandó tartalmakat egy előre megadott tárhelyről fogjuk lerántani, az eddigi statikus módszer helyett.

Ehhez egy ContentTransfer nevű, többek között fájlok fel- letöltésére használható osztályt fogunk használni, de ennyiből nem áll meg a dolog. Első körben hozzá kell adnunk a CONTENT_TRANSFER névre hallgató privilégiumot a manifest.xml fájlban, majd be kell include-olnunk az FContent.h header fájlt a megfelelő osztályunkban. Ez után ezt az osztályt le kell származtatnunk az Osp::Content::IContentTransferListener interfészből, amely hat listener függvény implementálását vonja maga után:

  • OnContentDownloadCompleted - meghívódik, ha készen van a letöltés
  • OnContentDownloadToBufferCompleted - meghívódik,ha készen van a bufferelés
  • OnContentTransferCanceled - visszavonás esetén hívódik meg
  • OnContentTransferInProgress - a folyamat során hívódik meg
  • OnContentUploadCompleted - meghívódik, ha készen van a feltltés
  • OnDownloadDescriptorReceived - meghívódik,ha érkezik egy OMA download descriptor


a letöltés szekvencia-diagramja

Nekünk a legelső az érdekes, ezt kell majd implementálnunk, de ne rohanjunk ennyire előre, még el sem indítottuk a letöltést! Ehhez nem kell mást tennünk, mint felvenni egy ContentTransfer objektumot, amelynek a construct() függvényében át kell adnunk egy referenciát arra az osztályra, amely megvalósítja a fent említett interfészt. Ha ez sikeres volt, meghívhatjuk a Download() függvényt, amely hét bemenő paramétert vár. Az első a cím, ahonnan le akarjuk szedni az erőforrást; egy Osp::Base::Utility::Uri típusról van szó. A második a fájlméretet jelzi, ha 0-t adunk meg, a rendszer nem ellenőrzi a háttértáron lévő szabad hely mennyiségét. Ezek után jöhet a mentés helye, amelyet egy String reprezentál, majd pedig egy boolean következik, amely azt mondja meg, hogy ha már létezik a fájl, felülírja-e azt a rendszer. A legvégén egy RequestID-t (üresen is maradhat) kell megadnunk, valamint opcionálisan felvihetjük az IContentTransferListenert megvalósító osztály példányának a referenciáját, valamint egy timeoutot is megadhatunk. Utóbbi alapértelmezésben 0-ra van állítva, ez azt jelenti, hogy nincsen timeout, a letöltés korlátlan ideig tarthat.

Megvan a letöltés, amely a programunk hátterében fog menni, ez után már nincs más dolgunk, mint megírni az OnContentDownloadCompleted() függvény törzsét. Itt az előző bejegyzésben ismertetett módon létre kell hoznunk a Flash vezérlőt a már letöltött .swf kiterjesztésű fájlból, és mehet is a lejátszás. Érdemes egyébként vizsgálni a letöltés státuszát, ezt legegyszerűbben egy booleannal tehetjük meg, amelyet akkor állítunk igazra, ha készen van a művelet. Így megakadályozhatjuk, hogy a felhasználó meghívja a még nem constructolt Flash példányunk play() függvényét.

Ennyi volna a távoli Flash tartalmak lejátszása, példakód ismét elérhető a Mobilarénás SVN-ben, a múltkori, Fless névre hallgató projektet kell letölteni.

dr. Kind

Azóta történt

Előzmények