Android: получить текущее местоположение пользователя без использования gps или интернета


можно ли получить текущее местоположение пользователя без использования gps или internet? Я имею в виду с помощью оператора мобильной сети. Кто-нибудь может мне помочь?

7 86

7 ответов:

что вы хотите сделать, это получить позицию с помощью LocationManager.NETWORK_PROVIDER вместо LocationManager.GPS_PROVIDER. Элемент NETWORK_PROVIDER разрешит на GSM или wifi, которые всегда доступны. Очевидно, что при выключенном wifi будет использоваться GSM. Имейте в виду, что использование сотовой сети является точным в основном 500 м.

http://developer.android.com/guide/topics/location/obtaining-user-location.html имеет некоторые действительно большую информацию и пример кода.

после того, как вы закончите с большинством код в OnCreate() добавить это:

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

вы также можете иметь свою деятельность реализовать LocationListener класса и таким образом реализовать onLocationChanged() в вашей деятельности.

на получение getLastKnownLocation вы на самом деле не начать исправлять себя.

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

согласно документам getLastKnownLocation:

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

вот небольшой фрагмент:

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;

public class UtilLocation {
    public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
        LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        Location utilLocation = null;
        List<String> providers = manager.getProviders(enabledProvidersOnly);
        for(String provider : providers){

            utilLocation = manager.getLastKnownLocation(provider);
            if(utilLocation != null) return utilLocation;
        }
        return null;
    }
}

вы также должны добавить новое разрешение AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

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

1 . Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"

2.Нажмите ЗДЕСЬ Для Справки

boolean gps_enabled = false;
boolean network_enabled = false;

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

gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Location net_loc = null, gps_loc = null, finalLoc = null;

if (gps_enabled)
    gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
    net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

if (gps_loc != null && net_loc != null) {

    //smaller the number more accurate result will
    if (gps_loc.getAccuracy() > net_loc.getAccuracy()) 
        finalLoc = net_loc;
    else
        finalLoc = gps_loc;

        // I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)

} else {

    if (gps_loc != null) {
        finalLoc = gps_loc;
    } else if (net_loc != null) {
        finalLoc = net_loc;
    }
}

нет, в настоящее время вы не можете получить местоположение без использования GPS или интернета.

методы определения местоположения на основе WiFi, сотовой связи или Bluetooth работают с помощью большой базы данных, которая постоянно обновляется. Устройство сканирует идентификаторы передатчика, а затем отправляет их в запросе через интернет для таких сервисов, как Google, Apple или Skyhook. Эта служба отвечает местоположением на основе предыдущих беспроводных опросов из известных местоположений. Без интернета открыть, вы должны иметь локальную копию такой базы данных и сохранить этот документ. Для глобального использования, это очень непрактично.

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

короче говоря, с помощью LocationManager.NETWORK_PROVIDER или android.аппаратура.местоположение.сеть для получения местоположения требует использования интернета.

использование последней известной позиции требует, чтобы у вас был GPS или доступ в интернет совсем недавно. Если у вас только что был интернет, предположительно, вы можете настроить свою позицию или настройки, чтобы снова получить интернет. Если на вашем устройстве не было GPS или доступа в интернет, функция последнего известного положения не поможет вам.

без GPS или интернета, вы могли бы:

  1. сфотографируйте ночное небо и использовать текущее время, чтобы оценить ваше местоположение на основе звездной карты. Это, вероятно, потребует дополнительного оборудования, чтобы убедиться, что углы для ваших фотографий правильно измерены.
  2. используйте акселерометр для отслеживания местоположения, начиная с известного положения. Накопление ошибок в таком подходе делает его непрактичным для большинства ситуаций.

вы посмотрите Google Maps Geolocation Api? Google Map Geolocation

Это простой RestApi, вам просто нужно отправить запрос, служба вернет местоположение с точностью в метрах

с наилучшими пожеланиями

похоже, что можно отслеживать смартфон без использования GPS.

FWIW.

источники:

основные: "PinMe: отслеживание пользователя смартфона по всему миру"

общее: "как отслеживать мобильный телефон без GPS - или согласия"

Я еще не нашел ссылку на окончательный код команды. Когда я это сделаю, я опубликую, если другой этого не сделал.

будет увидимся.