Як перевірити, чи ввімкнено Служби локації?


228

Я розробляю додаток для ОС Android. Я не знаю, як перевірити, чи ввімкнено Служби локації чи ні.

Мені потрібен метод, який повертає "true", якщо вони включені, а "false" якщо ні (тому в останньому випадку я можу показати діалогове вікно для їх включення).


3
Я знаю, що це стара тема, але для тих, хто може слідувати ... Google випустив API для цього; дивіться developers.google.com/android/reference/com/google/android/gms/…
Пітер МакЛеннан


FYI: НалаштуванняApi зараз застарілі. Використовуйте замість developers.google.com/android/reference/com/google/android/gms/… .
Раджив

Відповіді:


361

Ви можете скористатися наведеним нижче кодом, щоб перевірити, чи включені постачальник gps та мережеві провайдери.

LocationManager lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
boolean gps_enabled = false;
boolean network_enabled = false;

try {
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
} catch(Exception ex) {}

try {
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex) {}

if(!gps_enabled && !network_enabled) {
    // notify user
    new AlertDialog.Builder(context)
        .setMessage(R.string.gps_network_not_enabled)
        .setPositiveButton(R.string.open_location_settings, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        }
        .setNegativeButton(R.string.Cancel,null)
        .show();    
}

А у файл маніфесту вам потрібно буде додати наступні дозволи

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

Дякую за код. Перевірка менеджера місцеположення: lm.getAllProviders().contains(LocationManager.GPS_PROVIDER)(або NETWORK_PROVIDER) переконайтеся, що ви не перекинете користувача на сторінку налаштувань, де немає жодної опції мережі.
петтер

26
Також: Settings.ACTION_SECURITY_SETTINGSмає бутиSettings.ACTION_LOCATION_SOURCE_SETTINGS
петтер

2
ви можете перевірити, якщо телефон знаходиться в режимі польоту і обробити його .... stackoverflow.com/questions/4319212 / ...
John

2
У мене виникли проблеми з lm.isProviderEnabled (LocationManager.GPS_PROVIDER), який завжди повертав помилки. Це, мабуть, трапляється, коли ви використовуєте нову версію Play Services: ту, що показує діалогове вікно, де ви можете увімкнути gps прямо з діалогового вікна, не показуючи активність налаштувань. Коли користувач повертає gps з цього діалогового вікна, це твердження повертається завжди помилково, навіть коли gps увімкнено
Marcelo Noguti

7
також не слід ставити порожні, заплутані, марні блоки
пробного

225

Я використовую цей код для перевірки:

public static boolean isLocationEnabled(Context context) {
    int locationMode = 0;
    String locationProviders;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

        } catch (SettingNotFoundException e) {
            e.printStackTrace();
            return false;
        }

        return locationMode != Settings.Secure.LOCATION_MODE_OFF;

    }else{
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        return !TextUtils.isEmpty(locationProviders);
    }


} 

7
Для наочності, можливо, потрібно повернути помилковий блок блоку. Ще ініціалізуйте locationMode до Settings.Secure.LOCATION_MODE_OFF.
RyanLeonard

2
Це хороша відповідь, оскільки він працює як зі старими, так і новими API розташування Android.
Дідерік

2
LOCATION_PROVIDERS_ALLOWED - посилання Ця константа застаріла на рівні API 19. Ми повинні використовувати LOCATION_MODE та MODE_CHANGED_ACTION (або PROVIDERS_CHANGED_ACTION)
Choletski

3
Ця відповідь повинна була бути прийнята як правильна відповідь. Метод locationManager.isProviderEnabled () не є надійним на моєму пристрої 4.4 (і, як я бачив, інші розробники мали таку ж проблему і в інших версіях ОС). У моєму випадку він повертає істину для GPS у кожному випадку (не має значення, включені чи ні послуги служби локації). Дякую за це чудове рішення!
strongmayer

2
Це не спрацювало на моєму тестовому пристрої, Samsung SHV-E160K, android 4.1.2, API 16. Хоча я і роблю GPS в автономному режимі, ця функція все одно повертається у вірно. Я протестував на Android Nougat, API 7.1, він працює
HendraWD

38

Як і зараз у 2020 році

Останній, найкращий і найкоротший шлях

public static Boolean isLocationEnabled(Context context)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
            LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            return lm.isLocationEnabled();
        } else {
// This is Deprecated in API 28
            int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                    Settings.Secure.LOCATION_MODE_OFF);
            return  (mode != Settings.Secure.LOCATION_MODE_OFF);

        }
    }

1
Відмінно! Але ще краще, позбудьтесь кастингу та перейдіть безпосередньо LocationManager.classдо getSystemServiceметоду, оскільки для виклику потрібен API 23 ;-)
Mackovich

6
Або ви можете використовувати LocationManagerCompat замість цього. :)
Моккун

