2013-05-29 4 views
1

У меня мало проблем с получением моего текущего местоположения с помощью NETWORK_PROVIDDER.Android NETWORK_PROVIDER location

Мой код выглядит следующим образом:

LocationManager lMgr = (LocationManager) context 
    .getSystemService(Context.LOCATION_SERVICE); 
boolean isNetworkProviderEnabled = lMgr 
    .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

Location location = lMgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
if (location != null) { 
    // deal somehow with last (very likely outdated location) 
} 

if (isNetworkProviderEnabled) { 
    lMgr.requestLocationUpdates(provider, 0, 0, locationListener); 
} 

Конечно у меня есть MyLocationListener, что имеет дело с изменениями местоположения и ВСЕ НЕОБХОДИМЫЕ РАЗРЕШЕНИЯ добавляются ИСПОВЕДОВАТЬ

и проблема заключается в том, что на некоторых телефонах эта код работает как шарм, но другие, «requestLocationUpdates» ничего не делают. Конечно, на этих проблемных телефонах, когда я открываю приложение Google Maps, сразу появляется мое текущее. Поэтому мой вопрос (я считаю, что люди из Google должны ответить на это): как это делается, когда Google Maps мгновенно находит текущее местоположение, а другие - нет? Является ли мой код неправильным? Конечно, я видел такой код во многих вопросах stackoverflow. Если кто-то хочет знать, такая проблема возникает на некоторых телефонах Samsung Galaxy Nexus S

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

ответ

0

Я недавно столкнулся с той же проблемой, LocationManager неисправен и полностью не реализован на телефонах Samsung. Они также потребляют много энергии. Используйте LocationClient для решения этих проблем. LocationClient использует все доступные средства, чтобы вы могли найти последнее место, поэтому его супер-набор всех ваших поставщиков и датчиков.

Я столкнулся с проблемами с телефонами модели Samsung Y, мне интересно, какие телефоны вы говорите. Чтобы решить эту проблему с телефонами Samsung, я kickstarted с GPS на телефоне с

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
     @Override 
     public void onProviderEnabled(String provider) { 
     } 
     @Override 
     public void onProviderDisabled(String provider) { 
     } 
     @Override 
     public void onLocationChanged(final Location location) { 
     } 
    }); 

И тогда называли LocationManager.getLastKnownLocation или новый locationClient.getLastLocation апи.

  1. Во-первых, просто добавьте вышеуказанные строки поверх своего getLastKnownLocation. Вещи должны волшебным образом начать работу
  2. Миграция в LocationClient, когда у вас больше времени и тестов. Используйте магию выше, чтобы заставить ее работать, если она терпит неудачу.
+0

Нужно ли мне импортировать дополнительные библиотеки, так как я работаю с API 10? – Toochka

+0

Нет, вам не нужно включать какие-либо библиотеки. – Siddharth

+0

Спасибо за указание в нужном направлении – Toochka

0

Иногда устройство не получает никаких обновлений местоположения, а GPS_PROVIDER и NETWORK_PROVIDER возвращают null.

Попробуйте перезагрузить устройство, этот трюк помог мне. Мой код был отлично, но поставщики возвращали нуль.

+0

Перезапуск устройства в конечном итоге решит все проблемы. Но это то, что вы действительно должны делать? Это то, что вы должны рекомендовать миллионам ваших клиентов? Windows может позволить себе, что благодаря репутации Android стабилен. Если вам нужно перезагрузить приложение, это преступник. Исправьте его, не предоставляйте обходные пути, например «перезагрузите устройство». – Siddharth

+0

Я понимаю ... – aditya