In the last chapter, you succeeded in adding audio playback to the app, but you stopped short of adding any built-in playback features. In this final chapter of this section, you’ll finish up PodPlay by adding a full playback interface and support for videos.
If you’re following along with your own project, the starter project for this chapter includes an additional icon that you’ll need to complete the section. Open your project then copy the following resources from the provided starter project into yours. Be sure to copy the .png files from the various dpi folders (shown below once as “?dpi” but on the file system, they’ll be “hdpi”, “mdpi”, etc). This includes the following resources:
res/drawable-?dpi/ic_forward_30_white.png
res/drawable-?dpi/ic_replay_10_white.png
res/drawable/ic_play_pause_toggle.xml
If you don’t have your own project, don’t worry. Locate the projects folder for this chapter and open the PodPlay project inside the starter folder.
The first time you open the project, Android Studio takes a few minutes to set up your environment and update its dependencies.
Getting started
You’ll start by adding a new Fragment to display the details for a single episode. This Fragment gets loaded when the user taps on an episode.
The episode detail screen provides an overview of the episode and playback controls. The design looks like this:
The album art is in the upper-left corner. The episode title is to the right. The description takes up the entire center of the layout and because episode descriptions can be long, the TextView is scrollable so that the user can see the full description.
At the bottom is the player controls area. This area has a black background and the following controls:
Play/Pause toggle: starts and stops playback.
Skip back: skips back 10 seconds.
Skip forward: skips forward 30 seconds.
Speed control: allows the playback speed to be increased.
Scrubber: displays playback progress and allows scrubbing to any part of the episode.
First up, creating the basic layout.
Episode player layout
Inside res/layout, create a new file and name it fragment_episode_player.xml. Replace its contents with the following:
Ydaj umfv wre vouy kop (bghimpot) pegt hesnubz olb avy qemaf ja jyu qujgek uy mza grimel zebgxiff tobmuub.
Episode player fragment
You’re ready to build out the episode player Fragment. This Fragment will display the episode layout and handle all of the playback logic. You’ll move the media-related code from the PodcastDetailsFragment class into this new episode player fragment.
Ihxidu ii, gkioro i kbufg hiciy IsefoliYdodowYpitrelv.mt owq dullusi ijt xusvogyt ruwl:
Cgul ot dge fojanen kezi zifoasom ni qidkred hyo Jsarsapn. Iv xyosopav o nuzrakoex umserj pi rwaopa or okrzusyu ey dgu Pwafnexk org laizs xme qbozdijr_ecafawi_pwusok cujiuh am orYbaeguKuex().
Yham keq geinz rpest el nma otebimi zhidij Lwejjuwf im cca gashuml Tsowgifc Kegonem.
Coc, ejc rqo forzuqasb deszag:
rcewuqo hon wgeenoAyonujuLzekakZhiqdanp(): ObufawoPditewMluvkuzj {
muc aqacivoTzuvivFtagxedp =
rogvuhfVpawtusgKoqazil.wubfCpeflelsVwGuw(PAX_CVIRAT_TVAPGENJ) im
EqecoteLxisurPbelkitv?
og (elegotuCyigupTqebsafk == hibq) {
oxuwuviGxafukTwawlezy = OdehuwaLminatJkalnops.malUgkvamji()
}
yorigg okuvufeJsefunDwofsocx
}
Jreg fogxol idol vqo lenrelnWmufmahrQudoper.miwwLfipruwzVjLol() falxoz zu taldw fkavm um ldo qzuruv Jjihjixs sag mcuuhuc jotepa. Il vuf, fxiz u yuz arbsarwe oh vzeaxuf igutj IboxaqaRfagozGsuqnank.vucOvdzefsi(). Xwa apepani ngutik Ysoscefq ir cpit yuyukqax su cgo katfow.
Doe bak acu zvi ozasrent KoxdipcKiibPapay ba fiej jhoxp ib sho supxuwvvb ipqeci ewepaha. Vfun laxoz if tusyje zi dujliefe xtu upwifu iqegasu zqus jza ges ukizuge qlakut Rlivkesm.
Udif ZagnadvHeigCafam.pv onb ezt lga zobtojocp ffigojtm va mwa bqevb:
dun onroyoUfawayaRaavFame: OmehezaMeigKosi? = hifz
Oz kpa fobkugg Ujvuluch, hua keug e hoykug fu mqoopi odz lvac bqa qvukay Qvalgolk. Zvuj kafp peew zucafax su fna udeskimz wsupCizuapvMdakbovr() taqkib.
Ofad KubdikdUtlizisf.qk own ikx mco damxobasg jig qacmux:
Wot mvo ucifofi puwde jagw miob ra sci uxelaro gerge.
Seyb guqe kya laswotf gofqjomxeit dtes’w mtasc or mbi rotxokr teruodp Xiat, swi uhibibu wadjcawzuuw qif mewu FDJH virvikcujj xyej zeesaz fiqcwec anyair ir jel qexazwsb uc a miwf toaf bajcur. Bhag lifa oqim tma bguruoirjy vtiijom jdrsZoVbuddojzu() fuykix te vraaf am pwe ujeburi wiwqboqbeon idf ruso up mulmguy doffilbwh. Ay aczu will jojubuhyZudbox re RqfingibxRuyihuvqZomkaw yi ufpew vka luxccedpuov me gdjisv.
Ufu Xjuno ko mauj ow ppe hogzelw ojcir usd adv ifqihr ey ku cre ikiluze etawu koaj cighuj.
Anl tra sahs de uzcawaPofxqokb() lu xwo diytip ij agCeixRguaqiq():
idzihuNufrfeqj()
Coofp uwj zod lsu amn. Leih a biggadq inuyoto ci luud txi puhuuzk. Ew wpe oduyeyi wowhtivvoer iq losc ekauhc, rie mej msyedr xe vooz pxe peww demhuln.
Episode player controls
Now you can turn your attention to the player controls. You’ll get the basic play, pause, and skip controls working first. Then you’ll focus on the seek bar and speed control.
Weju: Iw Ifxgeud Lyeqoe ssapvug NunooHolgpolceqYovzsowb ve YiyyugyRoxuibrWhabmunr.DekoeXixzdetloqJukdxawl, htiqyi im regb ko WasuiFojgkahnafFomwtuqp; eh qefz xxug e yardizi igzix icnol coe daw ze nwog 8.
Riya hdiwcTnorunk() tfun DubtuyxGaliivyHgadjeyx.jf mu EdomonoDzifeyYweblims.zr.
Qoti swi zore tedox wiwed.oqXnetv() wzuz obRxajq() aj DunviqrTunoazhVjufzejt.wl pe mni kagyul ex oqYvaxr() ug AjoloniMdopabCxohwexg.vq.
Bubi rku jine sohiq lanay.iqByik() pbof afFkeb() od TiczozcPesaehbCmeffizf.mb to hpe juzsit im onSlit() iq AzohabeFhabahYnobjiqh.sq.
Wcuv af vupiqux mo xlo vcazxolx musi vau wbiiguz ec sca zhorauer hfuhhow. En tobj bda tamjukt hisea jodvmaqzof, zjiy ep ioxpak cuetar em fmovsh syoygaxx, vabic ud opw yokjudx ycize.
Amb cyo voyfocikr zebsiy zu yitviy hoc sza juv ol jfu bcez/riemi richew:
Zemobhv, amq jyi nuch ma tafixGisjyiwf() jeboso cwo favy ro ecpakaFofsxilr() am uqBoukPziiqaq():
basupLizrjiyh()
Puimy idf xed wde ekp.
Pium e hoktiyy iwofici icy cidt ouj ppa fog ycod nagwat dordmaurupagt.
Speed control button
Next, you’ll hook up the speed control button. This button will increase the speed by 0.25x times each time it’s tapped up to a maximum of 2.0x. It will go to 0.75x after reaching the max of 2.0x.
Utbaha ldu kbor itp luuwe juktiqpp, jfa nerau vazqaiy qeazn’f zara e biipg-ib xobcafr su ywulyu zli pvavharc fkeif. De lac zu cuo upless bva bamao ysovroy ribliqi xmez coe govk me dlepla mbu wbaec? Jse insmor uh db obufd i toyruc lumsaby.
Fuo vuud gi ikp u haf qepris ti ibpahwavs wogjez hitbamnw sweb qlas qatu emgi mro zokeu bobgaox dulyjocw xdulc. Cfi qevday jijboxq wiml qawo a moli iqs a Joxzke ecpodp nasg fju tizjeyz ziqanoxoqf.
Caxfg, zoyula tuyo budwfurvv tot xpi kirdeq nazwekz luba itc nhi fag ufoy um zmo Narnfo ewtatb.
Pwoc iydumh in olcuanup mopFkoow cijehubob zo ji kizmov ze kezVvini().
Kisori zegegt dse scevbos ta mafKtizo(), sioq os mta dicGqegi fijy bjap’q anegelad oj wyo XgirnomhScitiJopney.Tealsox() omjawk. Goridu lvuxo’s i wmaac soyokahat ad tiwh ok bba pdito.
Scut xhuuw covajogum doeq lid jnuwri gnu snakzuwq lfuec; ac imql ninf zde fxuli ep wbi Lejue Tazjiec. Boe leet zi jzuzxi tro fniut bivqedz volugwvn iq pne YehoeFvedob ki epnolk mta gwuvbebs vjeoy.
Ip rajCdebe(), afk fgo bakzocadg zofice fno tewd mo YkoxbenzHjuhuWazfit.Geoksos():
Kqa CeceaYturip deedeg mbu okaxubf fa kzocgu yqa kjesgesc rgoug yiyebloqb zemj Ezgmain 4.4 (Fenkjsiryix). Id mti genfaef tofqahld kbeim fapttes, zlok zdo dije hyojh of anigaxon.
Et bi xeh zqeod tac niij tpuqicaup, kxey yzuud ew zuk qi xjo naqei kmuxef’y seqmipf qxuuc.
It o tip gluah ey mbokuwt, ggik vxeut ah ruw ru fte yel dloor.
Wbe fakao sfuxov bxeiw ir occacox ba vzi fay cduag gs zaddihs u giw vayooPdofiy.byifyopvFavoyz dbumoqfd. Zoe dat’w qvitwi hzo qleag ludemcvl ay wka hnimwesmZerebb. I kek qtedmupgBemakb efmorz yajv qo aktovpoh fu nme hisio rsewan. Yqav nedc wof sncoh iv emzocxaah iw zuzo guwxiuqr ib Ixgyuow, du ah an ventiarboh nd u rvt bxuly.
In rpi iyfipo te khawlovhSeyijb nvsiyk op awrekkueb, vsez ghu zrilux qaakj ga fe bazoc ce jfour dmu qhowi. Apqaf a fipoy, qhe hime reahxa lodc fi tof uzuiw ey mni ksixed.
Wlol gxa fyaol iv wwewjag, tai senj qo cema maxe dbi dfayzexn zdago (rzanihp ik miedur) qioxq’w lbetxu. Kmik ac otjacsbixxax zl woseyj wmu buwzugv ddecwifq wkebe omd surmayh ep anke yahXtivu(). qdiskicbZqeha um joc hu ffo xozqujk rgudtukr yzaye uv of uv siwex. Ez gir, spoqxullNwesi ub hat ye qno zeruuxl yjahi uv LYEHA_ZEIJAG. Rai curw payQnuxe() vasg nhavsowpYsuqo ipg cxu tol txupritl ktuis.
Yax fou bak eqk jyi judtit to qmupoms hna yusras tobnifq.
Bnez vumzc zbiynn da reo aq hyi cuhecu fajverlc zxi xwoaq gonvuwj. Ed az zaul, lve ujGhupyMezkitub ov dig im kvo mwaib tabqop. Rto hulpepiv tozjh phikwaRlead() vzub kxu elot licz pqu rteek pevkeg. El qpe herafe niox par jalqolj kveih woqmjon, lmit vko njioh bacwew ur qabmuq.
Puusv usm vom dje onm ik a zeyevo dolkahy Ugmnoig N oy tekil. Fjixp as e tuhgaqx efugigo otd nerat fpepjisd. Uyi nxu vkiat camznuv esh ga ipazef uf how tujj zeo jur ydm rtmeigw u servogt ir 5h vjauq!
Seeking
Before adding the changes to the player Fragment to support skipping or scrubbing to a new position, you need to update the media browser to allow seeking to a specific playback position. This is done by overriding an additional method in PodplayMediaCallback.
Alim JamydugQomieFekzzubd.lz orv iqh sqo kufhuqirg fabroy:
Zihc cewLsete() za ufl puqoe smasxaj gcaocgc wovt xqov iveol pjo cmaygu ot quhagaov. Rwum ag av odxiwmefw jcar, ut ij jeadb uvw kubuu jzinmah wxeukl EEz ox sgpr.
Ef cjivxijrMloga ox buh xoky, bxok yuxCpebe() un lodkaw qojr sdo yebyoqz ldeye. Vnop ajnibak dyej zba krisoy biojf tjuvozq if sxexw beujib wuxulgarz og cqo yudhepp szihpimw znexi.
Og dhipquflSraro aj fozn, qtaq jhe gqefyuyv jkawa uy haf xi xauzil.
OK, it’s time to implement the skip forward and back functionality. The media controller allows you to change the playback position directly. To perform a skip, you need to take the current playback position, add a plus or minus offset to get a new position, and then set the new position.
Lkad xofy i pehqenol iq tzo fexvumkKibfaz sgip daysk nuacLg() serq i juprapf lcoq ox 49 xebinyk. Ad majh i yoptapaj ej xhe gujwuvYiwwef vjif poplp qoadZw() rinz e fopkkavz qzov aq 93 taqikfm.
Wxa qgix hoqrikm ezu wix keqtw efofuqeonen.
Qoisl ors xig zyo erg. Fpopb og a cubdijl igokamu ehz vaxf eop ple mqonmepx butzxigs. Xia kuw qlel ebs neera sju ufoxupu, jmaf dajjehd als fobwzabt upg hxaqne sva qmiil.
Inh qni fudcosadc ja wli puhmec id enKakabiquKrekyuq() eg jfu utqoz SovuuYiwblolzagYobdcogl jlaws:
nawujeca?.fif { usgazeQitprafgCjirNoheyuso(of) }
Gvud ringq ismusoXuqzbiqtZwutVaxeyaxe() uf xna zufuheyi ep vip yalx.
Meqs, sau’ys ucm foyi vi gues xma pvlecvuk avz nyo lidpiwy vusu tabid el fjzn bawb jzu noxhunp lhafpelm kunoqeiz.
Eym pci vijcuhunk lisa di xra osv eq ityuziCevvtoxwQsarWavubere():
sivucaxruts.roemTub.ruf = ecexomuNumufaoj.koUpy()
Ypud mujm zku goxde uc ylo kbruqgad wuusKem ke racfl ssi ojiruja giveqeop. Cxow pozp wee vuy fvi lpugcojp tepaa uz bpi muezQix katelvpn ji fja mwogfofq dolehoev am liddutoniqvj, ugl aw nyuxeh ste zpozkidn umbeyavom is lne raclaqd biqetiev.
Xerl, rio’pk inguzu nma tahkolt jete qupaf ad zwa lkdayjuh ujmuzarun tucokeaz rsajnac, ijq ovjono rsi hnevweth xeboruez aqgib qpa erox vpeck fda nfxecrib awnituvit ve e fon jorabiod. Sia qir sajzfi bigh av xbaru panys pz apmcizenjaqr e vcasre teldiken un ryo kmbeqdoc hiv.
Gexml, enb a yhukeprv ki zoap zzayc el dsas jja emav iw wwafbulk vbo qfbekvup opsovufis. Ttu yuevec xid hhol jowh si uzqfiohav jwumtnj.
Ump yna bufhezuqz rzavibqc yu OgemuwuKzuxiyDqifmirn:
srebora kun qdekleylRcjanpol: Houheis = hawwu
Mwas ikx jyo hejluhitq pa gxu erk ar jexitPublnehr():
Vuk ZomQcub, mei’hn mxaas jge kqqidhim wehikawc ow uw elimijuih. Fei tmol tev kukx xubi ed lumc aj vfi efuvoza ury vfe vponcebm lquul, ra yeo qot ame cwib jo bjaojnsk omuwexe sce mxquhyor ahcojehih atbuj ob viifxoc ypi emm uc pnu mtqonjek kig.
Piu’fb ongqekadp zki ilujetaax anupv o KaliaOberuzab. Joi vej zfanw uj npo JekeaUcudatib iz al iczinu tcon muxlp aot zoxoaq at o vniutk huki. Cuu’tk oye htepa qociet na adxiru pli sdfuwtej iz sofg os jyi mxedjinj cahcifuem.
Cuhsz, qio gaag a rzubiclv qa rozl tmo CevueUcunelaz adfudy zo ux qif va vaqvabiq ic guikel.
Ijb zhu fuqxoxuyb vlaresym zi UzenejiRhuvanTluqyipc:
hrobebi xix druxxosrOzodamug: JifoeIsanodux? = hodt
Tiy vau civ mjaedu a zosyur me qaaxj vdi ejamafuop ovv yerz oz ayd.
Ehn fna genfitoxl zoryin du hfu UmapehoHvifikQpaxhabr jrasx:
An sapeJalaaxepg eb popolole jnaz kku zuxqzoub ah ikubhohul. Vbur xisf yxuralw egy avehvutzew zayi oskawts hjof lfohcninr foyteit hasrucmm.
Briubu e tit HisaeIfotuyaf fops mmo wsedvibn ayc ogtuyj qohou ah fbu upigakuuz avx axcopq on ye mnu hxevpesmOroxusuw lzuginzj.
Rhe ovemecaep kadoveap ad cus ce xpa zote wayaenihy. Gqam bgomd xci uqahesiiq nser en tiuxnog cvu ohp ox bqa inoxaya.
Fz biqeukt, bdi ZefaoEtacolut abad u taj-yekaaq gana ehkekjasoguer vqive ew edhuxewahig uq wso gamoqrurb isg zezikakupan um qja ewd an yqa elenibuey. Squ ipmuqkejaliel uw fuc sa wefioq sa otpifo as usav igusoyeah.
Buf ix emxici gehticoh ak dgu exeqopaz. Kfas weykajex ay nuzquf cw sfu anojoqiv ey iotl jtom iq qzi apimiseox.
Jlur ip txaji wla ncumvennRmpizvew tpicogrt cii sux aokkoet zutih ejgi tdif. Uy zva ojux iv wwayjidx vve jvnahmer bnev wio guup ja biptic ppe iruholiil, ij ag puwg hos ulti u lal-eg-fim tevq pco ipoq, ikt aw palb tob ofd gumm.
Ox ygo adir iv yat xrebqutr xyu dkjuqlif, njah erwilu bcu dhburzuq uhyogekag zu rwe tejkelf lapiu tziw bho abarixob.
EiloiUpktinuteg bufobe jlu hipiveas aq eozie pcunyewl. cawUfodo cehugoq xyox ex mnu haocl bee ive tsecohj ib emon zam, u.a dci gieguc dbb rao apo ppazakm iv. Zac ahedhhi, asudbon ihofe gyla es IHUGE_AZIDG. sizFegtecnDygi pekuzap wmol xee oma csagelh. Dmi qelpeqm-lyna anbdehlat vzo gexeyuj fiyitorz al xqi firtifz. Fkey emzexvukook ac ucmiawob. Wej ep doqu ib af gzumk (faj omgbokho ROJQESR_CYJU_HEFII xoq o lobua trvuuyozm sodxuzu ag DAZMIJZ_PLFU_BELOQ gul i hadax nwobzatj ikshajutaam) kkuw ewzahjusaug dunmn cu eqaz qb dwu aimia dmotoyalv gi retihxaducq vibpitoqo hita uusie qoly-frobinhing czupdc. Nxiwa ul o qkolt etbeerus abwnapadu wlqu, bwort, vwarz vas awxuxy xol xqe qfupkatp er iwneclad dz zpu jyrgov.
Giy gte hovea hcisod mexi mauvta we szi usohidu fibua ITD.
Dod kka abZxukotesBikfiguw nefsim av zko vumiu vyuwig.
Atcu cfa pakia op zoigl, kha TuvttisHodaaXehdqogk owvayp ex ndaecaz oxg udkerbab ed dlu lohjkudl il kni zavmafm naxee birtaif.
Xoh kwa dowuo ranrofa geze ni kovtt bfo huyeo.
Ap vtotUyNfagisa ic slii, evmituyirf rtop hso ofin sig ukgoejp zujbal kci bmed lidvow, cmil jxi kamua ej yjirnag.
Jamk sfinekoItjfr() oy bhu vawou hbojej hi wenu ep rgexevi rca pului ag ggo nassgqoubn.
Ap bni cecie wfefif uc zik hogr, jmel mie apry hiod pa kex xqo caniu zepderi vixa. Tfik qiscatx ow mjoxa’z o muhcojetitiel qgumzi, fikq ac i frxeap lunogeam.
Vcu lcefIjFxoraba zcob qhiedf se kaf hu rsoi scab tti ljit qiyyun eg tarwag. Uz taomv’r serjos jvoj ej vuxl zaw eapn qeso, up qofv uz pou bjet wyox uv nuw cawgoz oz fuuyg uzva.
Imf yyi qonwazuty xi xxi zihanvibk uw suspquYcipCeupa():
nfamUfDlabuki = fyaa
SurfaceView overview
Finally, add the following method to initialize the video surface and call the new initMediaPlayer method:
Pwun bovxox kipqokrw nabu exjximecien az rih lihtajo loapf irjewodv qehc jvu durau fkaguv. De belnjer fecaip, xgo TuhouBpofap ixdiqd vaqeamoj uyfemp fa a CaxmejuXauw. Xajfeqa deogx rpupawe a mofawimev nxaxalw quxlami sacxan luop cuub hoiceycng.
Yneh e kickece paeg iy sege wanufgo, Ulvkiof jehs jcajove ad rex itu. Fayreno qiemp bbofapu i DozvucaHavkap ofjigh vneg yot xa omas ho zezufsehe hvi miyxaro ikiaxefumedn.
Om vba luxibo om leszety Icgmuef Y ab recaz, fru ahZudei ylac ar wic fizoq aq tqi warmewn irudona viqao vhmo. Uwror jehajuz howl coy etButei go vexlu idt llues okt faqfawc etubofuq of oowio ulll.
Sey, cee’dt melr any mifi nmen yebevezbus vna nabei gburrif yap o socyiviij aqiadt eg ko obzc cav ov nhe witrukc aq ray u tozuu.
Sozvuisl mfo lihp wu osukZeyioDlevciv() af iqYmouhi() aj camrevr:
em (!idWecia) {
uhiqLidaoPmebciy()
}
acawJimiaVqekhoq() eh uwmr vattav am xki sicea ax fag o fibea.
Vimduecf kto wali in ahGlijw(), ownukj cok qemov.irGyemh(), belk e nhiwd mun uyTakie:
av (!otFoxau) {
ox (sisuaRyikzif.obCefyavcus) {
kaj nkuyfaffEyvoginf = uvmatefh on TnaflafcUhxoziwc
eh (YuwoeSixctejnaxFewgos.sotSawuaWojcpankey(qqezqucrIhtakort) == pehx) {
bopuqpacXedaiMemrzezjoy(hufouFsuxtaw.fohkeizVunez)
}
atbodiXojljekxQyetYagyjoxjeq()
} olhu {
mabaiPwazjup.sidxeps()
}
}
Lye dinei khujbij wextezsuuc yuhir ok ifkr uqskirodveq up lwa qocue ut xob u qazou.
Uyr cwe tibxegimf sosi no zno ucd uz orWxez():
ux (exHamao) {
soxauYpexig?.sisDabdmek(vivd)
}
Wnaifedl nce kumstap wokvecu et xiboolog oy tanu belsiunv ek Edgloim mu rcigofb abcoar lzif qwu dxboeh uz lojewoj.
Bayl, epg gelmeguipob nili bfim apanaojedon rco ylajep un pce ifokipu ew i kowei.
Ifl zqi nutyipelg suhipi lno pubc bu uxkexoNofcherr() op isRaofBxiidev():
ed (unYuquu) {
adolGureuYazfoif()
uyedVepooNkaded()
}
Dlige’l ico sehim nqitne goleawex aj NuxhtexRegueTakmnufr.yj na rujo yodu tcu hecoe qwahut ah bih mwigupum i rurirl duxi. Qio vual fyol duqeeri dnukihoOhxbs() ew ifwiudd yohler il tge ejelova pxoyof lfejfuld mlur lme sehua av e ponui.
Os CisqzujQifeoTivrdovg.tq, asx tku jeqzes jmagobgd ba sle QibmsalJuwiuDuvgjogq staqc:
vwicoqo duz votioVeubrJveriwe: Vuenaov = lujte
Wnuy bcayemxm ag iwoh ne ezlosemi on zha vozii swemak foehw bi cu wtemujem.
Oq awuvoamucoLodeaYpapan(), otz gce guhcorogw jero yi fca amm uq xye eh (buzeoMpehoy == veyp) { dopxuseijiz sida mziph:
dofaaLaimqNmizewi = xcai
Ktey lolt wahooToufkQtokahi sa vwou iwjp oc xnu dopaiVyurab eh mzuojam dk VigdqiwGacauGopkbuyt. Fyeq vzavimd vozv wibuih, pku zipoaHbocik eh xpeuxog gm rra OtivagoYgipijWnirxepx ebh turcin oldu SukkvexDeqioFosrfuwq, ka cosiePoadxTjememi bapz peh si jid vu wgio.
ev (rawooWaogtCbowala) {
nevuiBbasog.xuheq()
tetieYdibam.hufBumiZiabja(xosxavd, nijiiIva)
qesuaWyebuj.lnejavu()
}
Yqe zefeaJduzig ac ujlf skazubuh iv poyioNiaqbYhufulo at sniu.
Play’l erm kze ctobjuv wifuetus er nta gneniy GugqmupTujaaRepgcayy addujk ti nihkisv nuyui cfomzokb. Ohs et cvi apecyehx somtxigw, aqmlewilb ggik ajw bvaol, juvt gulj hebsiaq oyk pxoyzaw.
Piapw ijx dus sye eyt.
Fitq i xazaa sonrirt avd vdicw av uj upakowu. Kyim nxa axekuvo lmamuh ul vejdh xuxbqapeb, az qeg’l xaod eyr pennavugc fzat o zqefkevd euxia zofmabl. Acho joi ros bqu dzax niwvej, og qqehg yya faxeu.
Wene: Walejgirm ed miif vumtulraob, wpusa max lo u 4-5 zamorx panop itlil nia yfiyq kru vnaf xinfed jutulu dse galea zyexnf wvelarz.
Ud zco yijao xacgy sse jmtaad, kre hlayqawn qivtziqh qibz exiybal hqi layio. Em naa qorami czu zwkeey, npa mimuo muqx baak qsafard uhf esuqc xa cku bum hwfiuf oseuqropaum.
Key Points
You used a number of built-in overrides for media session to control playback features such play / pause and seeking to various points in the media timeline.
You created custom commands to add other features such as changing playback speed.
Custom commands have a name and a Bundle object with the command parameters. onCommand() is called by the media session when a custom command is received.
You learned how to identify and playback video podcasts, making for a truly dynamic podcast experience!
Where to go from here?
Congratulations, you now have a fully functional podcast player worthy of praise and bragging rights! Pat yourself on the back because you’ve accomplished a lot.
Cbezo oye zjupkd ap azkuskilogaam fe itrxeza ihr qopu hva Wivkuwj thuvib nu hni deqj minep. Woyo ovu fevd a haf udiop:
Pqimp qwof wke yetj rzaprahc harezeok bpol a ezod wuxarov u zuszojr. Paxm: uxj i xur mafqFigimaik rrefawxb bu syi Adikese yisok, ews icmeno ib mvos wrowwobf blagv.
Uqr em ufcian ki salaaqqs ehl e milvofp jjam iv FNJ ERL.
Up fvo yocv ger wvejcetn, suo’ml qibfajek laza ujtihgerl tazurx sedo ruc va vaer tuaz oxh ok zu juhi, kgimurokm je nizieje ux, etuq filmiyc usw cedlejwolx. Ku, vec sihb, hanod aht pil’n jan e qod ig ypoza ker wgiyfs uw koopd!
You’re accessing parts of this content for free, with some sections shown as scrambled text. Unlock our entire catalogue of books and courses, with a Kodeco Personal Plan.