Konum Servislerinin etkin olup olmadığı nasıl kontrol edilir?


229

Android işletim sisteminde bir uygulama geliştiriyorum. Konum Servislerinin etkin olup olmadığını nasıl kontrol edeceğimi bilmiyorum.

Ben etkinleştirildiyse "true" döndüren ve değilse "false" bir yönteme ihtiyacım var (böylece son durumda onları etkinleştirmek için bir iletişim kutusu gösterebilir).


3
Bunun eski bir konu olduğunu biliyorum, ancak takip edebilecekler için ... Google bunun için bir API yayınladı; developers.google.com/android/reference/com/google/android/gms/…
Peter McLennan


Bilginize: SettingsApi artık kullanımdan kaldırıldı. Kullanım developers.google.com/android/reference/com/google/android/gms/... yerine.
Rajiv

Yanıtlar:


362

Gps sağlayıcısının ve ağ sağlayıcılarının etkin olup olmadığını kontrol etmek için aşağıdaki kodu kullanabilirsiniz.

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();    
}

Ve manifest dosyasında aşağıdaki izinleri eklemeniz gerekecek

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

Kod için teşekkürler. Konum yöneticisini kontrol etmek: lm.getAllProviders().contains(LocationManager.GPS_PROVIDER)(veya NETWORK_PROVIDER) kullanıcıyı ağ seçeneği olmayan bir ayarlar sayfasına atmamanızı sağlar.
13'te

26
Ayrıca: Settings.ACTION_SECURITY_SETTINGSolmalıSettings.ACTION_LOCATION_SOURCE_SETTINGS
13:12 petter

2
telefonun uçak modunda olup olmadığını kontrol edip kullanabilirsiniz .... stackoverflow.com/questions/4319212/…
John

2
Her zaman yanlış döndürmek için kullanılan lm.isProviderEnabled (LocationManager.GPS_PROVIDER) ile ilgili bazı sorunlar vardı. Bu, Play Hizmetleri'nin yeni sürümünü kullandığınızda ortaya çıkıyor: ayarlar etkinliğini göstermeden gps'nizi doğrudan iletişim kutusundan açabileceğiniz bir iletişim kutusu gösteren. Kullanıcı bu iletişim kutusundan
gps'yi

7
Ayrıca boş, kafa karıştırıcı, işe yaramaz try-catch blokları koymak gerekir
Chisko

225

Bu kodu kontrol etmek için kullanıyorum:

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
Açıklık için, catch bloğunda false döndürmek isteyebilir. Else locationMode'u Settings.Secure.LOCATION_MODE_OFF olarak başlatın.
RyanLeonard

2
Hem eski hem de yeni Android konum API'leriyle çalıştığı için bu iyi bir yanıttır.
Diederik

2
LOCATION_PROVIDERS_ALLOWED - bağlantı Bu sabit, API 19 düzeyinde kaldırıldı. LOCATION_MODE ve MODE_CHANGED_ACTION (veya PROVIDERS_CHANGED_ACTION)
Choletski

3
Bu cevap doğru cevap olarak kabul edilmiş olmalıdır. locationManager.isProviderEnabled () yöntemi 4.4 cihazımda güvenilir değil (ve diğer geliştiricilerin de diğer işletim sistemi sürümlerinde de aynı sorunu yaşadığını gördüm). Benim durumumda her durumda GPS için true değerini döndürür (konum hizmetlerinin etkin olup olmadığı önemli değildir). Bu harika çözüm için teşekkürler!
strongmayer

2
Bu benim test cihazı, Samsung SHV-E160K, android 4.1.2, API 16 üzerinde çalışmadı. GPS çevrimdışı yapmak rağmen, bu işlev hala gerçek dönüyor. Android Nougat, API 7.1 üzerinde test yaptım
HendraWD

38

2020'de olduğu gibi

En son, en iyi ve en kısa yol

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
Mükemmel! Ama daha da iyisi, döküm kurtulmak ve doğrudan geçmesi LocationManager.classhalinde getSystemServiceçağrı ;-) API 23 gerektirdiğinden yöntemiyle
Mackovich

6
Veya bunun yerine LocationManagerCompat kullanabilirsiniz . :)
Mokkun

Return lm! = Null && lm.isLocationEnabled (); dönüş yerine lm.isLocationEnabled ();
Dr. DS

35

Bu kodu, kullanıcıları GPS'i etkinleştirebilecekleri Ayarlar'a yönlendirmek için kullanabilirsiniz:

    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
Çok teşekkürler, ama GPS kontrol etmek için kod gerekmez ama sadece konum hizmetleri.
Meroelyth

1
konum hizmetleri her zaman kullanılabilir, ancak farklı sağlayıcılar kullanılamayabilir.
lenik

4
@lenik'te bazı cihazlar, belirli sağlayıcılar etkinleştirilmiş olsa bile konum algılamayı tamamen etkinleştiren / devre dışı bırakan bir ayar ("Ayarlar> Kişisel> Konum hizmetleri> Konumuma erişim" altında) sağlar. Test ettiğim bir telefonla bu ilk elden gördüm ve hem Wifi hem de GPS etkinleştirilse bile uygulamam için ölü görünüyordu. Ne yazık ki, o zamandan beri ayarı etkinleştirdim ve artık "Konumuma erişim" ayarını devre dışı bırakırken bile orijinal senaryoyu yeniden oluşturamıyorum. Bu ayarın isProviderEnabled()ve getProviders(true)yöntemleri etkilediğini söyleyemem .
The Awnry Bear