Використовуйте return lm! = Null && lm.isLocationEnabled (); замість повернення lm.isLocationEnabled ();
д-р DS

35

Ви можете використовувати цей код, щоб направити користувачів у Налаштування, де вони можуть увімкнути GPS:

    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if( !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
        new AlertDialog.Builder(context)
            .setTitle(R.string.gps_not_found_title)  // GPS not found
            .setMessage(R.string.gps_not_found_message) // Want to enable?
            .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i) {
                    owner.startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                }
            })
            .setNegativeButton(R.string.no, null)
            .show();
    }

1
Велике спасибі, але мені не потрібен код для перевірки GPS, а лише служби локації.
Meroelyth

1
Служби локації завжди доступні, але різні постачальники можуть бути недоступними.
lenik

4
@lenik, деякі пристрої надають налаштування (у розділі "Налаштування> Особисті> Послуги локації> Доступ до мого місцезнаходження"), яке, здається, взагалі дозволяє / вимикає виявлення місцезнаходження, навіть якщо включені конкретні провайдери. Я побачив це з перших рук із телефоном, з яким я тестував, і, незважаючи на те, що і Wi-Fi, і GPS, вони виявилися мертвими ... для мого додатка. На жаль, я з тих пір ввімкнув налаштування і більше не можу відтворити початковий сценарій, навіть якщо вимкнути це налаштування "Доступ до мого місцезнаходження". Тому я не можу сказати, чи впливає цей параметр на методи isProviderEnabled()та getProviders(true)методи.
Театр ведмедика

... Я просто хотів це викинути на випадок, якщо хтось інший натрапив на ту саму проблему. Я ніколи раніше не бачив налаштування на інших пристроях, з якими я тестував. Це здається, що це загальносистемний комутатор виявлення локації для виявлення локації. Якщо у когось є досвід щодо того, як реагують isProviderEnabled()та getProviders(true)методи, коли такий параметр увімкнено (або вимкнено, залежно від того, як ви його дивитесь), мені буде дуже цікаво дізнатися, з чим ви стикалися.
Ведмедик Тені

25

Перехід на Android X та використання

implementation 'androidx.appcompat:appcompat:1.1.0'

і використовувати LocationManagerCompat

В яві

private boolean isLocationEnabled(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    return LocationManagerCompat.isLocationEnabled(locationManager);
}

У Котліні

private fun isLocationEnabled(context: Context): Boolean {
    val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return LocationManagerCompat.isLocationEnabled(locationManager)
}

Це працює для всіх версій Android, починаючи з Android 1.0. Але зауважте. Before API version LOLLIPOP [API Level 21], this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.Отже, якщо у вас немає дозволу для мережі або постачальника gps, це може призвести до виключення, залежно від того, який режим увімкнено. Перевірте вихідний код для отримання додаткової інформації.
xuiqzy

15

Опрацьовуючи відповідь вище, в API 23 потрібно додати "небезпечні" перевірки дозволів, а також перевірити саму систему:

public static boolean isLocationServicesAvailable(Context context) {
    int locationMode = 0;
    String locationProviders;
    boolean isAvailable = false;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        try {
            locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
        } catch (Settings.SettingNotFoundException e) {
            e.printStackTrace();
        }

        isAvailable = (locationMode != Settings.Secure.LOCATION_MODE_OFF);
    } else {
        locationProviders = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        isAvailable = !TextUtils.isEmpty(locationProviders);
    }

    boolean coarsePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED);
    boolean finePermissionCheck = (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED);

    return isAvailable && (coarsePermissionCheck || finePermissionCheck);
}

Неможливо вирішити символ Manifest.permission.ACCESS_COARSE_LOCATION та Manifest.permission.ACCESS_FINE_LOCATION
Геннадій Козлов

Використовуйте android.Manifest.permission.ACCESS_FINE_LOCATION
aLIEz

7

Якщо жоден провайдер не ввімкнено, "пасивний" - найкращий повернутий постачальник. Дивіться https://stackoverflow.com/a/4519414/621690

    public boolean isLocationServiceEnabled() {
        LocationManager lm = (LocationManager)
                this.getSystemService(Context.LOCATION_SERVICE);
        String provider = lm.getBestProvider(new Criteria(), true);
        return (StringUtils.isNotBlank(provider) &&
                !LocationManager.PASSIVE_PROVIDER.equals(provider));
    }

7

Так, ви можете перевірити нижче код:

public boolean isGPSEnabled(Context mContext) 
{
    LocationManager lm = (LocationManager)
    mContext.getSystemService(Context.LOCATION_SERVICE);
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

з дозволу у файлі маніфесту:

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

6

Це, якщо в пункті легко перевіряється, чи доступні послуги локації, на мою думку:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
        //All location services are disabled

}

