Как быстро получить широту и долготу или данные GPS, пока мы находимся в помещении на телефоне Android?

Я пытаюсь получить информацию о широте и долготе с телефона Android через GPS, когда я нахожусь на улице или под небом, я могу мгновенно получить значения, но когда я в помещении или в комнате, это занимает больше чем минута, чтобы получить значения. Может ли кто-нибудь помочь мне быстро получить эти значения, когда я использую свое приложение в комнате.

Я использую следующий код для получения значений:

LocationManager locManager;
locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
                                  locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

и

private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {

    EditText myLocationText = (EditText)findViewById(R.id.editText1);
    EditText myLocationText1 = (EditText)findViewById(R.id.editText2);
    String latString = "";
    String LongString = "";

    if (location != null) {
        double lat = location.getLatitude();
        double lng = location.getLongitude();
        latString = "" + lat;
        LongString ="" + lng;



    } else {
        latString = "No location found";
        LongString = "No location found";
           }
     myLocationText.setText(""+ latString);
     myLocationText1.setText(""+ LongString);
}

Есть ли другой способ получить значения GPS, кроме использования LocationManager??


person ksushanth    schedule 28.11.2011    source источник
comment
Я думаю, вы захотите использовать кеш GPS. Перейдите по этой ссылке: forums.groundspeak.com/GC/index.php?showtopic= 215136 . Они сравнивают различные инструменты для этого. Может быть, один из них подойдет для вашей цели?   -  person Kevin Coulombe    schedule 28.11.2011
comment
Если ваше приложение не может принимать сигнал со спутников, то, конечно, GPS не будет работать. Если вы получаете какой-либо сигнал в помещении, то это бонус. Вы не ожидаете, что ваш телевизор будет работать без антенны.   -  person NickT    schedule 28.11.2011
comment
@KevinCoulombe Геокешинг – это вид спорта, вы уверены, что ссылка актуальна?   -  person skynet    schedule 28.11.2011
comment
Ой, не обращайте внимания на мой комментарий! Это инструмент для тайников, как в тайниках для поиска сокровищ...   -  person Kevin Coulombe    schedule 28.11.2011


Ответы (5)


Вы можете получить последнее известное местоположение, и это довольно быстро:

/**
 * Gets the last known location.
 *
 * @param locationManager the location manager
 * @return the last known location
 */
public static Location getLastKnownLocation(LocationManager locationManager)
{
    Location bestResult = null;
    float bestAccuracy = 10000;
    long bestTime = 0;

    List<String> matchingProviders = locationManager.getAllProviders();

    for (String provider: matchingProviders) {
        Log.d("LOCATION", "Provider: " + provider);
        Location location = locationManager.getLastKnownLocation(provider);
        Log.d("LOCATION", "Location found? "+ (location==null?"NO":"YES"));
        if (location != null) {
            float accuracy = location.getAccuracy();
            long time = location.getTime();
            Log.d("LOCATION", "Acc: "+ String.valueOf(accuracy) + " -- Time: " + String.valueOf(time));
            if ((time > minTime && accuracy < bestAccuracy)) {
                bestResult = location;
                bestAccuracy = accuracy;
                bestTime = time;
            }
            else if (time < minTime && 
                    bestAccuracy == Float.MAX_VALUE && time > bestTime){
                bestResult = location;
                bestTime = time;
            }
        }
    }
    Log.d("LOCATION", "BEST FOUND? "+ (bestResult==null?"NO":"YES"));

    return bestResult;
}
person SERPRO    schedule 28.11.2011

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

Этот метод является ключевым:

Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

Дополнительные сведения см. в разделе Получение местоположения пользователя.

person Zebaz    schedule 28.11.2011

Если вы находитесь в помещении, вам лучше использовать LocationManager.NETWORK_PROVIDER, так как внутри вы вряд ли получите сигнал. Вы также можете использовать getLastKnownLocation(), но он может быть несуществующим или устаревшим.

person Raghav Sood    schedule 28.11.2011

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

locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000L,500.0f,
                                  locationListener);
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

By:

locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,1000L,500.0f,
                                      locationListener);

И вы получите местоположение в методе «public void onLocationChanged (местоположение)».

person frayab    schedule 28.11.2011

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

Примечание. Я могу позвонить из подвального помещения, а также могу просматривать..

person Ramesh Sangili    schedule 18.12.2012