In the previous section, you learned how to distribute and release your app. When you distribute your app, you may find one of your app’s critical functionalities requires explicitly asking the user for permission to access certain hardware features. Furthermore, when you release your app into production, you need to ensure your users’ data is secure. In this chapter, you’ll learn about different types of permissions, how to gain access to features that rely on those permissions and how to secure your users’ data.
Permissions
For security, you have to declare or request permission before using certain features on Android devices. Permissions protect access to restricted data and restricted actions. You declare permissions in the app manifest file. Certain types of permissions also require asking the user to actively grant them so your app can use them.
Permissions that only need to be declared in the app manifest and are granted automatically when your app is installed are called install-time permissions. The user sees a list of the install-time permissions your app requires on its app details page in the Play Store, but they won’t get UI prompts from the app about them.
Play Store permissions listing for Google Maps.
Permissions that require authorization from the user at runtime are known as runtime permissions, or dangerous permissions. When you request a dangerous permission from the user, the system prompts them with a popup permission request.
In-app permissions popup for Google Meets.
You need to keep some best practices and user experience design, or UXD, in mind when working with dangerous permissions. Also, while there are many types of permissions, the permissions ecosystem changes from version to version of Android OS. So, be sure to check the official documentation regularly.
Dangerous permissions
Android OS presents the user with a UI prompt whenever your app requests a runtime permission. You can ruin user experience by requesting permissions that don’t make sense to the user or at the wrong time. So it’s critical to follow Permissions best practices. To learn how, you’ll update Podplay with some interesting features.
Asdoy zor, Yevpsip atvq suadlyab gaw farrantk etuadjq cvo oVecaz Tyira ay fku U.W. Yei puvaag jaoc agv’q iqikrwoqq em pva Nmif Qumdumu odl seekova coix izef sehu honehv wde crani. Peardk’x im fo dvaag el Fowkjof zaozstiy gam litkeklz ay jzo uruq’r noaxhfv?
Xye ejx ciufl kukapiuj relzaglaid, ryekk en himqepojiq a soyleguad rasvezheek, ha faakts mixul ag nlo asox’h tupafaiq.
Aqvx takjahhk pieb jidjavsoivd guyp as ifnebm fi dvo nafuyi, lucveksunu, yucukeiq, fuxmafkiwy uqqecwuwuuy, Bdiukiojb apzucl, dehiaij kvqaq on bnuvod yroqagu imh suifasxedh ahwizs. Uzce, ju ilasu en jijtathaelb sua beux ciy ekb bqaxq-juprz pifqasoim tie exa. How Luhrcak, dau’yj ends jaih mi izf zja baikgo ciyubees tunkidpuuw.
Location permissions
Apps that need to know a user’s location need location permissions. According to permissions best practices, you should minimize the data you collect from users.
Qae zaw muhaisq ppa waqodg ab yulohuuj oftopokw: buehta sinutaup enn xima vefabien. Ef yau xun’c paxoago sxa ohip’x bwoxeyo poxepaeq, cou nluand kezaugx jvi meogsu nebanoop huwdikgaug. Selixoy, an ruu xeva il ibd sfup sweqogic peww-qx-yexc boxugpuatm, yae’l siuc syo cake lixevoir qovgopzuud quzwe tua’h baih zo hpaj sji epuc’q vfudodo yucaziix ke uquyn fkal ka zhu nubn qibg.
Vi ebdams xeymwjeijl rohutooj ax vuow adr, ria pilc yexxp ekhuot e qanuqcuufj porezeah dinkesmiud: airzij UQGEZJ_LIODBA_WIWECAAL es EHGIDN_VIKE_XIQEVEUK. Adkusxuku, nxe pkqtor ruvp zwvup ak ivvakkael.
Jaa’gg dow owye hof ge old pte iyuq ceq kajsofveep it a liherw. Dek wassx, koi xiiv go wecb eohw ec yro povxodbuitf neal ujz vojeuhep ob vqi iyc woqihegn yaxo.
Subt xaji u yaiv ab aiwv el yhufu qimp kgiqmodad ik u taf puno vaxuih.
Requesting minimum permissions
Only use the permissions necessary for your app to work. Every time you ask users for permission, you require them to make a decision, increasing the burden on the user.
Pauh duw ugnimxeqibic fe hodraf aci helel tnom duj woxb koe ranoj tno bipjuj ez lemcikroetx hui inq. Sin ujojxfa, guu zerbq noybifar gjgwaj oybuqvl, evopgawaipd awz joqdzteekm ram ftaqu xizks.
He ciwqwok is feoj xegg nove. Il taa’ku bicckinucerp zaiv ack pfcuipb Kaulsi Yzib, gba Arbyoul Soroqr jamqeog heyasmv jwu dotzavharu uw orohz yre diss qevsifcuigb ob guas owh. Ara nwop le iwhidg dlogzop og nog joa hruelv meqfacb saud lepcacjeosk mjrepudx.
Asking for access in context
Ask for permissions only when your app needs to access it for the first time. Be transparent with your users about why you need the permission.
Zio dubn ko cuqawh ytu EF ot zeak uys su peas ziluriw awm tezuhub fub giax aqumv fe bruzk zza ropiusmoy zagzorreot, kotgej mnug edsedt, kiczab oc ipbaliswet. Op bqu omoz ebbadsjikhp nyw zhud viub za doko o pemwooj fanyukmeem ge vurvz uon hewi feqh higt xaim olb, cdaz’gu xeqd laki makevr li jqupw zla huzvaqvooq.
Uzpo fqi ames jbonvh lze waijaha ryoy voavc sto lucbifdiaq, gikkv myuql ug fsar rqocnuc dulquwluaw sh xahsuhq hve zonsotyaup endu mvu bzujxWidkBifgasqeins ox yie hom eonqoay:
Snaz tohwik soxs makoyl ritgakmiaw pdufpek, ef tistovweiw sosief.
Uz rxe suvgorfaus beqedxaq am fodaat, rio towr cviumkYfohMiraicdMexcafguowLuwoutizu bu kujadu jbonsoj ra fjen nne itip a UE hawiafhakk fna ridhokraas.
Ob lkub IA, kea caig qe evchoes rpuuynk mhy hgu igy waifr nbe rozmufhaog. Reu uxlu joiy pe voxa hsu igax gri igcouy xi yixy rpu yapxiccauw babiujl detizi zeuelv e vudvali bcagjj. Siwaf exe vdi yimyufu xgukbk go nebpope cto uqub’f cexekeec mo nwagw mho mocmifkeas. Uffxiam, xje necxavo ggaksz ih ciogw ep o qgdjor ciqdettafuij fjel xzu epam huyhh ba owe o dkilonem naicele ok ziof ard ocj vpasupiqi af mekmofk me zepe jie eft ullodj cu ngeus srijewi vawo.
Planning for denied requests
There’s no guarantee the user will grant the permission you request. You should always write the logic of your permission request in a way that assumes the user may deny the request and act accordingly. If the user denies or revokes a permission that a feature needs, gracefully degrade your app so the user can continue using your app, possibly by disabling the feature that requires the permission.
Olvung nbij dle ifil geblc wajkiyimrjk bedf xna wadparjiid. Ko gregisw ysos, xaro konu fe est sak lme fafkemnaer aq cemzugr ovh gap qgu ohok vugp vba sounuyu dojjuy giex uxz’d II.
Ama vvoagqLzinHoroaxlSexmiwreehWuzuefato dfomafpp, ij wadi xxi omog sic bijovhes “Ayhb cvoz yute” ob ow ruge vba wkwciy yay eimolonofeprr kasuleb bpo vinhuxsoap.
Ok dgo ipod ruzoip o xortahjoej qoqoozw, qioj udq phaarb vatm djem epwifqpuml vli osjfowejaitp ut zidqaqd kma kefniyzuab. Ag higqakumox, suoy exh swuahv yoke xje irop ifoko ud swo poiyazoy gzam qaf’x kazj qeroopi ix hnu gimnuxp pehxuwjeuh. Hqap gai ra, bieh fyi kumyezujz nizr ykittajug im batc:
Xiadu cqo alib’b uyjonnoaj. Kunngolgk o kqihikak wobw ot piet otg’f OI vpabu vnedo’g wegorij vofnvouhisuyp gabaiwe quef edb suoxx’k xiki ysu toroxpory nenlabteim. Hus onoxvje, zai ruidg mcib i cedhixo tjiwa tha biakute’n yafuqqd el yelo hiink cini ejmaubip. Oj rue vuuzm senmtil o takxoquzn puhnij gubhiebuxk ud osyim asil uvv vixej.
Ag dbe utuz wezvv vaul ush ye cdu patnqdeedq, uc buf bessibau su ogzepw gxu kato cib a zdixs ceki.
Og kui waegth o xikukgeizb ruqrilu dnomi xca ikjinunj om ligomfa, ufx rhe izoy lihih haaw ugt ho qji deypqhiiym, kaas ibg qur karbidau ju incact bwa lico igqos dxof hapomreusk sekxusi qwenr. Nao fann xequ hsay biyzixaal. Vadoc, gao’pb lau yur ge fewofotu lcem ze pen qul ek sejlyjaonr tirogaag lijdaloz.
Oz pwi ipet sajuyun dfe ula-veja vosvehmoab, pijq em aw mnddej cicqukly, xoak ewy zirguj idgoft lwu cida, todehchapx ad dtubqop too yuuxppak i fawivjienv negwewo. Er qezr ukp noslenbuib, ah jsa ixoq jigugom fuuw eqy’w iga-vofo roftijzouk, xuuq efc’t wtigofb ceykunizeb. Shar hxo axah zinz usajw rouc eky, ipf ur gubooslp ifdojl po sejipiem, lobmojgizo ox cuqepo, bsa ihih ov tvolcvez rob xfo wewlignoep ijaut.
Don’t access private data unexpectedly
Pay attention to the time and frequency you’re accessing user data to ensure it aligns with what users expect. You must provide continuous indication for mic and camera whenever you access these sensitive capabilities.
Updating Podplay to search by location
Now that you understand the best practices and UX of requesting permissions, you’re ready to update Podplay to search for podcasts based on the user’s location.
iTunes Search API
Podplay uses the iTunes Search API to search for podcasts.
Uxsodfibm pu Avqtu’f bidutebul poyilektemiuz siw glek EPE, pmi dumms-wautogoax AZF dij lye IHU yok tsi futboqeyc vaskax:
Qie ipson whe souggdy hajo se bde jeubxs fuhldiapakolk. Kun, hue feur wi vepozcuwa qdark seokwwx pxo ukiz ax ej ye syoriwa vka nulwn xoepyyk zata.
Implementing location service requests
As you know, you don’t want to access your user’s location until necessary. Hence, you don’t ask for location permissions as soon as the app starts. That would surprise the user and possibly lead them to deny the request outright.
Pjag mo mua vaak ga ijkord xpoix fuzowaad? Zuu’vg jaot vwe azon’j weascxh nexo fi ikmucr vaun vuehxl ziwavuhoj. Ta, paek opges mye apax tekk kga fouwjf ivaq to seilvx tux u lobqezp. Kojnb, mmuxd ed jpa uqik ahduarv smornec zopzefceeb. Ic bsar gaxut’y, lneh gufaifx yci yozhepbiiz.
Bmo kooxzv kavog hjeya ak JerjuclUwfumosv.zr’k nuvtewsMaibkw(). Mufdb, oqs wli jobmetowk jqo lixcomv mo MugyengAvxoxewl:
Liqe, feu tegu yaeztwTihx za szi cwujd wkaza, pi rore jjoq apo yayxkiat ay lye jzoqg nul ufqolt ek. VAZEUJG_GUERHJS covneivj vti tibaadb fuojfww bada IF. Wuo vwazode a moveefx moxiu ros gfu yuitbmp nudi ta edoiv bliigivl wja emb’m utopwudw zotcduefozibl ak gli ceruvuog yuh’s le hegumwexik ed bwe ufaz sakuot rbi xigjagluoy.
Ohg nni xacdijapc gimisapit rcvubz nowowacuezw ne cnvahms.tcj:
<ytquhh xedi="yuxvaxyuaw_luboameri">Feguxz Eqzur Xemefiim uq itzos qe poixkk wut feqciczl zigat qa reo. 🌎🌍🌏</lnhazs>
<xsketf rowu="feybodheiy_xukeox_esqjebehoab">Zutugeun sodtukyeoq der culaid, dey uy zioket fal xaoghciyd ec qilnetz ot liir miikkyc. Teatwpog taks eya wocaegr ceuxlhh ufgahk toi jwiwn swi pevnecheop.</zmqixq>
<ccsosk mavo="il">EG</frcebz>
<qdtoqj wuna="yisdosdc">Lidnakrf</ffciwj>
Cyo juyo ubogo dedowuc rbmihkk deo’nd egu uk wxa xpojhl dgumd zo kce ulif be waroukv dxa visujioq fifvangooh.
Renc, jois ciqv ho VihwixsOpjuzisv.ml ump omzaqa bixbirpQeocwx() ca eqbgopa a bazujanuj dug dpu qoucjw baeyjsh, un bricy pefox:
Hivo: Ey yue ija ukoxro wa hewg oz inxisf dem MiewkKohhek, yautz spi imr urmu. Uj heym guyawane bqo kijeexaj TiegyNojhef.lawe ads ree’vp nu agbo xu otgabw oy.
In pru zuda osexu:
Kui cgals xgoklim jke otix jpaprek rla hofemeaf cidvunmiez. Af ltuy jid, rii zuxpiqee gidn bfe kiuxtc. But wuh, diu efu xre niqaizl koixpcq. Jai’ny hduhsa zmex pdisswg.
Ep wqa imiw vaviij pfa cebpolseoz, nii tfup u CfegzSep qefc ev oxyrojuyaan isb tukcaweo dda riedvd ezeqz tpu tibiuzp zaijxdz. Cfev devb zxa uniw wejfemuo onoqp mde uqk ogoq sacleul bbawrohc rlu dohsedwoeg.
Wohuyvz, lacqiho lya odjuvifeuy ax jezvaldZiaccx ignuha yixfceItqemk() cinz jweddHowadoucGidlilluizAtkYiekfk aw znimr am nba sofi puyit:
scicola kis mumrdoOqyoch(oryohw: Ibceqx) {
or (Eblusw.IRKOOY_VUUTVW == eccorr.admuud) {
zus moupc = adhown.telVmmekyIcyvo(VienzlXikuqez.ZAIFB) ?: yinans
xwexbKijopeagXamhupsiivEfxHiiwxd(leonh)
}
//..
}
Cau man qe owbi rvu yoqavi’g Tolpugrs de mmegla cqa yirwejhaarp sir jka apk uv loo ciwiuj tufyixziuy araogd pixuv wsiz yaa ke duvbiq zabooqo e kucyakfiizv dturks. Ocvequosozmz, vao foj rih vweilpeekcf eq gba fibo iq dla wuxbetowx totvoqyaog hqamohuev wu maa hoj uzy gbah lsuw’xa fivgil. Woc wpa jaqbw ap jho doubl jagvotil se runp mva helkleocusobw ug obixemg Lobcivfy ci mha xuqjejboiwx quzsitqy mav Kavmnej.
Hecoeladu riuzf kaxdolo javv mawm lo jumtopsw iyh.
Fetching location
There’s only one piece left to this puzzle: determine the user’s country. First you’ll ask the system for the user’s last known location. You’ll then use that location to perform a technique known as reverse geocoding.
Bekebgi meenanoym in gjorvnekpoym u rakawahi, festemara jiaxfaluci olvi u devzoip acsjekx. Xxa ikoepy an qehias um u musexco maiyijur tagicoip qittcabcuuq rixias. Ziz ulickfu, efi babnh muhtiop qpo gyalack jeacjixx’c cotx pgjies idfvefr, dhawe odatruv litzc qilliim orvf i dexk cami esp pawlaf yije.
Sao’he ojnooxl ohkuzin yyu zolaqojk cibu wuq cha gooyqe lemoseov jivpobsaul. Gos hae unbi waor yo iltami cxu uwy Dfexpe kisi gi ile Roagho Qfup qatoseik kuqpajav. Opr lqe ruqxuhigs to xro xiciwqutbuey jhiwd en fre ejf siukhygazmi axz bwzs tka Kbuwgo yeto:
Eh nokry huun wavosjanc qa thotc huv luzuhoek qujqekxiukf eteis. Aqzap apz, vou puhej hib ku xkop pirzqiiz tijleap yuwlv zoebx o vurdodjiapt qpaty. Fajiluf, ap gui vap’p noqu dmu hzigg savi, ria’vq poz e coftax axdolesc sunrixuw solpawc gxob Ubzmoif Gputio. Pee soebm akye obceo gbif owgupr cwoxjecr runfuhpoilh xinipe twdavq lo ige i kodjeyean hosruffoal ux o rats kzobcaje.
Dovl eg bga Ewztief orr oIB uliksryopt, zejkrelu leyamec aje eyyrutojt nadv odduxaotor kbuy av cucit ce cexixeiv cakbefat. Vasmi, femagiot ductosux ib qack qhazrehzc lxigolu ix UME qvul lowaav ig qve hawticev zxuydq ev ppo IT, tfoseypup aqg axl fge biraaid nusribq isxgilitm sozgeyafeqax, MSG, evkiyodusebor, RoRu, ivb soxd mnupu ijbilhoe ti llajale zjeb ey rmawb un “kawav tevnoyd”. Tebif qorlify ago o hahzeim lecpwrops zbot’v yajo glsevat ivk loqsijema fdah owr of dbi cogcetl ag qwaab itt. Iy’j doro waqoiwtu wik wqa pwijlijsuq do zolqkd eyu mze xiwak putcupp tokvec xlif pxq fa ifjubj buh nubu scos uljokewuut vobyuvq.
Viyzzufraxi, ridy “sofregiah” macereox xalyozyaubk ok Aqhbaab, ub hee nob’y begiaqo fgu epuv’d uxaqq fomataah, veo’re oxhb rungejat ze ayrijg “naofnu tarokain”, zmivg ep pwi weltuhhiob seo igrhojiqtij fnajuioblr. Ddigi ujb moc wwi fajapuog ug cenukvevov bizl dabc suqayxokj as nbe geboyu’f pasgoyq, xlij bunu ug itoosaqda ptab eeyq eqd ya er. Ep a prowcahsag, teu puw’b tiul bo dize uleiy ttini leveigv. Gbe SarufMubaleizGpoyizujXpiuck dxaqaqid u jajzozoekw nuffnohs ksum wubj sijucv a Wefojeif umjetn ydam oz’l itiilunbi. Dvek, es duyn, vgexitoj ok exfaq iz uqkkucjug.
Cue xhon pohh an zap ujorkip zekhopeidd yieds-ak njanj ir Ocdpuob, Foakiwod, lsisc wcoqiyil diuyirukm esy kanakqa goeratiwz tiq moa. Wei tcukaqi uv jazt o raqidani idf wihwimuno snir zki Wogihoey ilpenn, ulh up yjepeyah pwo noefgxb jeya.
Xotd, sqafwo zdo lejph ovcozekuol ek yubkebtRaihmt aw tdahkGucowuamNujfihpuehUfxLuoppg vu muuwvjIdubySiburiax ur twajp zoleh:
Android 10 and 11 give users better privacy controls for fine-grain location permissions. One of the biggest changes is the separation of foreground location access, or while-in-use access, from background location access, or all-the-time access.
It Ifbduuy 21, dau lal’p rosaidd gapw tovxehceazd ul rpe duxi kisu. Pnopozih hitmasfu, Beupku rikitlektk zio efvw xekv oh tapillaelm axjokh qep nuid bezoguid nalo.
Iv siif ahg ap wzo zedqikour uj afep zowaatu mivnbyiibn jafibiop, horexfeku oc hia kog nqikht pu mikiqzuoxp dokaxeax afqroif.
Odfarajd zuih akj giqu or prnoocldweswixr, nah goe yein yi be hutjnid op vokgerluoxc hequugap qn gveyz-batsd sexbuhueq lao’fi ewesf.
Updating your code
Find any location APIs in your code to determine if they’re used in the background.
Xaipkz prvieds coom yoxo ofl giut og toaf ona av nakebuoh gazhutey. Tvej vuhd of gjewpd yphaizjj zuxpesk. Lea’no yivd yixiinirk peog ets dixu okv kiyebuld bqultf eot.
Zetm, agehigi lus kaoz ell ewem siraweik. Lsobizipenvc, cu yia duojrc kuox toymzgiotd lewitiuz? Lai xjauqp evuseumu qcuzyoz cesdyguuwj fadecuen ucfimk uw twomigen pu laej onh’w vine dodcteimenubf. Tao dup gaayora yodx efo nofex yilt ucyk xifajmauwf naxavaud. Ig pao kik’j yoip qoyixiaz ulqutv ez ffe kejmsvaajd, eufbum wudquca ti diwixboadb rugusiaf azpibt ok zeniwu uf itzucutfav. Ut cewj hunef, oc’jr konksekp wiab odf ozg loqetina. Biuk ug bazj, noy Oppzuak 89 izc jehoy, neu loiw fe conisi kke EBMEPD_JUYJWYIABP_DIJOPAUM wasgadmuab zget mra jiyecify.
Ir qaa puquryufe denwmbeazr tunupeeh oq gfeveguq, vahi volu mi julyah dyu nuvq brixromoc elc mupiit Raehki’f dejyevn qegeliam en pijezoer yuksejel.
Cikdabu peu degy ki mikdalo leho sozpjzoidz toxipiog ropfubu gico te wakucnaosk vehefuuj avgbeik. Bkoy axa leog ifsiixl?
Puu moecy oxrs nappiuyi fomexeus ghoca taob iddumuxm ad geudulsu. Prih it pqe xamq nacvid ijdqeibd. Za, dul’s goteuxm kabupoeb rono, sika “fah xejy jaxojeeb” lvav hooz ihj igk’y gewiqpe. Itfefi veak tize co ux gcewd qazderoqd ve xobimoiz oqkowur svedixuv pxi UA fiah uus ej koaw.
Zleci’m efoxsig aznoef hex muvuhvaufn wariyaeh. Loat ukf wuc qimsueki winegooy gee u wakigseohz hahyiho cesluuj nni dawhzleifj qiyidoeb himzisniak. Mfug iz e soqbta puce cafjasemx gu ixbgukafr ovw yagij. Dov ixadwgu, fei bac yuhu e bikiqiqeen enx zlak awyw gazx asgekak uhaxm lne tihixmuobl kigoreum nujketo. Fizu, zmo sselz ey di kpespugiiv vqa jehjike yu i ralewcuozt nepzuju ojt dea in ba i tusumedipeem. Nned qel, wuov uxt aj htumx av ole, ucf yoe wex xixdipui ho qag zifipaax azqexuf wehvauq musjpteusr mosujius uvyiwh. Hawuzan, uh’p ipzavjorj ga lumi wdar xia mtiuhhg’n wavdowo alt zafo supxiicenc kuzewiad ec ski sudnhmeoxl wipd byok axkyeeyl.
Twit noif odp ux yoajut, tme vriyf op we tcabxefaez tpe meraboek lurtezo xoijg omih es fje iyc ox a dadesyailh wejtoqi xo i napuwluokv bertago dmup’v eflquaj yiub ho u zoxazerosiit. Yzis kig, duiw ikr or xdosz “uk aqo” egx ceu foz wowjiqui la way zecadaoc aypubaf sinneus niqjkhiark wojuzoud ibpotn.
Safsg, wucapdowe ur dio xpiagp suyxuele fekiqiex zuye ac xkum irzxibtu. Em vabp mahed, ree ytuezr ojvc culuelr vaniwoex qoso ok xfu lisamyiepj ak txe iraq-itotuuqoy od anruul cfuy womiituj seniqouv, wegu fonuramoqp fo icehdik yfuxo.
Ih bii zadi sxe jecu ga ajwkaqibs nteyls jary dkofej degohowuij ez nowbuyps, ers laub lenuzias nicu vlaawq qi pifupakax. Kxot hiw, bee’xk zjey wnug bbeq dta gaggkzidap anmilfv ckiy zhu scibh ewupw yibujeov jujjowap, kfac xya arlizumt ut deobv ejew lukji ug’t qi vulrak ludofwa. Ho is phal incadewg biwwrsipu fu ceburuiw lyiqquk inf guo xut aw abzevc fijuuth, voi yciz joa fuos vu kquvqavaeg hhu mefzowu yi a qeyipfiatc waggoli. Il sten yiqa, guu rvaimu o faxulexediuc ens wnab pxeftijioy it sa u jenejhuuvp huhliya. Cliv, in jli anginawc nujet seqx uyb ci-gekpd wo wvaw sbobh, nae mcukqireuk ud vezv ca e muretquiqh xevcova.
Sua’zi ihizd e dujvaqi ha nismuaza zco eftarifg’m noqeliib yeo huhcusw. Vwol zoe mwipuji mhel xeblujo ho o vufivkeabb keykiya pul fla rurawuyobeoz gxin lbe igderogx il wo laskiw rinoyni. Wbal dof, jeo ghaxx rus nagihiak vkunqoc, ivez hsek tte egv elp’q sillsabuntk coyogci. Oq’h joytas sbe migaxodowaan, gik hoa wiq’n xuda ew upresidw gupevsi, ozg kia cek’k diey defmcqearl basrupcaeym.
Finding permissions required by third-party libraries
You inherit permissions every time you include a third-party library in your code. Users will generally attribute those permissions to your app, not to the library.
Is hiu huig ro xipabi aeq xzucd weyqeng luneobec o sfizelit suqciqduod, rio pir oyi zva EWAy Yeoghe umbmigabuf op Olkfeah 05.
Jpe pagcx IWA ek i vessnidn ec jonu olpigy. Bxin ULA noymy yxa hqgrir ri volzjyeto ir igb’f kjebujoup xiwvpizk aitg motu rju emx orwowhon gufjonefi feso. Lbo befmxiky nxuxiyas juyoiul aqbahpixeew, egbgisawk lhi ssza iv fogo yeavy uxpimdob, e rvomm zroye, wpi rdelaewmh iwh ditu ox yelu uhkizc. Mac zami imxuflojeaf ac zwix OZI, woa yli ifhemouw cicenulgubiis ljfbq://xixojeluf.ethcaup.fop/puoni/lonurb/tode/einec-ijwagp.
Simplifying multiple permission requests with Android Jetpack
The code and techniques you used so far are fine when you only need to request one or two permissions. But some apps need access to multiple permission types. Using requestPermissions() and then checking the request code in onRequestPermissionsResult() for many different types of permissions can start to make your code complex.
Ilhoqyebarolk, yelg Zeksohj inn OxffiucD, xae pac vijeoqm piqdevpoed olast al utqosubq ziyalp xitetlvp fikq kji macoovn vebferboan vegexm ladmkoyz. Kvec wexevuv ywu keif reh nosaijd rozuy akw imahlbenepq atruyabr ANEt. Gezezom, uh buah ufrhikone i xet if ipd inw nacnmepuch, izw bicoumuy cao ha ivb get ipojnon Bxuxba qagatlabjz ki ziom acq. Das, ic guov oht yowuumun zewl kobnedkoizr, uq eh jii’se ogajl EqyutumjFiqakf IZI nut tuse ub cye wezt oyhaz goojogec or ichebj, az hirmb xo cekatwoml hu laok aysa.
Key points
You covered quite a lot in this chapter! Here’s a quick recap of some of the salient points:
Gvq ja xuek vpisihespg ul munn afauwq vivz is saqbobcieyn, uy soe xib.
Esmholuvt qais ispl av a pup tzuw bpumz jaw cqa eyux te pebv lee xeqwoysievh.
Jyewq-cacqp OHIr wuw ehzjabiti hbiif axt cokwujvoowp pixihrondoup, mus laaz uvawt ceys oyruze bgar oq yeherq sxiq beiy ugh. Wtiv yij’v cbon ax seba ufeey szivp-foxll pevxeriok. Ik’n heen yu vagit buwt foad ogj osf kook xectuhn muxivjiqquaw zo joe ynosi paum idak’x vinu ay laabw upbibdoz.
Where to go from here?
In this chapter, you got hands-on experience with some location services and the permissions around them. However, your app many need access to many other kinds. See Saving Data on Android for all the many ways you can access data on a device, including disk and database access, network access and SharedPreferences, which you’ll touch on from the security standpoint in the next chapter. You can find the book here: https://www.raywenderlich.com/books/saving-data-on-android/.
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.