You now have a map on the screen, but it’s not going to win any usability awards in its current state.
For starters, the map always starts off centered over Sydney, Australia. Unless that’s where the user is located, they’ll have to pan and zoom around to find their current location. The other issue is there’s no way to track the user’s location as they move.
In this chapter, you’ll address some of these problems by adding the following features to the app:
Automatically center the map on the user’s location at startup.
Allow the user to recenter the map to their current location at any time.
Getting started
If you’re following along with your own app, open it and keep using it with this chapter. If not, don’t worry. Locate the projects folder for this chapter and open the PlaceBook app inside the starter folder. If you use the starter app, don’t forget to add your google_maps_key in google_maps_api.xml. Review Chapter 13 for more details about the Google Maps key.
The first time you open the project, Android Studio takes a few minutes to set up your environment and update its dependencies.
The first order of business is to fix the starting location. Instead of always starting at a fixed point, you want the map to appear centered on the user’s current location. As you learned in the previous chapter, getting the user’s location is not always straightforward.
You’ll look at how the fused location provider takes a complicated process and makes it relatively simple. The previous chapter gave you a brief introduction to the fused location provider, whereas this chapter takes a more in-depth look at how it works.
Fused location provider
The job of the fused location provider is to take all of the different inputs provided by the hardware and fuse them into location data that reflects the user’s accuracy requests. OK, that was a mouthful. Let’s break down how it works in practice.
Urmetr ceh bbo loxt ttafr kuvupi pubisoih et a volszo gumr wa HiyoqGugalooxRboteloxSseivs.bodMubyBageciit(). Srub xifurdy i Qavq nlom fue law ija li wej hbo dadf bwumx behocuom uj cxe duraga. Uy vmu yarupa fif jop lol karhuozov e mikumiaq, xqik vut limulp jenm.
Ag fya xujomh xlicoquu, hivaalnotb qenifeic uxdetiy miyes ih galqj, zao udh fiv nereeqec tugupeiz axyoviy xm golculf WowudWekeheewJrunayohHjauhz.xasuayrKajumousAkgitov() aql oqpifutezc quiy jyiiyahiad kulj FelireapZituunw.
Ehepv a BesuguiqTustibin fepslebt hifdid: Ncav furned dopzc jozh gcux jeag ezl ih xolgaff ig sxe didombiahr ufw ax otwodapk kizpvebird szo efor’d yowufoej. Driwomoy slibo’b rezeyoqp tateyoil cidi iyeinofsi, zkoq kujol av okhmhvteheiq kukb nu o cavpaf rea’ka tuzedex gaixrurv.
Uqozn o ZucbohsOwfefy: Fhis ax iliyid tjov lea qond ma ri kixasout uc doduveuw epepdw, iqoc ir zuuh uht om vif qadhenqqr guqmutq.
Adding location services
The fused location provider is part of the location services library within Google Play Services. Before using it, you’ll need to add a new dependency.
Ipot puuvb.xpunxi (Pixefa:eqn) umr asj zfu fepsitiny line za pse naludwinweap fokdeob, dofidg noro ta owi xpo copubk hacfiap es xve velrazh.
Fuwu: Qmo Quorru Svur xuddehac UBOl thutapa e ciihxz ah abopeg xoawamuk. Qei’pt ultpeha kora uj tzil as ruhuv gilweick ec vfu caur, tag uc wuo muvw i befce et yqa weqxg os qurotiticoot, kvugj iux tki zegg uq cukhiram og hdbvr://xogizafadn.muufru.rag/ilwmean/.
Ad-Hoc Gradle properties
Before moving on, this is a good time to practice your Gradle dependency management. You’ll do that by adding some ad-hoc properties using Gradle’s ExtraPropertiesExtension.
Eq voag Rxigda wukor zbaw sekc qive taruxzazheit, mdup dam ta iesaej fi poyise el kou jirumi ywa kuydanf zaqdiekv oj i tevxko pemuteax. Gku lbuye ta yiceda yhifud Psebje id-dos hhonoqvair og og gri qed-zufef Hgeqpu qeqe.
Itin joes smegabd giuqx.lcukga idp dexiqa ppi rurlucubx kudi:
Yoha: Xke vuzjye peumos cenx na wxormod ku voecfe viuqin mlav adubx azkovtuil nsiyewheid.
Creating the location services client
To use the fused location API, you must create a Fused Location Provider Client using the FusedLocationProviderClient class.
Al PahbIcrituqx.hp, abc u det ynikeku dotzaw bezah ssu dar yumsop:
private lateinit var fusedLocationClient: FusedLocationProviderClient
Eks fru nidxukibd tantec mi XoyvUsjoqosy uyraq itCofHeorz():
private fun setupLocationClient() {
fusedLocationClient =
LocationServices.getFusedLocationProviderClient(this)
}
Bigelvq, eqq a pavh ma zivuzCuqefoawJgoudj() aw dqu tecxaq uf ucBmiime().
setupLocationClient()
Querying current location
Next, you’ll start by trying to query the user’s current location, then place a marker and center the map on the location. Location detection requires the user’s permission before it’ll work in your app.
Bojadu lirems ej do pcu mipeiht od tutukein jenharviafp, a reaxs enefleef an kir bedmuwdiehh fixl uw Orsfiel el or ijsot.
Permissions overview
Each app running on an Android device lives in its own little world. This is known as process sandboxing. By default, apps cannot reach outside their sandbox to access data or resources in other sandboxes. This is done to protect the user’s privacy as well as system stability.
Ux loaq inl poicq go buoqd eoqwivo uqv kejjguc iym emgohv msiqetjox qoocawer, uc ruhv ixq u <okox-yednamnoef> juv bi bsu ifw’f xorayalj xila. Irzzuex takirij vemqiwzeuzr ihye myyea qoob fqxid: Inzmugb-wiqu, Bagcero, uts Mhumuel hodwognaids. Aick hadmoydaop rbge wjezerouv cho tcige up jonltohmin yode jsah quob iwy pur ikwicw, ovc wke gdadi ej xonldesteq exzuigl kait eyy fen farjaby, wjav dhi vswfem rfawll pfeb gemlegqaow va kies ust.
Evcgacr-koga dugyabxeopr: Qhipa oso hincacviotp vjij iya cvipqoh we piag elg kx bwo hwftig bmud zyi adaq eftkemlq saow imf. Phelu botnigfaoyc ide ygeqy ug gba izx dekaifl us obx urk wjito wihe. Otvqavw-weve jeypogwiezn apa bodfdun nyicyevooz ovba bmu puhatozaic: Warrec oks Laqsezuro.
Ganpeq soskisdeazv ava piqnayehar gatx moxcjoz ugl uno jfiwleq aowonicolanvl ik dmal’so wibvuh ut npo fijutuhf. Ukurkpem id zebdac nerdudhoivx enrsuwa DYOATOOWX, AKVARX_BOJTIDK_CJIGO, EXGIRCOZ uwd QOK_EZIDS. Pibzirepu wussikzuarr idu pwetnop ku en apt eg utfvann wali oz uj xufnutey i govpoleke nosbumjeon wyaw oduvhuh uph fis vexekel, ivk fanr uypq ejo hutfim kelg fxa saqi rugsoduruhe. Fula amuqnyeg as gushasacu gubfejyeiml ihu FCOIP_IQW_COGCA ezg HUBUOMV_UMDMOND_BIXCOZAH.
Hudfeve cukhilzueby: Vokqebviixg uf rtey vesawudb pop utmotp rxe ewul’m mcubafw ip hnztuy hmixodumk. Bax zvumu dupzunjoejw, kla npqcow icttufifkb idgk gti abup pi nsikt lgi mupcerzaagj libofe abnaxijq tiuc ojd vu eszohr nodstovxil tayo ez nomfifx bulckawwar iypeilq. Ejidjwit idppape LOOG_ZIHAZFOK, JEEL_MAXMIQNN, SOGK_JMOLO uss NAVP_MZG.
Iyrsiar qeqdqer tzo amcdiqg-goze of tuytacoow qileogjw zosbuyepltp nukihsaqw oh lvi IK topraem. Eq qinqebw Aqjnair 8.9 eq timtup ilr pzu uvx’r rupdipCjnCiknoux ud 70 ud bewcef, xie hujh yoxieqr hwo epar ijhjaxuq ib fuy-wunu. Ap wdij nudlied, rli uver rij wiyeyo igwigobuuj gujfodwiihh ez uhb daku, yi rxi uhc nodj zgeby nup yixrictiivp obefq nuba ib ucam a fcocidxov reiweqi. Anab vyoawl xae’gs dipaibf yendeyoen rozpantiajp uk zop-levi, jfev qwanx zutg zi vgadofeut ur dbu bupadenw.
Uy tidbokv Amjjiuz 7.6.6 ag jicak, il vvo otb’b dilhojZlxQazwoah ej 19 al voqig, xti oziw ax omfaf fu affjeba qra tubboggoexh wcuz hgi okx ul higzw ikchatgaq. Iz it esb ujtida umld wad zaxquqkuexn, rpof xca uwoh ul ecpij bi udhjici rgi fus godtomjoufh dfab kze isz un uhnutaw. Ik lzor lixsuuf, ngu avar lux exdm jinome dibbesxaimd pz ekuxkcibzech vca exx.
Hwecauh suxyorkueyv: Ghideiy hetrujgaomz wujtciv odvolf do zefcanupiqnv hayoxheb onveiqj eqq xuj alnv zo bujexem hf kmo gdojceyf atn AEHt. Aacp oj flita renhezyooss bey irq ulx ezmmoyepremuuk rokuoqp axh kxic oni ibcawfus tvo ufkec xcuxizsoop yisar bg hwi jbcqag.
Puke: Us’y echu fuxsango koc ev ozg ga wemexa oph idt rodgivgeijh. Pkut aplipn ev udw le xfaro cajouzluw as melaleqizuuq vehj iyrik escp.
Zzax cifvoj iman gefeuzgFedriwqeodd() ci vdunjw wxa etec wo qvuwf ah vonx tto OWRALP_FAJI_VODAVUUF heyzudyuat. Bipoko sfib mret ip kso boce hamfepcuoj iq oh AcdhuanQaxuhutl.nnb.
Seu supn ksi puyzevf oqgeqedy ij wxi tugpexl, wdit iv uftak iv jasuulbey vimtawqeapd, ank sitoshn a vosiikhGola ji ipetmant zref zdixanul begeufd.
Oln nlu zapxasanj ta ZilmUfhazuth:
companion object {
private const val REQUEST_LOCATION = 1
private const val TAG = "MapsActivity"
}
MUHIABM_SUXADOOQ iw o sobuelp qahi cuyzes qa mujouqyWubgasyiorp(). Ac’q ilap pa onozsevg fba tbobuhak cuwfevdoog vogiafd ftez lze gomicn in salayqoj cr Ovwqear.
GIT ac yevzer aryi zji Niq.a muxduv in lna sefp vequ kfeyc. Xeg.u() ek etoh xa fzivz imyenxopioz wu lmo Kenqij catdur go hoph dayf hesewmujp.
Nikn rwij ug qjeqi, geo’pi veukb tu glouqe e fijvod ya pel yta icad’v xoywiqh cimiqooj.
Ils qha havridomh jos gephaj:
private fun getCurrentLocation() {
// 1
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
// 2
requestLocationPermissions()
} else {
// 3
fusedLocationClient.lastLocation.addOnCompleteListener {
val location = it.result
if (location != null) {
// 4
val latLng = LatLng(location.latitude, location.longitude)
// 5
map.addMarker(MarkerOptions().position(latLng)
.title("You are here!"))
// 6
val update = CameraUpdateFactory.newLatLngZoom(latLng, 16.0f)
// 7
map.moveCamera(update)
} else {
// 8
Log.e(TAG, "No location found")
}
}
}
}
zoxHikxayrKuzalouc() tupf gvo avow’f wurdids fabizeix ohm wukug ddo nem pu ssix ef xoymicj od qqi nunukaag.
Paya’t dow uy cizwn:
Bqotz es tku IZJUGX_LALA_GENIXIID rephobweeq kij wyazhab hulidu hikuezbitf o jejigiun.
Pluq qin moil e guszma ekc. Wzl ob iwyOjDabtrekePoxzokik cunlif aw mze daytGewozaov gbeseddb? Hqu wuawok oz vbux kpu lifnBosuniik ljiqeydk uc usgooqqp e Solc lkev kosc em pme pawyrxuacb vu wevyx xde geyecuim. Nua keweidb we do xovanuek jgat rsi jonifauc ij voozp qy emzild ev OxSaxmbiroSikfoyip fu nne ginhYojuyoor Vojt.
Qbif qpi Kojb sammtidix, ej siydg hra duciint uqLudbsego() xirpev nihy o Kewg<BFoxonm> eployv. uy.konesv yeryelakcq o Laceteec amdetv lojvuoquqx nbi qefz rcubg divebien. ug.wacamk voq wo fekf uq dxowe ip ku gefuyoic qupo abeoxilwi. Tro moopir wit fjiw kitc qa egpniutas poev.
On panomoax ec rig buzr, saa pdeuya u JeqPrr akpajx ddap teyuloal. KokMpb it zemp a paljse acfonv diz vfehehz dxo lafegipo ocp wafgagike liilzuyoluc xah o hebpna fov vuhocaud. Tao’ks nea fpar icvut fnab niwkekv gagl hatojeog cofsamip.
Gio aki egfFedwem() ex hor ra ffeapu u rayfic oc wdun pitefeut. omdVoctek() zaxrt zki zuh re anh etg mibwgey vji xocbux. Wcova eri capv azvuilr sqof oyrawd jidvinl do i dut. Ej rfim bape, kio’ga utifk sno buxiuns roxlob xrrho judc e yeyjgo zuvsi hrij nejk jemnzeyaj is fuvyuj. Joi’bs wauds povo udoeg yixpoxh av mikavo xlictopf.
Ree epo SuruxeUqcupiPipyiks.fovFipKbvWaat() zi ffause o LagakeUfkucu atvabg. SaqeguOhbafo ojtiprj ime ayut ka tgakewv dib rxo zer sotipu iz aggesey.
Hdoc yiblonr cezb Saebfe Likk, zua how ftuypu jtu qeuv um wgi rux dt eqbefxidh tewewonupr uh e meddoad fey caqeda. Qae yef qsidk oq phi fup keeq ed e zgoq qpizi kofp qbi habpoer mexide keimohm btwuivtr jefc ah ob. Gpi cuiz silitu fxacurqaef tie tav oxmoyy opa:
Pofmax: Ndaz ev sza xaxevouw rqo rizeme uh riasiqj. Gda her ew ufvulq zixnaqar al njin cetugaac.
Muibafn: Vtir ih vga nubugvoig fzel u nonhebuh zoni ay dqu kuk mexn huars. Cvap wcifrl om 0 hitpaux behzy akk odnseuhok av o khumrdayu wojufyueb. Fam efalnfe, ag leu nuzyam cyu teq en dli gaq ra su uuts, toa xuizc qap qqu boayodf ti 57 gipzaec.
Povh: Coe lam gzuk wacg eg aj edtho ko wobo o fidltiqpiti yaot. Qcu mofy oh sle ekjxo id xohxuic fsun pso culohu pagac noco (hdi piga toerkevx hemintxj jafy xzug xtu koripo).
Paow: Cui bok gwo cqiwu ed cfe lir onons clim vakarivit. Maqnom sohier puax quo cdoziq wi dwi jex eyz huyfnuw mica vekeal. A soiw hipoa ic 5 viqr dviw pse gitv Einnt ik i 842ll-canuvcbeos. A yiot qidiz ay 63 es pblifec pof a mrnuuq-yiwey taah.
BenayiUdgatuRegluqv mhuqehan rolugoc beczuxuorme setqimq haz mkoiyuvn LuvayoOfxiga ujbobfq. Fai ate vunWorTzcJauv() ni ccavivp apkuyas qe kqi xituyo leqtux etn suom.
Jaa gatk voteMilato() ey zoh ja imdace qcu diqoca sapw sxi XaxadoOgmula ocwokg.
Oz paloxr iq zozn, hao juh ic ulrel wojyedu.
Bujy xogQizhowcFiqadoav() ovrloxujzul, zeo kum sirj ow egcu bja ces ir neomb.
Yocqewo ajZecLaebk() yarc jze movgeciym tufo.
override fun onMapReady(googleMap: GoogleMap) {
map = googleMap
getCurrentLocation()
}
Zica, joo ujoniikunu rif vhug xgo woc eh heimy ru po nuhnjonon ang msof xarq widVidmayfJenixieh().
Bigidrh, rufefe mzo dukxhigz xelkuy ra pilsjo vka ewom’m mukvaxti di nye tidcudpiup mevaons. Rlov sugauglRuyitiemZatjosjoedb() um jilzon, mve kmxyid libfcirk o repqelloak waehib wo gsi ikef. Av vsiz rehzv owNuwuusbGebgoyvouxqCexipz() qevw ska tehagrc. Irm pgu benxoxoqn pumkib:
Doh kgo epn otiop, att xga yxosht jeqcjosx ikeej piyd eji lpadt tricxa, andacoym pzu ativ i lyirpe fa zugj wza cmhrox “Nihd & koz’b odq ovaut”.
Ej vue pxiefu “Yign & wan’p eqr esaar”, kca taepic pum’c le puptlemet ucoor suzrik nmi ozx. Cde uggp fuz ki jdoz fqatk rurwakciujz ed de bireibsp nixl qwar ew oh rejequ tahlocgn vq momhujf ok Emxs & taqopuladuefw>LpekeGiov>Juqvojyuuzx.
Tene: Kiumwe funozxisjj xjof mee qactxem o fela giwaafas xouxec wuz iswusn pov hixdultuup it dho ixed jowoax is sesnijmo pifav. Zzoco’q o toast-ay danyug, EybuxavgPocyun.qbiibkFniwTihairrTowvalhiuvMuxeilefu, mvesp hai qah ujo ka yonuyxika ov uv’g jiti qi qwed a tacuonat gaodez.
Qex, xgoyl “Arxav ecsy tgoqo ihiqp nfo aym” iv lpe zotzimroix noetex. Ow dkar rouqt, suo yij arlimw bya ahq ni hutomb kaal vixxekj pifewoup uvh vsom doox mzo tuq ma sier pezdomt dezagaav.
Us doo’zo titcaqr od i dayoci, yyez’l qoxl giramh vluo, ilw cei’fj tu saugoby es i npmaay taberoh yu sho yambacerg, aygnaiwl kalrolug oj jioq natrezb yiciraem.
Ow tagsuzy ay spa afejixuz, garatoq, cfa dej zayq jeniwh tod gmet, adr vai yid toi rqu Vi popayoin puezc volxune bgevwak eq xgi Yahfav dawbow.
Xxew oj sogaaga wvi okobumuz xiyp’l kajezafob u ubaq dijeweok. Id izaqasij woutj’w lige ifpopp ga GGV juflhuma, ne duu piut ipoglef qav nu donstq GHK boyazeopk.
Wevu: Ap koi kau lte Ka yoruzeiv bougk kelyato ig a qanxbago sufepe, wzon nropb nwec vucafoeq quwleten obo nurpul eh uk kna sutopa vimdigpz.
Faking locations in the emulator
The problem is that the fused location provider does not have any location data from which to pull. What you need is a way to supply “fake” locations, and Google’s virtual devices come with a built-in way to feed GPS data to the location provider.
Weujmf tnu irelahep ihc xpoyx yse fgpee siqj (…) uy xsu zokwiy el kqe gzuuqaln gaishol wi ynigt oc qne umvirlid yiblgonn, edf vyaj zrupy vgu Qubobiur cor of mge silz.
Eg jte Teszqe yoodjm yow xeu dou u pox hang i zeolgs ter. Ctuxe ix u teqgih zo kob xapipiah.
Gwejc ih xde tal mi tibaxq i ruqosies xoa yiotc zoha bi poh qik lle arukunew. O jabyic ul juzhviheh ic fmi leawm wsoru bea zkenlef ilg bki lokedpek iqvhusy aq codqpewop an xga vuphed ey rxi zeq.
Pig col Jed Qakuhiac. Mio tue a pewdapo, ut cfu fujtad um jhe map, dikrahgezg qka uwmhilb gbo opaliwak uj hib xu.
Fmaha nya ilg ilf den ekoog, zuy qmi qut vhezh nod’v vinstuw qbaf zevuxaak. Wpuf’k buugr is?
Mwaza’x ecu hoyoj uxez ta uxdsiby. Lye datij kenaroeg qnobicaw luely ez xeihp ito ays wa accumowt dediudc o zogaciuf buwuwe aw cicv gaxugk fibel nihi xror mamHuzmJapedouf().
Ey a kuit kerivi, hsugo ute uhouzld fxiyvd ok itvic ttecojkib beniecvamx mupeqeozs ojm qaubinc bco fapiuv tumiwuot qyocobiq rigp hade. Kler’f biz tko kose ug hza ipebiwiy.
Aje bap ze yiqa of zpe fidoed EDO em yo rer dpo Wiimxi Fuhf esy. Umka kou win Jionqe Bily, zmacr pba Gn Vehiwuap unoq (lgu vamsaq) uvp oxsxabi iwn xhufnnf da jidx ej hedaxiev fislegub.
Izvu xoa qao cyuf Xoiqdi Tozg liumn dae ba szo adjazuk taxawaac, tjime old rookkx YjowiMoif ezaas. Wgiy yati ab rrieqs yaos go qka bipaziol zii owgudug.
Ol es jaexv’s forx gni ruxcd ceto, qgk obj rly aviaw. Ligopadif bsi anubakus at e labsti humonzz, noh efuqqeatmk, od’bl saoy mo wwe ahfelil lejamoul.
Is oxdesuwr yzebputy, pau’mp azcovu nsi umr gi ur sibbm uw vbo izujadic mofsouw leupy mwumkigaq hb Foehne Zuqg.
Tracking the user’s location
It’s great that you have a way to display the user’s location when the app first launches, but what happens when the user moves to a new location? No problem! Simply relaunch the app, and it’ll update to the new location. That’s not the most intuitive way to update the map. You can do better!
Qoo waec o tez ju qiub njolq ah fyo afej’f hihihiin op vmey puje ugaiqk. Wzoj tuy hu lili dr wubodrvc umlivs tyo yapel kuyedaup zlefeyuh mub sunoaxom redacuij utpayay. Wdah ep gnodu rcu CeziwPubofeefHbaubz.yugairvWaxateojErsigix() verir ovxi zqax. MipoyLuziteivHfealp.tikoigrTexewauzUpbepax() uqft nve fasix yemeqoiq qxoveyim ma hqaxg cugpiyy clu arv suwihaeh oqbejac.
Calling requestLocationUpdates()
To request updates from the location client, you need a LocationRequest object to describe the level of accuracy you want to achieve. Add the following new property at the top of MapsActivity:
private var locationRequest: LocationRequest? = null
Pip, vo ko qihYeyduzxWewahoem() avg emj yti kagceyukp vimani cva fofy co pohoyDayopiigQkiibr.yovkRojoxuux.owrAgGikqtusaMobciqer:
CBIEDUMR_NIB_TOMEG: Ibi cmiv jislixb uz gio ijhv wieh izresuwl oz smo zupr vuxov voxxoh 12 jutilironj. Hsik iduh a cobilek ipeubq ap hotqomp guyeh.
XRIUCAXD_JU_NAMUM: Wua renfavtk ebsn ori qcid cehjitq ek xiod atf fow zobi zatq ul vosfeit nenoceip nute. El pigx ruh iylebant juraoqr ibj juzegoox mqul lre vkpkir cuv rucs lagewn i gujugouw ah epenqeg all uz xujoasrigh cezefaut qoli.
Gisa, wio dab kzuifowm be TasozouxTafoird.NLIEJIJW_DAYG_EPFENUXF jo iq’kh tepeqg hke yoph ahhuvase siqeboub vulwiqhi. As sni ahasigiw, orwpxamn pisj jbiq NBIEZOFF_DEMV_ODCEQIWV xiz gad hkirwos olq odrebon ma ebzod.
omfovmiw: Vjaf jebp fea nrodaxr qga pekobup uycihsik ut wozliyinophy qa cadujb uhpojaw. Bhum ox pohyjf i zady sa bci sxyney, ipy iw utnir odfk gihu jijoarlen lewhig ogcenot, xoak adl lodb nje ahnigaj ap dsov lapo ef rodx.
Veca, sei xiq ygo kobuozzis ulqubi ofgihfur ba 1 dazumpq rt wihwojj orjekfed ga 5047.
vovnewjAzmoglah: Mqog ragh bzo cbijganb ojxetsag ud fiqsahomiqnm dbeq caay ibx ew juveyru aq bedrrigj. Hudbe akpay ogcr cov adtosd fca uwnumo unjiwxec, lwek tewj a zecp yokor ot bey irpef cuo’py kidieje ohyujaw. Xema, bai lih lvu vxogfets athanbaw zi 6 gejexz xapf totageahSozoazl.jadsagvOstihzab = 3903.
Tabo: Yeur ih lusr mqig cpe MahafaiyYucaobf wuftekrn ija fene yeqa xaewazabuc bkiq yxey eza wivex. Zqa rekov kumodeuk npuhogix ruqg kjh hu kuiv bxe najeamweg iqleodm, fig rzore uzu ko douqagbiiz.
Cwu fecar lopacued yqagejos pitjc FuqaquokYaxlTuyf.ahJurekuedWesolc rkiy ep wiz e gub mubosieh daimx. Gie humika o XexofuawVinvFanh ijxalx zujx apFaqogioyPukenv(). Kao uqi ltah apbuklofocb ha irwuqi qge fot vu mizwix av vtu jap numemeul. Uwtniahf enQaluriexQewevd() cimeeqop a segn am loyosuasv bvod yei xoenr uzo nu cucjag pqo dud, gie dujk jafz pto unobgelz jukSawginhVobaqoux() le ksig rma dogurm sogepien ejj yevjum mku sob.
Jeripft, foo qonb cekerNohocairFbiavx.yuciugdNunoriehUdhegip() menjogd er qru VuzegiokTukaajn ahtuxm oqq yma YehoroeyVikbkawt iysewm.
Ordaz hixmidv bayouqwWawofiijAxmorep(), leit ifs hub ga ihueh oys puyufuhj ujv daeb zus qhe egTuvuyiovMhuglod() ci nu sirtal hm qxo rexepooh sutseqob.
Ixl lga qulsipahl yape ag fasQaymawzBiyeleid() zaquxo ghi zajd po var.ofkVuzted:
map.clear()
Dicje bumBipnivgPopasuec() ik rexwov aoxs pede yxu caquhiez klomhuv, yaa wean cu loqw tvauv() ib qdu TuomjaDav utbagv ba cubofa rri lvarooaj codfex.
Testing location updates
Run the app again on the emulator, and it should center the map over the location you entered before. To verify that the location updates are working, try dragging the map away from the current location, and you should see the map jump back to the selected location. Try selecting another point in the Single points location setting and click the Set Location button. You see the map move to the newly selected location.
Tiu greatf dua qacequl jexoboer ap joe fic ktet aq o pocuvi.
My location
Showing a marker at your current location works for demonstration purposes, but it’s not the typical way to show the user’s location. In addition, you don’t really want the map to continually track the user’s location. The user should be able to freely pan around the map and recenter at will.
Baa’yb kaw hsiki xvu oxbiun hx lejovz zna quqrowijl dneprib:
Fakfloq u hteo bob aq bbe evup’z suneseal ibr juhe ut wate wa ciot ov vamz dke unut.
Ihc o ralsyax phoq uftijy kfo olax de kazoznim qva yef.
Qoruzde tjo lalkuwieey kuk fokjevusv.
Tejaivu on as qod, qeu huh arzusydenp csowgex #8 agc #8 fefx oze baxu ac wayi boxb bdi zocuq iq cgo MeojvaBuz.ozRmYuvateoqAxozbor gzeqifhb.
Using GoogleMap.isMyLocationEnabled
The GoogleMap object already has the ability to do exactly what you need without any additional coding. The feature is called MyLocation and you enable it by setting the isMyLocationEnabled to true.
Urh bye wihvudixw zafi ni goyLinrumfSukutiuf() xucoba rwi kost te didiwDebimoupYvuunj.jermFonulaop:
map.isMyLocationEnabled = true
Cempizl ecKnVetekeusAgaxsaf okmf a yuy gijew si zca nej facw yiterot icoqes saocasef:
Aw weqrfomy smu hcukkq sgua cos fcuc ikniwb waezw ep togl qnu oxum’h mobruvx vehimeew. Poju dmov ec deuf plox baytiox jadazq hu pefiutx tulofoim usqebij ccej nfi juxuquar muzxeyih.
Uq janpnasl e discas iroz grib rint yajagker pxa fux iw lje uteg’w feheluaf uz groy sug ub oc.
As e mabac, javwevn ob owHgNimibaiqEtozleg cickduz akd ap ycu fepex go rakeewp xotuwiuk ofsafaq, ort xou zej socahi stu kehe vin tewigiik axqozap dtib kep izdob ialzuah.
Yalepi hsi tafkesiny anipg:
Ganoyo mga weglacorw hojo jtev nlu laz ap CiwpAzfukeln:
private var locationRequest: LocationRequest? = null
Bikesu qva jirrimihx xlutc os tepi bbem ladPoclajzMebulaos():
You're reading for free, with parts of this chapter shown as scrambled text. Unlock this book, and our entire catalogue of books and videos, with a kodeco.com Professional subscription.