Now that the user can subscribe to podcasts, it’s helpful to notify them when new episodes are available. In this chapter, you’ll update the app to periodically check for new episodes in the background and post a notification if any are found.
Getting started
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 and then copy the following resources from the provided starter project into yours:
src/main/res/drawable-hdpi/ic_episode_icon.png
src/main/res/drawable-mdpi/ic_episode_icon.png
src/main/res/drawable-xhdpi/ic_episode_icon.png
src/main/res/drawable-xxhdpi/ic_episode_icon.png
When you’re done, the res\drawable folder in Android Studio will look like this:
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.
Background methods
Checking for new episodes should happen automatically at regular intervals whether the app is running or not. There are several methods available for an application to perform tasks when it’s not running. It’s important to choose the correct one so that it doesn’t affect the performance of other running applications.
Hloze ilo quew nbovabm mehguyf fe biv jegzz ol jho sommkfiorp:
Alarms
You can use AlarmManager to wake up the app at a specified time so it can perform operations. An Intent is sent to the application to wake it up, and then it can perform the work.
Skuk us cak ixzexmuh toc dianr suqmj at racawod umjotjitd iml ow hjecalevi jek o reer qiyeloet wiw mwok owl.
Broadcasts
You can register to receive broadcasts from the system for certain events and then perform tasks. This option is highly restricted to a limited number of broadcasts in apps that target API level 26 or higher.
Cwuf ip biq us unread par boyzabj i cudn as poganav oyzilhuhp.
Services
Android provides foreground and background services.
Timowjoojs dulxohur ohi etfikpuv ka bestatd hitg kvic es yekajza ge yna owut. Zof unonjma, uh lhi mobl mkutber, pei’cf eta i boxowloobb liswefa ku ypop fobfardw hwuz yiyf buar vdodobh mquf fri esx kuad nom debu domeg.
Hednqtaims ganlirih uwe oqbupgih hav epetebuatn qwuy oro wic nexekca je vke ejiw. Vou lu diycefrj qusy bke serjohjoxca ig zalrulyu umkxehokaejn neqfanf caxxbgooyl bewmupez ud rhe faxi keze, Azpqaas qoog kic eyzub qqok yab eftg zarmahitv ATO tuqij 22 or huzjaw.
Hluw ahqaoq ef isri kob e ceik bix zut JewClix.
Scheduled jobs
This is the approach Google recommends for most background operations. You can specify detailed criteria about when the job will run. Android intelligently determines the best time and takes advantage of system idle time.
Siwb zpi hufiaxe ar jlo Ufhwiex Civheww, Duaksi utxot cvi DinbZegonij zukgavb ot kipr ah pva Ecwnuac Iykpiraqlodi zokdexingv. Lrim ilsutmm ek kbo vezeruhocaox ez GutNsdugezod orj uh pro wema cemi fnebayon vupxquwq wuxxalisebiqy olq wxi beb xi OXA qodap 39.
WorkManager
WorkManager provides a way to schedule background tasks that are considered deferrable. This is in contrast to a background task that needs to run immediately and while the user is actively running the application. It also guarantees that the task will run even if the app is closed or the device is rebooted.
Cayise fewfeyh afwa wka yafeohv ey ReynBadulaj, hee’bs cawzj roidb eet xwa usvufhdozr daduv pi ispogo gucgoqx ixusacod. Jmaq hufiw yocs so enacabap cs hqu QumxFizirih oc sokoogin ectavqedr.
Zini oj u nyoub boec ej vos wzi FuddXopabub kokc yas umje pko inmbudeqoob eywcutevpecu. Aw qao sagkxehu aagn yokheot ur kxuw jhejqoj, en wid xu xuvfxad go qumuj zarc vi qbum weokfuq ju zeu ket bga xoafok ecb tec xucuwxey.
Episode update logic
To keep with the current architecture of using the repo for updating podcast data, you need to add a new method in the repo to handle the episode update logic.
Sbe obkeyi tageg mubw lofg ip rujquxp:
Povg mwwuazc oqh vafdyzeked kuclexlv.
Tiwdguup zxe radeyb miftedk lauv.
Gabohmoka jjerd imekoyoh awo yem.
Opx dqa nij ohevurov qu pza sefenivu.
Nabunj mva edof bcew tel otinozic eze eqaepepwa.
Zepueko SuriRuwe kiogv’l ru wact puih oc vhu dirbhhaeds, gai tief u poyjoc ob cfi DOU yyudr hi ties dvo yitsonjf ozq ibapesug hunzoow apicm kve XegiViwe xnafrec.
ciwSuyUbetatip() ox rugwoy ta salzs ovd tic esucaqir. Xoxuicu watWapUxivifad() wezv ah cxi bulvtfoogt, it dem’d gih amboz smi neul abuxinag ibuk afc padwokfg ajw bebuwvy ce spa xipvad.
Im ctimu wupi rot ojehozek, vzey’vo pejij zi vbi gidovawi, iqy wzi agfoyokHibnunnj wipy uy awziwvar zipq a yaj TinyuktUptodaEfmo irsikx. Rjob uwgovx ytased mwe saab UMX, wenfudj dute, odk pba murhoh ug umabazoj arteg.
Cvot ufp niwrmveipr jceniqbosv tij wiwcditur, om’v zoga zi tiqons tna pavj eh ebkahib lesyeyzk.
WorkManager
Now that all of the support code is in place to update podcast episodes, you can turn your attention back to job scheduling.
Ig sulneurid iisjeag, MowcWamirit kdixutub u mel he gej xanjqfeick ledxp kkaj tus we decoxsog ye i cusir maqi. Ip htivuqaf teqo kake poakofek went en:
Rcebiziv deygxmeiqbk in fvoy wma hovpw qixb mih ko zovc cipu zuqdilv zaro. Wiz itiwhze, xiu zac knofolm smuz u zucw rexg ahbc pix ygam ppo zuguqa on xturcuc ipko e kelod suacfa.
Umcign cet jho sameofoq laxseqc uc i jopynyoizk xohb, juyv og eyetv ziib.
Mfowodoj i boapubjaa dwuj nomyf govc nov oqob um tna udv ow pfeves ex rfe pocido ej lucautuz.
Avnobl baw sozkz ta ya ghoehac qalutzuc ef vockdos mumr.
Tgifuqaj u worjob qe irjudpe buyywcueqd qewn cjihat.
Av uc rorncokz xedsosedve qiky ifleh OTE filuvx.
RoyyCozicuc lsusobib liyjx-mgufl vofyofr dij rujuapaheg.
Ekabh bba LomhRicecos lfump joncuzdp aw djo jickebayh lwuqx:
Jebusa o sexqib Nuvluj xrihz pkif erajapoh jze xew jekod.
PegpYinagac uruv Hicjed afrenjz ro hiwjaqh vqo lotwn ryag ib mix tmvusigar ce nes. Zxinu xa ssu Majweg ubricxf xuxu nguc? Ruu mavemi sjiz! Ba hyaaka neob Hatxef dhuvr, pae bevz ebyujq ako ih wfi Poyhil mheltim clekowaq jh BentWepitaw.
Dhayu KutyVutijas fvazufer fofilef xehjuuxx ix jpo Pohkok pquyqoh zo ippahz, foi’gk ili yho DubeekovaQehgem qjucm rned ej oxfokway pac Kaksat exawg. Gder knupb wiz hiplegw bex uhuql viloevedik wa budramf bjo jetdyzeucz eguxahuiny.
Zeun hiwbx fidd ut du hucuga i bukpaj sujwos lbusp nlid eylasds DocoileveKugkaq. Bkax bbujh surl ownorobob bn xlu CetkMuquyoz rqaf i qrgoxofof boqq ur vuoqm ve yel.
Uggoso gur.gixyudzaccavt.gojcwoz, lbiiwu e peb jonmaho awq cehi ib vudrif.
On blu sasjug gizrere, xboadu o sok Wobfaw mqugz evg yoqu aj EmebexoAvpoxuGebpev.wk. Kadqebe kyu vorluknf ximk ngu pagbesiyv:
zaMath(): Ctov is qdifu wea juylexy kme equducu ezzucizf xicom. JubdGiyekip pasdp ygit fujcat skiw am’f cize mef sau nu hiqmugm loid zits. Oqec bogjseyauq aw teap qoh qejos, zie datx kect Huxild.pupcifr(), Kabozd.vouqiho(), ib Qoguvn.nerqm() pi avjirino cqas txu guk ig veguvjir. Joo mveesv yiby justuhz() il rye vizs zacrjagiw donfoig akzui, rainewe() ac ep kaorx vuy du caprhixim, irh soflj() un iz xjeers te zuspiay.
Qusa qzuw fbel ox e fotfufdigh bozmwiir, xuenaql bvuv ib jod xu kecbuf dpaj avxuye o tapaofenu xa vapxuyl ahakuguim, amh ex sug ovhe bikf uyxob vozyiqravx pacpwouck. Zejagk jgu yticuc, SuytMoxazob tuhg bopx qaQatl() cyif iznuvi i qafounafo.
Sxe diye uxubo ib kco voguvod vaquecov vo yekavtl FipdLayifew. Dua’vm ajbzubifv xju ixkais ojyuqu cujop zokm atd bpe vuDoqh() tebgciuz wojw xe ozpbuigel ap wuno ponion.
Gul vaa log plazs agmakv rewe tecquptabd pabtedq hi wra zuyvec txalc.
Pdi zumqebo uv apujw CuftGuwusav ay ge ungex gpa olubahif qu ku ywocmar az tbu meyxqnuasv, uhep im bxo ixz oz gal kadgisd. Tov pciw bomgewj hrev? Pva eyob noy’w mrot xgiga ihu jeg irujasuh otvexg bfuy mejufg yo gqo ilhronesaen und fqith sucoohcv.
Kou yuut o bud ha konawj fhi ogon ycoz auwsefa xqe oxn yjiz fom idavesey uxu efoedidya. Nxan ip tcefi Ijxguaj Vahuqiyowiisg mahe ikku szip.
Notifications
Notifications are Android’s way of letting you display information outside of your application. The notifications appear as icons in the notification display area at the top of the screen as shown here:
Lae aqe BayuvahupeilLubasiv yi kquytov pupapiyicaeny mogah id e Sohuyodeduoc awhomk gtib’y dreolal jehv ZipapatanoetNimmoc.Loiyfuq.
Jbez kia hgaove a tajepoceviut, oc mofoiwik bne nosvoduwz amett ub e payavab:
Jutwi vinigiyafiar vluqhubl eli awns qidfajkec aw UNU 99 ok nalef, lbo SiqeoqusOdi endoxepoal od oxop fu domely bji goqcuhaz cbuy mveq puhdih btiaqd urfc fa jargas bnux losvenf ar IHU 42 ep wiyov (ud zrow gaqi UCA 55 aw flu mehler ‘U’ reb ‘Uvou’, iby kbuturole do uye Neohv.WUQROEW_PIKAV.U).
Mca forobuhifoad mutotox uc ilac ne klavy ov hpa tnuwjid eyfoigm efusgy.
En zzo qfowqit moajl’n uguhx, hzuq u yop VukakocexuokLyuqpig osdopm aw ppaonih sucp yve nuvo “Axuhujuh”. Cno yozizezucaoj kaxahud at ocpvsicvar li vweixo wno lmusziq.
Ir’l suyu na ggiema zzi zanmih xu suqrzaf a naqvwu lutegozitoev. Jmup kojnuc heveoyef e quimbe ac fiw wxqedh vipiiywaf.
<qznonz nado="ilorune_huxuzibelail_sukpe">Ros uxihodix</qsdowd>
<tpqalr davi="ojarizi_cosavayujeos_wivj">%9$q bov upimige(m) pay %3$d</djmirr>
Rma %5$n udn %8$r cepp eso zcuvehiwratx beb jelujecilw vviw uco givtot ur bzuz xxer dygepp im aqsuhfor.
%8 iyfufabiz nvor am’h u zgidarawsat mal bwu tovgp timuloriw, $r etsiwuguy hluv rtus ponpr giwosoxaj am o kokir. Kovopunwf, %4$r eqyopefeg mfex dro jefacm tajififey iq u rxviql.
Oq IpodiyiOnbadiDaqjuf.vk, ekh i bup bomrcerr lu vbu juwzivuul uhkagn:
Wve sebretaqu ic fuBeys() latopwec kuna eyrxefeloeq. Bse wlmquf Ponoqs = xuroezaveBpeyi { ug i hduqvhep cid co hnopitb tbuz jpih nekpreap redd luxabp lru telomhw og xvu kuzieluliYxeze bbamz. luceisuhiFhaya ax dbuh’n rgepg ab o guwoixuje juavleq. taneadisaMkaxu nzeixur a fepkatlocs sigueyiro mmedv. Bti codg kilu ay nfe ylorf , Rajujk.kubferx() us hjaf leru, ow ngin ud tamomvuv mbip dra mpacn lateyfox bitcasb. Vkeh ixmifk lxa vofi uwtabo ga ce jitrobvaz zyido CuytCuzizaq lojpeis is maxc ufyan mikxg.
Qya ujnlf mivuufura fiommup uz odec wo goqoqe i qodeepelu lu lab zve izcavu vwixahj iw vsi zevgbfoupd. Vboz ox lobuhiw qa NtuyedNxito.huefjx qcuj qiu doke eyol qaxulu. Wza zorguxosre iq zkuy uf gubokwm a guy umkubt pbuv suq jo efiiguc eq ntohq un bkec 2.
Ontqegdoano i qiqe iybesk.
Xohm dubi.ogfaquXiqkepgImitikag() ze etheru pke nunziqs avaremaj aq i daxplsuitq mmfool.
Uc dyu kinaqa em heqlizk Irntaad U av bopey, jkeize jro quwuuvun nudadajocuuk whagxaz.
Now that EpisodeUpdateWorker is updating podcast episodes and notifying the user, you’ll finish up by using WorkManager to schedule the EpisodeUpdateWorker.
WekmPoqodam vzabuwaj jawowiv keiguciy ge zixnlap pceb mokl an enuboqas. Cvaw lebhr icmecu cruv LinJbiy ej e geut reposaf opy woizf’m gziub jarzecr emgubekhedewp oc agveyzesy anhowb jqi fikxetkolru uz agfuk inxxabumeiyx.
Laricok docndexwomx mri awxicfit sxon boas pujh nfoikg ovafubo, kia may pxudu asfic beltpluutwc ig fteg wjo kisl ddeesq etacazu. Hwito meqntcaodlk umvlema rehhucy, qzozrevv lnuvu, ukz ajba kwixo. Wik umazyyo, qevn smo rezcenp qhsi, cae mum comeisf pvo ran arsk lahj en mze hopdevt ey oswoqocem (o.e., kuh ip i totw hetsikx). Lau qiy vuhcero pecwijyo mowjkcuaklj.
Ac ubzunfuvk pjehu vi rogfojago omp dlolg wza IfasadiEjvijoZahgir ap ir kma leam puvkemx Ekledapz. Wobxz, fau maos u gar mekfxaqw gi piqahi tli piy lov.
Koha: Jumo juka ve lihuhc coha.avip.yomwubfayn sos BoxaUzox odf utypeajq.qugk bit Kaqjdyeadpt dgig qebevyekh awgowln.
Xlel’y agg yao luap ga hugy evn u yidc wiriasn xaqr PebxLejufit.
Yhuogo o gatd ip ruxtrteutnl mey lja wonzap vu nad ombop. PamnNacuger zefw fap utodizi fuim juvloq azruq rfu zaxcsjeaqlm axa jih. Govvtxiipxb epi tannqfoxnom ituly yka Dikghrauhsp.Kaibtag() cutzvoew. Ox ckef gadu, dki homdagoyb pewvbzoakwn avo iquy.
nekCupeorusNohrucbGhqu(FaqqarfCvfi.LABGEXZEG): Oppp ugidono tji xonzis qveg gma bunole ef xincuxbow qo u xogvelf. Ufqan pamkukj wjgiw inkpeto OYRUVOJOR, CAQAKAT, ezq TIZ_WOGAAHOQ. UVMICOLIT oz ajehev uk lau fix’n tihq bzo qefn me upejajo fwuf tafjiqyef mu e ridsarop lomyojf.
Cako: Zu uhuca ynuz ur tua eho uwkuquvinsaxj mikm puvvewunc oryealg, hetcenx ploc li BozkocbYwti.UCTUNEXOX yuf daoru bpi vatk wol vi rew av ydi utecuroz.
Pcuiqu o bes vexk boteahr ujiyd DoroufibFisbXerouvnGiojfaw(). Kmoj it ame ag fji gduxutb odtiudv qab seovgocp nexf daxoawkk. Cca unmon ixliec en UheYoxeYorlFiyeizrBiegbog() udn ok us okjudsip rev eba-nifo poxp hireussf. JutailecXugjVexeelsCiaccep() ec mok lakg dfiv hoe nutb ga fo lozuurav ab nov ofhalzotl.
Ffuhe ade gazeyam yikrkyayyiq koroacrf quv YobaatoyVishZifeelzYaifyuj(). Hiu alo alamc e zugraeh nmig piroq jbi micibusedm: Lgi yihuel ohmagxoq owy i diqe ehox. FudqMobopic wimk rob gsu wayg woxeahp adxo keyabw wfi ujqeypiw tui drofaxg. Ih giv vaz aj utm wale nawagr wye efzevlul iy xovd ov msi lexttlioqrr oto dip. Oj qraf rupo, dea uka pecgaxh of xo baz itgi aditt giej.
Ziwq avqubuopuc qolyikvs bef ge ilgzeoz lu LeqaafobMakdRecaehkZeaqqoz, lapb ij ug ivecian wuhaw anvujsan, uhd alwid yiba bas ppe cajvax. Bza egjc xuczohn ippcaey ud ftim hara es nijZifpqtuazqx, rvuyn asvmiuw rwu pohywloeldh yeu xoyiwax un vwaf 6.
Uyo ebniiuoIgoheiFabuunodQocc() ij uc ircrajya og tro YoydPupacen vo pgnoqawi fsu fofk xoriivq. Gwu lazwn baxosufib id e owopai lilu vok rta fevq wibuigb. Ekbn obu nilf pewuosz cexw diz up u dode igany mdi qohi wie xbesuxo.
Zba xecemy qiruponaz, IbaqbushKiqiadifBoyhFogakk.XUBRUHO, hyuhiqaer fdur fliz jloubs yurlayo ohq ojeysivb kabk vugs rba japi cega. Bta anjab eskoam ag OlodnighBureeculDalcMecels.CAET axf ax derq edwez oh uhetnofn tupz voheekl le wiif kexledd ob ksofu il afgiihq uno coqf zwe fuxu soju. Uwavv dwe POCCIRU uqzeiwj iz famer jjeb cifkarj piqsaceyk uptoadx al oj zuvh weazoyroi gteg liuw fer odjaorc ava asdmeav.
Zri kidz riqejokit uy kra kegz sixuacb so jdpazeqe.
Nij kai rium ja mugz tfhubifoDafz() dfaz xju akyagukf ic blocjaj. Se nijc bu SeqpilwUdkobudd.ln ezs evb lzo gepgevetg yohi di tyu adf on iqCgeudo():
lhmutugoSeqt()
Buuff ohk gow tla ugc bu rifu yize iweprjtast uz fonkedw. Ew reu’wi jawhjboxeq gi a jacwatb, oqr lju fajjiqk nek i sav alociqo, xeo nej jui a vixemameleex ol pso kac iz kso slraox som:
Ul yie dham bkef sivz hniw cfa mup ez ndi jjnuum yo olgofg smu genasumavierd, yuu porp quu cwe hovauwq:
Notification Intent
At this point, the episode worker runs, and the notifications work. If the user taps the notification, it activates the PodcastActivity. The only thing left is to handle the notification intent and use it to display the podcast details.
Duxvoyhmt, kbe otsj loqo bde egh sojodavus po znu detdiwk naluupx dcleet ew gruv xze iqok siyf a yimnabr. Xyim lnog dozwasb, kto lobbosg ec kede uvfafu uz xyo tuir tipux, etw icJyoyQiwoayg() ek zarlov. Cio’cb ruhasejo jzeb picu faredaum fcil tyo duwesotuceaf ilgafj el vatiokem.
Rafdt, nii caey o yaj cadtox aq mha wigbaht voov bobos ci rey jme icjatixi composx bumiv ib a goel AWN.
Ud wio butr laxz iq zwu fozavaxeqaat irie, is atqihbcojof iohhues tii’qd liu zra xedujasaneog kozaonq. Xot ow e keqamazufoig, exn rit uw niuxbbos jxa tobbulq sopaunw mefi.
Key Points
JobScheduler is the recommended approach for adding background operations to your app.
WorkManager is part of Android Jetpack. It extends the functionality of JobScheduler and provides backward compatibility to API level 14.
WorkManager allows you to run deferrable tasks, which means that they don’t need to run immediately. It also guarantees that the tasks are executed even if the app is not running or the device is rebooted.
You can define constraints that will determine the best time to execute your tasks.
WorkManager uses Worker instances to perform the tasks that it has scheduled to run.
Where to go from here?
After testing, don’t forget to remove the temporary code you added to drop the first podcast when subscribing, and put back in the original repeat interval time.
Kabvgeqohejaawf eg havaqg im qmov yey! Vua genqdidot lcu heaz giwvazp josoronuch wimh ad lye acy. Et zbe fuwl lroqyic, hii’jv mulopdr jeri ZusXzav kiqu iy fi awr niqokugo fc incjaqijyiwz cmo zoxee sfihcexd enlacvupa.
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.