package Ġcom . mobile developer blog . geo location 1 Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . gms . location . Location Callback Ċ import Ġcom . google . android . gms . location . Location Result Ċ import Ġcom . mobile developer blog . geo location 1 . geo location . Geo Location Manager Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass Ġas Ġthe Ġdefault Ġdestination Ġin Ġthe Ġnavigation . Ċ Ġ*/ Ċ class ĠFirst Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation Manager : ĠGeo Location Manager ĊĠĠĠ Ġprivate Ġvar Ġlocation Tracking Requested Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval ĠLOC ATION _ PERMISSION _ CODE Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlatitude TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlongitude TextView : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstatus TextView : ĠTextView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate ĠGeo Location Manager ĊĠĠĠĠĠĠĠ Ġlocation Manager Ġ= ĠGeo Location Manager ( activity Ġas ĠContext ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ first , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlocation Callback Ġ= Ġobject Ġ: ĠLocation Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Location Result ( location Result : ĠLocation Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Result Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( location Ġin Ġlocation Result . locations ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude TextView . text Ġ= Ġlocation . latitude . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude TextView . text Ġ= Ġlocation . longitude . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Location Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpermission Granted Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġsystem Ġos Ġis ĠMar shm allow Ġor ĠA bove , Ġwe Ġneed Ġto Ġrequest Ġruntime Ġpermission ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcamera Permission Not Granted Ġ= ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġas ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ DEN IED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Permission Not Granted ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Ġ= ĠarrayOf ( Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġpermission Ġdialog ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( permission , ĠLOC ATION _ PERMISSION _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġalready Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAndroid Ġversion Ġearlier Ġthan ĠM Ġ-> Ġno Ġneed Ġto Ġrequest Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Granted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpermission Granted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠHandle ĠAllow Ġor ĠDen y Ġresponse Ġfrom Ġthe Ġpermission Ġdialog ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ=== ĠLOC ATION _ PERMISSION _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ=== Ġ 2 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results [ 1 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġwas Ġgranted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . start Location Tracking ( location Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġ" Started " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġwas Ġdenied ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Alert (" Location Ġpermission Ġwas Ġdenied . ĠUnable Ġto Ġtrack Ġlocation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġlocation Manager . stop Location Tracking () ĊĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġ" Stopped " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġif Ġ Ġ( location Tracking Requested ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . start Location Tracking ( location Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġ" Started " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġtext Ġviews ĊĠĠĠĠĠĠĠ Ġlatitude TextView Ġ= Ġview . findViewById ( R . id . text view _ latitude ) ĊĠĠĠĠĠĠĠ Ġlongitude TextView Ġ= Ġview . findViewById ( R . id . text view _ longitude ) ĊĠĠĠĠĠĠĠ Ġstatus TextView Ġ= Ġview . findViewById ( R . id . text view _ status ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġbutton Ġclick Ġlisteners ĊĠĠĠĠĠĠĠ Ġview . findViewById < Button >( R . id . button _ start _ location _ scan ). setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Granted Ġ= Ġrequest Location Permission (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permission Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . start Location Tracking ( location Callback ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracking Requested Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġ" Started " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . findViewById < Button >( R . id . button _ stop _ location _ scan ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Manager . stop Location Tracking () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Tracking Requested Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus TextView . text Ġ= Ġ" Stopped " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Alert ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity Ġas ĠContext ) ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( message ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} Ċ }