Получение номера телефона

Кажется, что никто еще не предоставил решение, предлагаемое Google Docs ( https://developer.android.com/training/location/display-address#java ). Правильное решение должно использовать IntentService для создания сетевого вызова для обратного геокодирования.

Используется служба намерений, а не AsyncTask, поскольку она не привязана к какой-либо конкретной деятельности. то есть. он имеет собственный жизненный цикл. IntentService остановится при завершении геокодирования.

public class GeocodingService extends IntentService {

    public GeocodingService() {
        super("GeocodingService");
    }


    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        if (intent == null) {
            return;
        }

        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
        String errorMessage = "";
        BCCDatabase BCCDatabase = skicompanion.skicompanion.storage.BCCDatabase.getInstance(getApplicationContext());

        // Get the location passed to this service through an extra.
        Location location = intent.getParcelableExtra(
                "location");
        long trackID = intent.getLongExtra("trackID", -1);

        List
addresses = null; String addressString = ""; try { addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); } catch (IOException ioException) { // Catch network or other I/O problems. errorMessage = "service not available"; Log.d(Constants.SkiCompanionDebug, errorMessage, ioException); } catch (IllegalArgumentException illegalArgumentException) { // Catch invalid latitude or longitude values. errorMessage = "invalid lat long used"; Log.d(Constants.SkiCompanionDebug, errorMessage + ". " + "Latitude = " + location.getLatitude() + ", Longitude = " + location.getLongitude(), illegalArgumentException); } // Handle case where no address was found. if (addresses == null || addresses.size() == 0) { if (errorMessage.isEmpty()) { errorMessage = "no address found"; Log.d(Constants.SkiCompanionDebug, errorMessage); } } else { if(addresses.get(0).getLocality() != null){ addressString += addresses.get(0).getLocality() + ", "; } if(addresses.get(0).getAdminArea() != null){ addressString += addresses.get(0).getAdminArea() + ", "; } if(addresses.get(0).getCountryName() != null){ addressString += addresses.get(0).getCountryName(); } //updating DB BCCDatabase.setTrackLocation(trackID, addressString); Log.d(Constants.SkiCompanionDebug, "address found: "+ addressString); } } }

-11
задан Vadim Kotov 23 August 2017 в 08:07
поделиться