обновление местоположения через 3g


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

В настоящее время я использую GPS, но я также хочу использовать провайдера сети (Wi-Fi и вышки сотовой связи).

Но мой вопрос в том, как android получает информацию о местоположении через Wi-Fi? Если местоположение можно получить из Wi-Fi, то можно ли его получить из самого мобильного интернета?

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

Я последовал за ними и получил это сомнение http://developer.android.com/guide/topics/location/strategies.html может ли приложение android извлекать информацию о местоположении из подключенной точки доступа Wi-Fi AP?

1 3

1 ответ:

Для получения местоположения из NETWORK_PROVIDER можно использовать следующее:

LocationListener locationListenerNetwork = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerGps);
    }
    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

LocationManager lm;
if(lm==null)
  lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

Это, однако, основной пример, поэтому, чтобы различать wi-fi и 3g-сеть, сначала взгляните здесь и прежде, чем код выше:

Один из определенных способов получить то, что вы хотите, заключается в следующем:
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

State mobile = conMan.getNetworkInfo(0).getState();
State wifi = conMan.getNetworkInfo(1).getState();

После этого вы различаете их по:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) {
    //mobile
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
    //wifi
}

Проверьте, подключен ли мобильный или wifi, Если wifi - то используйте PASSIVE_PROVIDER, если мобильный-используйте NETWORK_PROVIDER.

Я надеюсь, что вся эта информация будет полезна для вас.