4

Я використовую такий спосіб для NETWORK_PROVIDER, але ви можете додати і для GPS .

LocationManager locationManager;

У onCreate я поклав

   isLocationEnabled();
   if(!isLocationEnabled()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle(R.string.network_not_enabled)
                .setMessage(R.string.open_location_settings)
                .setPositiveButton(R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                            }
                        })
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                dialog.cancel();
                            }
                        });
        AlertDialog alert = builder.create();
        alert.show();
    } 

І спосіб перевірки

protected boolean isLocationEnabled(){
    String le = Context.LOCATION_SERVICE;
    locationManager = (LocationManager) getSystemService(le);
    if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        return false;
    } else {
        return true;
    }
}

2
Вам не потрібно якщо тоді, то можете просто повернутисяlocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
LadyWoodi

4

Це дуже корисний метод, який повертається, trueякщо " " Location servicesувімкнено:

public static boolean locationServicesEnabled(Context context) {
        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean gps_enabled = false;
        boolean net_enabled = false;

        try {
            gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception gps_enabled");
        }

        try {
            net_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        } catch (Exception ex) {
            Log.e(TAG,"Exception network_enabled");
        }
        return gps_enabled || net_enabled;
}

3

Щоб отримати поточне географічне розташування на картах Android на Google, слід увімкнути опцію розташування вашого пристрою. Щоб перевірити, чи ввімкнено місцезнаходження, ви можете просто зателефонувати цьому методу зі свого onCreate()методу.

private void checkGPSStatus() {
    LocationManager locationManager = null;
    boolean gps_enabled = false;
    boolean network_enabled = false;
    if ( locationManager == null ) {
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    }
    try {
        gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch (Exception ex){}
    try {
        network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch (Exception ex){}
    if ( !gps_enabled && !network_enabled ){
        AlertDialog.Builder dialog = new AlertDialog.Builder(MyActivity.this);
        dialog.setMessage("GPS not enabled");
        dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                //this will navigate user to the device location settings screen
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(intent);
            }
        });
        AlertDialog alert = dialog.create();
        alert.show();
    }
}

3

Для котлін

 private fun isLocationEnabled(mContext: Context): Boolean {
    val lm = mContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return lm.isProviderEnabled(LocationManager.GPS_PROVIDER) || lm.isProviderEnabled(
            LocationManager.NETWORK_PROVIDER)
 }

діалог

private fun showLocationIsDisabledAlert() {
    alert("We can't show your position because you generally disabled the location service for your device.") {
        yesButton {
        }
        neutralPressed("Settings") {
            startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
        }
    }.show()
}

дзвоніть так

 if (!isLocationEnabled(this.context)) {
        showLocationIsDisabledAlert()
 }

Підказка: у діалоговому вікні потрібен наступний імпорт (андроїд-студія повинна це вирішити для вас)

import org.jetbrains.anko.alert
import org.jetbrains.anko.noButton

І в маніфесті вам потрібні такі дозволи

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

2

Ви можете вимагати оновлень місцеположення та показувати діалогове вікно разом, як і GoogleMaps Doas. Ось код:

googleApiClient = new GoogleApiClient.Builder(getActivity())
                .addApi(LocationServices.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();
googleApiClient.connect();

LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(30 * 1000);
locationRequest.setFastestInterval(5 * 1000);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                    .addLocationRequest(locationRequest);

builder.setAlwaysShow(true); //this is the key ingredient

PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
    @Override
    public void onResult(LocationSettingsResult result) {
        final Status status = result.getStatus();
        final LocationSettingsStates state = result.getLocationSettingsStates();
        switch (status.getStatusCode()) {
            case LocationSettingsStatusCodes.SUCCESS:
                // All location settings are satisfied. The client can initialize location
                // requests here.
                break;
            case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                // Location settings are not satisfied. But could be fixed by showing the user
                // a dialog.
                try {
                    // Show the dialog by calling startResolutionForResult(),
                    // and check the result in onActivityResult().
                    status.startResolutionForResult(getActivity(), 1000);
                } catch (IntentSender.SendIntentException ignored) {}
                break;
            case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                // Location settings are not satisfied. However, we have no way to fix the
                // settings so we won't show the dialog.
                break;
            }
        }
    });
}

Якщо вам потрібна додаткова інформація, перевірте клас LocationRequest .


Здрастуйте, я останні два дні намагаюся отримати поточне місцезнаходження користувача. Мені потрібен поточний останній користувач, я знаю, що це можна зробити за допомогою клієнта goigle api. Але як інтегрувати в нього дозвіл зефіру. Плюс, якщо послуги локації користувача увімкнено, як це ввімкнути. Ви можете допомогти?
Четне

Привіт! у вас багато запитань, на що я не можу відповісти в коментарях. Будь ласка, задайте нове запитання, щоб я міг відповісти на нього офіційно!
bendaf

