2013-07-20 5 views
1

Я использую телефон samsung для получения местоположения через API LocationManager, я не могу получить местоположение, если GPS отключен, через поставщика сети я не могу получить местоположение.Местоположение не попадает на телефон samsung, если GPS отключен

Вот код, это хорошо работает в HTC & Sony даже отключает GPS, но не в телефоне Samsung.

public Location getLocation() { 
     try { 
      mLocationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); 

      // getting GPS status 
      isGPSEnabled = mLocationManager 
        .isProviderEnabled(LocationManager.GPS_PROVIDER); 

      // getting network status 
      isNetworkEnabled = mLocationManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER); //fails in samsung phone returns NULL 

      if (isGPSEnabled == false && isNetworkEnabled == false) { 
       // no network provider is enabled 
      } else { 
       this.canGetLocation = true; 
       if (isNetworkEnabled) { 
        mLocationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        if (mLocationManager != null) { 
         mLocation = mLocationManager 
           .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        } 
       } 
       // if GPS Enabled get lat/long using GPS Services 
       if (isGPSEnabled) { 
        if (mLocation == null) { 
         mLocationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         if (mLocationManager != null) { 
          mLocation = mLocationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return mLocation; 
    } 
+0

Ваш сетевой провайдер включен? – Rajeev

+0

привет, да его включен – Naruto

ответ

1

Это поведение уникально для телефонов Samsung. HTC вы не столкнетесь с этой проблемой.

Вы должны запустить start locationManager, поскольку по умолчанию он просматривает кеш-карты google и не заботится о том, насколько устаревший этот кеш предназначен для текущей информации о местоположении. Сделайте это, запустите свое приложение, создайте другое местоположение gps и обратите внимание, что оно все еще показывает старое местоположение. Теперь запустите Google Maps и перезапустите приложение, ваше местоположение изменилось бы. Для программного запуска вашего приложения для «текущего местоположения» запустите следующий код до того, как вы позвоните getLastKnownLocation

YOUR_APPLICATION_CONTEXT.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
    @Override 
    public void onProviderEnabled(String provider) { 
    } 
    @Override 
    public void onProviderDisabled(String provider) { 
    } 
    @Override 
    public void onLocationChanged(final Location location) { 
    } 
}); 
Смежные вопросы