2010-05-27 3 views
13

У меня быть_наст этот код, чтобы получить лучшие предоставляющие услугиандроид прибудет расположение от лучшего поставщика доступны

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

, а затем слушатель

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

Когда я тестировал его на устройство (HTC Magic) I выяснилось, что при отключении gps он немедленно блокируется из сети. Когда я включаю gps, он не принимает никаких данных из сети и ждет, пока он не закроется из gps.
Я хотел бы заблокировать позицию, такую ​​как карты google, пока они не получат хороший сигнал gps, который они используют в сети, чтобы определить мое местоположение.
Я, хотя лучшие критерии будут делать это, но то, что они делают, выбирает поставщика один раз.
Что-то не так с моим кодом, или я должен делать потоки и таймауты и т. Д., Чтобы это произошло?

+0

spagi код мне очень помог - нигде на андроид сайте Dev это объяснило, как получить наилучший поставщик. Некоторые устройства могут иметь gps, некоторые gsm, некоторые Wi-Fi. –

+0

Вот очень интересная статья в Google: http://developer.android.com/training/basics/location/currentlocation.html – shkschneider

ответ

14

Возможно, вы можете попробовать прослушивать как провайдера сети, так и поставщика GPS в течение определенного времени, а затем проверить результаты двух. Если у вас нет результатов из gps, используйте результаты сети. Вот как я это сделал.

+0

Итак, я делаю 2 приемника местоположения, один для Gps и один для сети, и инициализирую их как с requestLocationUpdates. Я могу их послушать, как с помощью on onLocationChanged? – spagi

+0

Да, вы должны выслушать их обоих. Вы даже можете использовать lastKnownLocation, прежде чем обновление поступит от любого поставщика. – Fedor

+1

Вы можете добавить переменную Location в свой MyLocationListener и установить ее значение в onLocationChanged(). В своей основной деятельности создайте два экземпляра MylocationListener, один для gps и один для сетевого провайдера. Слушайте и то и другое с определенного промежутка времени (вы можете реализовать это, создав поток таймера), и когда время затянется, прекратите прослушивание и сначала проверьте переменную местоположения в gpslistener, если она есть, а еще, проверьте networklistener. – capecrawler

3

Возможно, вы можете использовать getBestProvider (Criteria criteria, boolean enabledOnly) из LocationManager с такими же критериями, как в this other thread. См. official documentation.

Надеется, что это помогает

Смежные вопросы