onLocationChanged() никогда не запускается requestLocationUpdate() – Android

Я использовал manager.requestLocationUpdates("gps", 1000, 0, new LocationDetector()); для получения обновлений каждую секунду. Но этот метод никогда не запускает метод onLocationChanged(). Я запускал свое приложение много раз, а также пытался подождать до 30 минут для получения обновления, но на мониторе Android не отображается обновление. Я также дважды проверил GPS моего устройства, который включен. Так что подскажите в чем может быть проблема?

Код:

public class LocationDetector implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        Log.d("GPS: ", location.getLatitude()+ ", " +location.getLongitude());
    }

Вывод: введите здесь описание изображения


person Sajal Ali    schedule 08.05.2016    source источник
comment
функция onLocationChanged() вызывается только при изменении вашего местоположения. Вы пытались изменить свое положение, чтобы вызвать это?   -  person Jose Llausas    schedule 08.05.2016
comment
Вы можете использовать genymotion.com, чтобы задать фиктивные местоположения, чтобы вам не приходилось физически перемещаться, чтобы проверить onLocationChanged() функция   -  person Jose Llausas    schedule 08.05.2016
comment
Я установил minimum distance = 0 внутри requestLocationUpdates(), что означает, что обновление будет сгенерировано через 1 секунду, даже если изменение местоположения составляет 0 метров. @Чепе77   -  person Sajal Ali    schedule 08.05.2016
comment
У вас есть правильные разрешения? Проверьте этот ответ, проблема кажется похожей: вопросы/8447861/   -  person Jose Llausas    schedule 08.05.2016
comment
Где код, когда вы на самом деле запрашиваете местоположение?   -  person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 08.05.2016
comment
manager.requestLocationUpdates("gps", 1000, 0, new LocationDetector()); @СмитПател   -  person Sajal Ali    schedule 08.05.2016
comment
я внес изменения в свой ответ. попробуй   -  person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 08.05.2016


Ответы (2)


Это дубликат этот вопрос, также заданный вами . В любом случае вы можете попробовать использовать GoogleAPIClient - вот так:

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(60000); // update every (1) minutes               
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient,locationRequest, yourLocationDetector );

Где googleApiClient создается и подключается с помощью некоторого вспомогательного метода, например:

/**
     * Helper method to connect the Google API Client
     */
    private void connectGoogleAPIClient() {
      googleApiClient = new GoogleApiClient.Builder(context)
                                .addApi(LocationServices.API)
                                .addConnectionCallbacks(this)
                                .addOnConnectionFailedListener(this)
                                .build();
      googleApiClient.connect();
    }

Вам также необходимо убедиться, что вы добавили разрешение:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Ваша проблема может быть связана с обсуждаемой здесь, поэтому, пожалуйста, также посмотрите на выбранный ответ и посмотрите, не поможет ли он и вашему делу.

person ishmaelMakitla    schedule 08.05.2016

Вот как должен выглядеть типичный запрос местоположения:

Примечание. У меня есть Activity в качестве параметра, потому что я вызываю это из действия. Это в моем классе утилит.

public static void getLocation(Activity activity) {
    final LocationListener locationListener = new LocationListener() {
        @Override
        public void onProviderEnabled(String provider) {
            Log.i(TAG, "onProviderEnabled");
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.i(TAG, "onProviderDisabled");
        }

        @Override
        public void onLocationChanged(Location location) {
            Log.i(TAG, "onLocationChanged");
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.i(TAG, "onStatusChanged");
        }
    };

    final LocationManager locationManager = (LocationManager) appContext.getSystemService(Context.LOCATION_SERVICE);
    final Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setCostAllowed(false);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setSpeedRequired(false);

    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            locationManager.requestLocationUpdates(1000, 0, criteria, locationListener, null);
        }
    });
}

РЕДАКТИРОВАТЬ: как сказал @ishmaelMakitla,

убедитесь, что у вас есть следующие разрешения:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
person ᴛʜᴇᴘᴀᴛᴇʟ    schedule 08.05.2016