Включение GPS на Android 4.4

#android #gps

#Android #gps

Вопрос:

Я пытаюсь получить долготу и широту GPS. Все работает в случае, если GPS включается при использовании любой другой программы, которая его включает.

Но когда я пытаюсь использовать только свое приложение, GPS не включается.

вот мой код:

  m_locationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);


String provider = m_locationManager.getBestProvider(m_c, false);
Location location = m_locationManager.getLastKnownLocation(provider);
if (location != null)
{
double lng = location.getLongitude();
double lat = location.getLatitude();
gpsLocationLon.setText(""   lng);
gpsLocationLat.setText(""   lat);
}
else
{
gpsLocationLon.setText("No Provider");
gpsLocationLat.setText("No Provider");
}

public void onLocationChanged(Location location) {
        double lng = location.getLongitude();
        double lat = location.getLatitude();
        if(null != gpsLocationLat amp;amp; null != gpsLocationLon)
        {
        gpsLocationLon.setText(""   lng);
        gpsLocationLon.setText(""   lat);
        }

    }
  

что я пропустил?

Ответ №1:

Вам нужно начать прослушивать обновления местоположения, как только вы нашли лучшего поставщика.

 if (locationManager.isProviderEnabled(provider)) {
    locationManager.requestLocationUpdates(provider, 0, 0, this);
    // ^^ This will start listening for location updates 
    // depending on your provider. 
} else {
    Log.d(LOGTAG, provider   " not enabled");
}
  

Помните, что существует два типа провайдеров: gps и network. Так что это зависит от критериев ( m_c ), какой из которых выбран.

Если вы хотите убедиться, что хотите прослушивать GPS, а также обновления сети, удалите переменную Criteria и попробуйте это :

 if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
} else {
    Log.d(LOGTAG, "network provider not enabled");
}

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
} else {
    Log.d(LOGTAG, gps provider not enabled");
}
  

Редактировать 1:

 m_locationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);
if (m_locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
    m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    Location location = m_locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
else {
    Log.d(LOGTAG, "network provider not enabled");
}
if (m_locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    m_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
else {
    Log.d(LOGTAG, "gps provider not enabled");
}
if (location != null)
{
    double lng = location.getLongitude();
    double lat = location.getLatitude();
    gpsLocationLon.setText(""   lng);
    gpsLocationLat.setText(""   lat);
}
else
{
    gpsLocationLon.setText("No Provider");
    gpsLocationLat.setText("No Provider");
}
public void onLocationChanged(Location location) {
    double lng = location.getLongitude();
    double lat = location.getLatitude();
    if(null != gpsLocationLat amp;amp; null != gpsLocationLon)
    {
        gpsLocationLon.setText(""   lng);
        gpsLocationLon.setText(""   lat);
    }
}
  

Комментарии:

1. после того, как я установил прослушиватель для сетевых обновлений и GPS, как мне получить провайдера для определения местоположения? в случае удаления m_c

2. какого провайдера вы хотите использовать? Сеть / GPS / Оба?

3. я хотел бы использовать оба

4. Я уже упоминал, как использовать обоих провайдеров выше. Избавьтесь от переменной criteria, чтобы найти лучшего поставщика. Чтобы получить последнее известное местоположение, вы можете использовать сеть.

5. Вам не нужно использовать getBestProvider(). Проверьте Edit 1 в ответе.