package Ġvan . amap . locate Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġcom . amap . api . location . A Map Location Ċ import Ġcom . amap . api . location . A Map Location Client Ċ import Ġcom . amap . api . location . A Map Location Client Option Ċ import Ġcom . amap . api . location . A Map Location Client Option . A Map Location Mode Ċ import Ġcom . amap . api . location . A Map Location Listener Ċ import Ġio . reactivex . subjects . Async Subject Ċ import Ġorg . apache . cordova . Callback Context Ċ import Ġorg . apache . cordova . C ordova Plugin Ċ import Ġorg . json . JSONArray Ċ Ċ class ĠA Map Loc ate Plugin Ġ: ĠC ordova Plugin (), ĠA Map Location Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Location Client : ĠA Map Location Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġasync Subject : ĠAsync Subject < A Map Location > Ġ= ĠAsync Subject . create () ĊĠĠĠ Ġprivate Ġval ĠPER MIS SON _ REQUEST CODE : ĠInt Ġ= Ġ 0 ; ĊĠĠĠ Ġprivate Ġval Ġcheck Permission : ĠArray < String > Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ PHONE _ STATE ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġplugin Initialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . plugin Initialize () ĊĠĠĠĠĠĠĠ Ġif Ġ( cordova . getActivity (). getApplication Info (). target Sdk Version Ġ>= Ġ 2 3 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild . VERSION . SDK _ INT Ġ>= Ġ 2 3 ) Ġcheck Permissions () ĊĠĠĠĠĠĠĠ Ġinit A Map Location () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcordova . activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MIS SON _ REQUEST CODE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit A Map Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Location Client Option Ġ= ĠA Map Location Client Option () ĊĠĠĠĠĠĠĠ Ġm Location Client Option . set Once Location ( true ) ĊĠĠĠĠĠĠĠ Ġm Location Client Option . setLocation Mode ( A Map Location Mode . H ight _ Accuracy ) ĊĊĠĠĠĠĠĠĠ Ġm Location Client Ġ= ĠA Map Location Client ( cordova . activity . application . application Context ) ĊĠĠĠĠĠĠĠ Ġm Location Client !!. setLocation Option ( m Location Client Option ); ĊĠĠĠĠĠĠĠ Ġm Location Client !!. setLocation Listener ( this ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( action : ĠString ?, Ġargs : ĠJSONArray ?, Ġcallback Context : ĠCallback Context ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( action Ġ== Ġ" getCurrent Position ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetCurrent Position ( callback Context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Position ( callback Context : ĠCallback Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Location Client !!. start Location () ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONArray () ĊĠĠĠĠĠĠĠ Ġasync Subject . subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Client !!. stop Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put ( it . get Latitude ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . put ( it . get Longitude ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Context . success ( json ) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Location Client !!. stop Location () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Context . error ( 0 ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Changed ( location : ĠA Map Location ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( location ?. errorCode Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Subject . onNext ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync Subject . onComplete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }