Как я могу проверить, включен ли GPS, прежде чем пытаться его использовать?

У меня есть следующий код, и это не хорошо, потому что иногда GPS занимает очень много времени

Как я могу сделать следующее:

  • Проверьте, включен ли GPS.
  • Используйте GPS, если он включен, в противном случае используйте поставщика сети.
  • Если GPS занимает более 30 секунд, используйте сеть.

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

// 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.
                    locationCallback(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.GPS_PROVIDER, 0, 0, locationListener);

Ответ 1

Нет стандартного способа, вы должны сделать это самостоятельно, используя:

    if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
        //Do what you need if enabled...
    }else{
        //Do what you need if not enabled...
    }

И это разрешение в манифесте:

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

Как рекомендация, если GPS не включен, обычно стандарт указывает на всплывающее окно "Настройки местоположения", поэтому пользователь может его специально включить...

Надеюсь, что это поможет.

Привет!

Ответ 2

Просто используя это, вы можете проверить GPS доступность

    LocationManager mlocManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);;
    boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

Ответ 3

Думаю, вы могли бы использовать код в своем ответе на: Служба местоположения GPS Force закрыта

Он дает вам метод обратного вызова для GPS-исправления и изменения местоположения, которые могут быть очень удобными. Это также упрощает изменение реализации GPSTracker для переключения в сеть, если GPS занимает слишком много времени, чтобы получить первое исправление.