... bir başkasının aynı sorunla karşılaşması durumunda bunu oraya atmak istedim. Ayarı daha önce test ettiğim diğer cihazlarda hiç görmemiştim. Bu, sistem çapında bir konum algılama öldürme anahtarı gibi görünüyor. Böyle bir ayar etkinleştirildiğinde (veya nasıl baktığınıza bağlı olarak devre dışı bırakıldığında) isProviderEnabled()ve getProviders(true)yöntemlerin nasıl yanıt verdiği konusunda herhangi bir deneyimi varsa, karşılaştığınız şeyi merak ediyorum.
Awnry Bear

25

Android X'e taşıyın ve kullanın

implementation 'androidx.appcompat:appcompat:1.1.0'

ve LocationManagerCompat'ı kullanın

Java'da

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

Kotlin bölgesinde

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

Bu, Android 1.0'dan beri tüm Android Sürümleri için çalışır. Ancak not Before API version LOLLIPOP [API Level 21], this method would throw SecurityException if the location permissions were not sufficient to use the specified provider.Ağ veya gps sağlayıcısı için izniniz yoksa, hangisinin etkin olduğuna bağlı olarak bir istisna oluşturabilir. Daha fazla bilgi için kaynak kodunu kontrol edin.
xuiqzy

15

Yukarıdaki cevabı kullanarak, API 23'te "tehlikeli" izin kontrolleri eklemenin yanı sıra sistemin kendisini kontrol etmeniz gerekir:

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 ve Manifest.permission.ACCESS_FINE_LOCATION sembolü çözümlenemiyor
Gennady Kozlov


7

Hiçbir sağlayıcı etkinleştirilmezse, döndürülen en iyi sağlayıcı "pasif" olur. Bkz. 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

Evet aşağıdaki kodu kontrol edebilirsiniz:

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

manifest dosyasındaki izinle:

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

6

Bu fıkra bence konum servislerinin mevcut olup olmadığını kolayca kontrol eder:

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 için böyle bir yol kullanıyorum, ancak GPS için ve ekleyebilirsiniz .

LocationManager locationManager;

In onCreate I put

   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();
    } 

Ve kontrol yöntemi

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

2
Eğer if-then-else ihtiyacınız yok, sadece geri dönebilirsinizlocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
LadyWoodi

4

Bu, etkinleştirilmişse " true" döndüren çok kullanışlı bir yöntemdir 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 haritalarında mevcut Coğrafi konumu almak için cihazınızın konum seçeneğini açmalısınız.Konumun açık olup olmadığını kontrol etmek için yönteminizden bu yöntemi basitçe çağırabilirsiniz 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

Kotlin için

 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)
 }

diyalog

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()
}

böyle ara

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

İpucu: iletişim kutusunun aşağıdaki içe aktarmalara ihtiyacı vardır (android studio bunu sizin için halletmelidir)

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

Ve bildirimde aşağıdaki izinlere ihtiyacınız var

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

2

Konum güncellemelerini isteyebilir ve GoogleMaps doas gibi iletişim kutusunu birlikte gösterebilirsiniz. İşte kod:

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;
            }
        }
    });
}

Daha fazla bilgiye ihtiyacınız varsa LocationRequest sınıfını kontrol edin .


Merhaba, Kullanıcının bulunduğu yeri bulmak için son iki gündür mücadele ediyorum. Kullanıcının geçerli lat uzun gerekir, ben google api istemcisi kullanılarak yapılabilir biliyorum. Ama hatmi izni nasıl entegre edilir. Ayrıca, kullanıcının konum hizmetleri açıksa, nasıl etkinleştirileceği. Yardım edebilir misin?
Chetna

Selam! yorumlarda cevaplayamadığım çok soru var. Daha resmi olarak cevaplayabilmemiz için lütfen yeni bir soru sorun!
bendaf


2

i ilk kodu kullanın başlamak oluşturma yöntemi 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;
        }
    }

ve eğer ture durumunu kontrol et Haritayı aç ve yanlış 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();
    }

resim açıklamasını buraya girin


1

En basit şekilde yapabilir

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 kullanıyorsanız Konum Hizmetinin etkin olup olmadığını kontrol etmek için aşağıdaki kodu kullanın:

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

0

Ağ sağlayıcısını kontrol etmek için, hem GPS sağlayıcısı hem de NETwork sağlayıcısı için dönüş değerlerini kontrol ederseniz, isProviderEnabled değerine LocationManager.NETWORK_PROVIDER olarak iletilen dizeyi değiştirmeniz yeterlidir.


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";
    }
}

}

Konum hizmetlerinin etkinleştirildiğini algılamak için isLocationEnabled yöntemini kullanın.

https://github.com/Polidea/RxAndroidBle/issues/327# sayfası, pasif sağlayıcıyı kullanmama yerine konum modunu kullanma konusunda daha fazla bilgi verecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.