Как вы делаете Android LocationManager Use Network Network и не WiFi Network?

StackOverflow https://stackoverflow.com/questions/3970046

Вопрос

У меня есть приложение для Android, используя locationmanager, получите местоположение сотовой сети, а не местоположение WiFi? Если я выключил антенну WiFi и сделайте следующее:

LocationManager lm = (LocationManager) paramContext.getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

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

Это работает на HTC EVO работает Froyo.

Спасибо!

Это было полезно?

Решение

Я не верю, что вы можете.

Поставщик сетевых местоположений Посмотрите на состояние Wi-Fi и состоянию Cell, отбросьте один, если он слишком старый, или отправьте их как на сервер Google Location (GLS) через Server MASF. Что сделано, есть магия. Но вы можете посмотреть на реализацию NetworkProvider и посмотреть, как настроить ваш код. Коды здесь: NetworkLocationProvider..

Если вы просто хотите идентификатор ячейки, проверить менеджер телефонии. Добавить PhonestateListener там.

Другие советы

Проверьте этот раздел в Руководстве по Android Dev: Запрашивая обновления местоположения. Отказ В принципе, вам необходимо зарегистрировать слушатель, чтобы получить обновления местоположения, а затем вы говорите Android, который вы хотите получить эти обновления с поставщиком местоположения сети.

// 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);

Затем вы должны быть в состоянии получить последнее известное местоположение с GetLastknownLocation () и / или использовать onlocationChanged () в locationListener.

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

 public boolean haveNetworkConnection()
{
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo)
    {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top