Различные вопросы о функциональности GPS Android - PullRequest
0 голосов
/ 11 мая 2010

У меня есть несколько вопросов (пока) с LocationManager для Android и GPS в целом. Не стесняйтесь отвечать на любое количество вопросов ниже, и я заранее благодарен за вашу помощь! (Я заметил, что этот материал не очень хорошо задокументирован, так что, надеюсь, эти вопросы помогут и другим!)

1) Я использую следующий код, но я думаю, что здесь может быть дополнительный пух, который мне не нужен. Можете ли вы сказать мне, если я могу удалить что-нибудь из этого?

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);       
LocationListener locationListener = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
LocationProvider locationProvider = lm.getProvider("gps");
Location currentLocation = lm.getLastKnownLocation(locationProvider.getName());

2) Есть ли способ удержаться на последнем шаге (доступ к getLastKnownLocation) до тех пор, пока я не уверен, что у меня есть блокировка GPS? Что произойдет, если это вызывается и GPS все еще ищет сигнал?

3) Самое главное, я хочу убедиться, что у меня есть блокировка GPS, прежде чем перейти к следующему методу, так есть ли способ проверить, заблокирован ли GPS и актуально ли getLastKnownLocation?

4) Есть ли способ «отключить» прослушиватель GPS, как только он получит блокировку и getLastKnownLocation обновится? Я не вижу необходимости сохранять это работающим для моего приложения после получения блокировки ..

5) Не могли бы вы подтвердить мое предположение, что «getLastKnownLocation» часто обновляется при перемещении получателя?

6) В моем коде у меня также есть класс с именем " MyLocationListener " (код ниже), который я, честно говоря, просто взял из другого примера ... Нужно ли это на самом деле? Я предполагаю, что это обновляет мой диспетчер местоположений всякий раз, когда местоположение меняется, но не похоже, что в самом классе есть что-то особенное!

private class MyLocationListener implements LocationListener 
    {
        @Override
        public void onLocationChanged(Location loc) {
            if (loc != null) {
                //Toast.makeText(getBaseContext(),   "Location changed : Lat: " + loc.getLatitude() + " Lng: " + loc.getLongitude(), Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String provider, int status, 
            Bundle extras) {
            // TODO Auto-generated method stub
        }

    }     

1 Ответ

4 голосов
/ 11 мая 2010
  1. Строки 4-5, кажется, не приносят вам пользы. Кроме того, LocationManager.GPS_PROVIDER - это "gps", поэтому, пожалуйста, просто используйте LocationManager.GPS_PROVIDER.

Для следующих ответов я предполагаю, что под «GPS-блокировкой» вы подразумеваете «GPS-фикс».

  1. «Есть ли способ задержать последний шаг (доступ к« getLastKnownLocation »до тех пор, пока я не уверен, что у меня есть блокировка GPS?» - конечно, не вызывая метод. «Что произойдет, если это вызывается, а GPS все еще ищет сигнал? "- он возвращает null.

  2. «Самое главное, я хочу убедиться, что у меня есть блокировка GPS, прежде чем я перейду к следующему методу» - это невозможно. "Так есть ли способ проверить, заблокирован ли GPS и не устарела ли getLastKnownLocation?" - если getLastKnownLocation() возвращает null, у вас нет исправления.

  3. Отмените регистрацию вашего LocationListener через removeUpdates().

  4. Да, ваше предположение верно, по крайней мере, для некоторого определения "часто".

  5. Да, вам нужен LocationListener экземпляр, чтобы использовать requestLocationUpdates(). Что еще более важно, когда вам впервые звонят с onLocationChanged(), это означает, что вы получили свое первое исправление. Предположительно, если вы хотите использовать код, то здесь вы должны обработать исправление, а затем удалить LocationListener на # 4 выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...