Как заставить Android LocationManager использовать сотовую сеть, а не сеть Wi-Fi? - PullRequest
3 голосов
/ 19 октября 2010

У меня есть приложение для Android, использующее LocationManager, чтобы получить местоположение сотовой сети, а не местоположение Wifi?Если я выключил антенну Wi-Fi и сделал следующее:

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

Мне всегда возвращается местоположение Wifi, а не местоположение сотовой сети.Я хочу, чтобы он возвращал местоположение ячейки, так как я переехал из местоположения Wi-Fi.Я пытался использовать LocationListener, но это не помогло.

Это работает на HTC Evo под управлением Froyo.

Спасибо!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

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

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

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

0 голосов
/ 25 ноября 2014

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

 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;
}
0 голосов
/ 19 октября 2010

Ознакомьтесь с этим разделом в Android Dev Guide: Запрос обновлений местоположения .По сути, вам необходимо зарегистрировать прослушиватель для получения обновлений местоположения, а затем вы сообщаете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...