2015-05-26 3 views
-3

Я делаю приложение, в котором я должен показать заставку в течение 1/2 секунды. Пока брызги загружаются, я должен получить информацию о местоположении пользователя. написали код, но всегда я получаю null от местоположения.Не получать местоположение

Код

private Context context; 

    private LocationManager locationManager; 

    Location location; 

    double latitude; 
    double longitude; 

    public GetLocation(Context context) { 
     this.context = context; 
     getLocation(); 
    } 


    private Location getLocation() { 


     locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
     location = locationManager.getLastKnownLocation(getProviderName()); 
     if (location == null) { 

      locationManager.requestLocationUpdates(getProviderName(), 0, 0, this); 
     } 

     return location; 


    } 


    String getProviderName() { 
     locationManager = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 

     Criteria criteria = new Criteria(); 
     criteria.setPowerRequirement(Criteria.POWER_LOW); // Chose your desired power consumption level. 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); // Choose your accuracy requirement. 
     criteria.setSpeedRequired(true); // Chose if speed for first location fix is required. 
     criteria.setAltitudeRequired(false); // Choose if you use altitude. 
     criteria.setBearingRequired(false); // Choose if you use bearing. 
     criteria.setCostAllowed(false); // Choose if this provider can waste money :-) 

     // Provide your criteria and flag enabledOnly that tells 
     // LocationManager only to return active providers. 
     return locationManager.getBestProvider(criteria, true); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 

     Toast.makeText(context,""+location,Toast.LENGTH_LONG).show(); 

    } 

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

     Toast.makeText(context,provider,Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

     Toast.makeText(context,provider,Toast.LENGTH_LONG).show(); 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

     Toast.makeText(context,provider,Toast.LENGTH_LONG).show(); 

    } 

    public void stopUsingGPS() { 
     if (locationManager != null) { 
      locationManager.removeUpdates(this); 
     } 
    } 

    /** 
    * Function to get latitude 
    */ 
    public double getLatitude() { 
     if (location != null) { 
      latitude = location.getLatitude(); 
     } 

     // return latitude 
     return latitude; 
    } 

    /** 
    * Function to get longitude 
    */ 
    public double getLongitude() { 
     if (location != null) { 
      longitude = location.getLongitude(); 
     } 

     // return longitude 
     return longitude; 
    } 

Права доступа

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

Использование

private void getLocation() { 

     getLocation = new GetLocation(contextActivity); 

     latitude = getLocation.getLatitude(); 
     longitude = getLocation.getLongitude(); 

     if (latitude != 0 && longitude != 0) { 

      getLocation.stopUsingGPS(); 
     } 
    } 

Пожалуйста, помогите мне. Спасибо.

+0

отправить полный код, а также проверить объект инициализировать или нет –

+0

Я обновил сообщение –

ответ

1

getLastKnownLocation возвращает null, если местоположение еще не получено. Если это случай для вашего устройства, следующий фрагмент кода

if (location == null) { 
    locationManager.requestLocationUpdates(getProviderName(), 0, 0, this); 
} 

предотвращает вас от регистрации LocationListener, обратного вызова для менеджера местонахождения.

+0

Как это сделать, сэр, пожалуйста, вы можете объяснить –

+0

Сэр, пожалуйста, вы можете мне помочь? –

+0

удалите 'if'' и используйте широковещательное событие, когда onLocationChanged называется – Blackbelt

0

Я думаю, вы не обновляете местоположение в onLocationChanged. Получаете ли вы местоположение не нулевого объекта в тексте тоста?

Мой ответ будет обновлять переменную члена местоположения с местом, полученным с событием onLocationChange.

+0

Нет, я тоже не получаю тост –

+0

Хмм ... Попробуйте с помощью API с плавленым местоположением, чтобы получить место. API с плавным местоположением быстро сравнивается с менеджером местоположений и обеспечивает более точные местоположения. Найти больше информации здесь: https://developer.android.com/training/location/receive-location-updates.html – Kailas

Смежные вопросы