Google Play рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛

рд╢реБрдн рджреЛрдкрд╣рд░, рджреЛрд╕реНрддреЛрдВ!

рдЕрдзрд┐рдХрддрдо рдЫрд╣ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╢реНрди рдореБрдЭреЗ рд▓рдЧрднрдЧ рдЫрд╣ рдорд╣реАрдиреЗ рддрдХ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд░рд╣рд╛ред рдпрд╣ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╕рд╛рдЗрдХрд┐рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЖрдпрд╛ рдерд╛ред рддрдереНрдп рдпрд╣ рдерд╛ рдХрд┐ рдРрд╕реЗ рдЙрдкрдХрд░рдг рдереЗ рдЬрд┐рди рдкрд░ рд╕реНрдерд╛рди рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдХреЛрдб рдореЗрдВ рджреЗрд░реА рдХрд░рдирд╛ рдФрд░ рдЬреЛ рдХреБрдЫ рдореИрдВ рдпрд╛рдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЙрд╕рдХреА рдЦреЛрдЬ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рдХреА рд╡рд┐рд╢рд╛рд▓рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдирд╛ рдФрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдереА, рдореИрдВ рдПрдХ рддрд╛рдЬрд╛ рдЧреВрдЧрд▓ рдореИрдиреБрдЕрд▓ рд▓реЗрдЦ рдФрд░, рдУрд╣ рджреЗрд╡рддрд╛рдУрдВ (!) рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ред
рдореБрдЭреЗ рд╕реНрд░реЛрдд рдЪрд╛рд╣рд┐рдП


рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрд╛ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ LocationClient рдФрд░ LocationRequest рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди API рдФрд░ рдЬрд┐рдпреЛрдлреЗрдВрд╕ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди-рд╕реНрдерд╛рди рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдХреЙрд▓рдмреИрдХ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред LocationRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк рдЕрдкрдбреЗрдЯ рдЕрдВрддрд░рд╛рд▓, рд╕реНрдерд┐рддрд┐ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдЕрдВрддрд░рд╛рд▓ рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

private LocationRequest mLocationRequest; private LocationClient mLocationClient; private LocationListenerGPServices(final Context context) { mLocationRequest = LocationRequest.create(); mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setFastestInterval(FAST_INTERVAL_CEILING_IN_MILLISECONDS); mLocationClient = new LocationClient(context, this, this); } 


рдлрд┐рд░ рджреЛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВ: рд╣рдо рдЕрдВрддрд┐рдо рдЬреНрдЮрд╛рдд рд╕реНрдерд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдирдП рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрди рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реВрдВ, рдпрд╛рдиреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореБрдЭреЗ рдЕрдВрддрд┐рдо рдЬреНрдЮрд╛рдд рд╕реНрдерд╛рди рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░, рдЕрдЧрд░ рдпрд╣ рдореБрдЭреЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдпрдерд╛ рдореИрдВ рдЕрдкрдбреЗрдЯ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, mLocationClient.connect () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдирдХрдиреЗрдХреНрдЯ (рдЕрдВрддрд┐рдо рдмрдВрдбрд▓ рдмрдВрдбрд▓) рд╡рд┐рдзрд┐ GooglePlayServicesClient.ConnectionCallbacks рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо Google Play рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдЕрд░реНрдерд╛рддред рдЕрдм рд╣рдо рд╕реНрдерд╛рди рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 public void enableMyLocation() { log("enableMyLocation"); mLocation = null; mLocationClient.connect(); } private boolean useCurrentLocation() { final Location location = mLocationClient.getLastLocation(); if (System.currentTimeMillis() - location.getTime() < HALF_MINUTE) { log("useCurrentLocation"); disableMyLocation(); if (locationRunnable != null) locationRunnable.locationUpdate(location); return true; } return false; } 


рдЬрдм рд╣рдордиреЗ рд╕рдордп рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ UI рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рди рдорд╛рдВрдЧрд╛, рддреЛ рдореИрдВ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрд╕рд┐рдВрдХреНрдХрдЯрд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдерд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рди рдЕрдкрдбреЗрдЯ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред

  @Override public void onConnected(final Bundle bundle) { if (!useCurrentLocation()) { mLocationClient.requestLocationUpdates(mLocationRequest, this); if (findLocation != null && !findLocation.isCancelled()) findLocation.cancel(true); findLocation = new FindLocation(); findLocation.execute(); } } private Location endFind() { long sec = System.currentTimeMillis(); while (this.mLocation == null && System.currentTimeMillis() - sec < TIME_OUT) {} return this.mLocation; } private class FindLocation extends AsyncTask<Void, Void, Location> { @Override protected Location doInBackground(final Void... params) {return endFind();} @Override protected void onPostExecute(final Location location) { if (locationRunnable != null) locationRunnable.locationUpdate(location); disableMyLocation(); } } @Override public void disableMyLocation() { if (mLocationClient.isConnected()) mLocationClient.removeLocationUpdates(this); mLocationClient.disconnect(); } public interface LocationRunnable { public void locationUpdate(Location location);} 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреАрдердм рдХреЗ рд╕рд╛рде рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЦреБрдж рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд┐рдВрдЧрд▓реЗрдЯреЛрди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ
 locationListener = LocationListenerGPServices.getInstance(this); 

рдлрд┐рд░ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░реЗрдВред
 locationListener.setLocationRunnable(new ILocationListener.LocationRunnable() { @Override public void locationUpdate(final Location location) {}}); 


рджрд░рдЕрд╕рд▓ рдпрд╣реА рд╕рдм рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдкрд╛рда рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдХреЛрдб рджрд┐рдпрд╛, рдЧрд┐рддреБрдм рдкрд░ рд╕реВрддреНрд░реЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕реНрдерд╛рди рдХреИрд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджреВрд░реА рд╕реЗ рдореЗрдЯреНрд░реЛ рд╕реНрдЯреЗрд╢рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкреАрдбрд╝рд╛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In191290/


All Articles