Я розмістив тут своє запитання: stackoverflow.com/questions/39327480/…
Четне,

2

Я використовую перший код, почати створювати метод isLocationEnabled

 private LocationManager locationManager ;

protected boolean isLocationEnabled(){
        String le = Context.LOCATION_SERVICE;
        locationManager = (LocationManager) getSystemService(le);
        if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
            return false;
        } else {
            return true;
        }
    }

і я перевіряю Стан, якщо тире Відкрити карту та помилково дати наміру ACTION_LOCATION_SOURCE_SETTINGS

    if (isLocationEnabled()) {
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        locationClient = getFusedLocationProviderClient(this);
        locationClient.getLastLocation()
                .addOnSuccessListener(new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // GPS location can be null if GPS is switched off
                        if (location != null) {
                            onLocationChanged(location);

                            Log.e("location", String.valueOf(location.getLongitude()));
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.e("MapDemoActivity", e.toString());
                        e.printStackTrace();
                    }
                });


        startLocationUpdates();

    }
    else {
        new AlertDialog.Builder(this)
                .setTitle("Please activate location")
                .setMessage("Click ok to goto settings else exit.")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        startActivity(intent);
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        System.exit(0);
                    }
                })
                .show();
    }

введіть тут опис зображення


1

Можна зробити найпростішим способом

private boolean isLocationEnabled(Context context){
int mode =Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
                        Settings.Secure.LOCATION_MODE_OFF);
                final boolean enabled = (mode != android.provider.Settings.Secure.LOCATION_MODE_OFF);
return enabled;
}

1

Якщо ви користуєтесь AndroidX, використовуйте наведений нижче код, щоб перевірити, чи служба локації включена чи ні:

fun isNetworkServiceEnabled(context: Context) = LocationManagerCompat.isLocationEnabled(context.getSystemService(LocationManager::class.java))

0

Для перевірки постачальника послуг мережі потрібно просто змінити рядок, переданий на isProviderEnabled на LocationManager.NETWORK_PROVIDER, якщо ви перевіряєте значення повернення як для провайдера GPS, так і для мережевого постачальника - обидва помилкові означає відсутність послуг локації


0
private boolean isGpsEnabled()
{
    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    return service.isProviderEnabled(LocationManager.GPS_PROVIDER)&&service.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

0
    LocationManager lm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
    boolean gps_enabled = false;
    boolean network_enabled = false;

    try {
        gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    try {
        network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    } catch(Exception e){
         e.printStackTrace();
    }

    if(!gps_enabled && !network_enabled) {
        // notify user
        new AlertDialog.Builder(this)
                .setMessage("Please turn on Location to continue")
                .setPositiveButton("Open Location Settings", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                    }

                }).
                setNegativeButton("Cancel",null)
                .show();
    }

0
public class LocationUtil {
private static final String TAG = LocationUtil.class.getSimpleName();

public static LocationManager getLocationManager(final Context context) {
    return (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}

public static boolean isNetworkProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}

public static boolean isGpsProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.GPS_PROVIDER);
}

// Returns true even if the location services are disabled. Do not use this method to detect location services are enabled.
private static boolean isPassiveProviderEnabled(final Context context) {
    return getLocationManager(context).isProviderEnabled(LocationManager.PASSIVE_PROVIDER);
}

public static boolean isLocationModeOn(final Context context) throws Exception {
    int locationMode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);
    return locationMode != Settings.Secure.LOCATION_MODE_OFF;
}

public static boolean isLocationEnabled(final Context context) {
    try {
        return isNetworkProviderEnabled(context) || isGpsProviderEnabled(context)  || isLocationModeOn(context);
    } catch (Exception e) {
        Log.e(TAG, "[isLocationEnabled] error:", e);
    }
    return false;
}

public static void gotoLocationSettings(final Activity activity, final int requestCode) {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    activity.startActivityForResult(intent, requestCode);
}

public static String getEnabledProvidersLogMessage(final Context context){
    try{
        return "[getEnabledProvidersLogMessage] isNetworkProviderEnabled:"+isNetworkProviderEnabled(context) +
                ", isGpsProviderEnabled:" + isGpsProviderEnabled(context) +
                ", isLocationModeOn:" + isLocationModeOn(context) +
                ", isPassiveProviderEnabled(ignored):" + isPassiveProviderEnabled(context);
    }catch (Exception e){
        Log.e(TAG, "[getEnabledProvidersLogMessage] error:", e);
        return "provider error";
    }
}

}

Використовуйте метод isLocationEnabled для виявлення послуг локації.

https://github.com/Polidea/RxAndroidBle/isissue/327# сторінка дасть більше інформації, чому б не скористатися пасивним провайдером, замість цього використовувати режим розташування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.