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

Я пытаюсь получить информацию о широте и долготе с телефона 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 ??

Ответы [ 5 ]

1 голос
/ 28 ноября 2011

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

/**
 * 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;
}
0 голосов
/ 19 декабря 2012

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

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

0 голосов
/ 28 ноября 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 (Location location).

0 голосов
/ 28 ноября 2011

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

0 голосов
/ 28 ноября 2011

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

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

Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

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

...