स्थान सेवा सक्षम होने पर कैसे जांचें?


228

मैं Android OS पर एक ऐप विकसित कर रहा हूं। मुझे नहीं पता कि लोकेशन सर्विसेज़ इनेबल हैं या नहीं, कैसे चेक करें।

मुझे एक ऐसी विधि की आवश्यकता है जो "सच" लौटाए यदि वे सक्षम हैं और "झूठे" हैं यदि नहीं (तो अंतिम स्थिति में मैं उन्हें सक्षम करने के लिए एक संवाद दिखा सकता हूं)।


3
मुझे पता है कि यह एक पुराना विषय है, लेकिन जो अनुसरण कर सकते हैं उनके लिए ... Google ने इसके लिए एक एपीआई जारी किया है; डेवलपर्स
पीटर मैक्लेनाघन

मैं यहाँ कोड के साथ इसी तरह के सवाल का जवाब है। इसकी जांच - पड़ताल करें। बहुत मददगार।
एस ब्रूस

FYI करें: SettingsApi को अब हटा दिया गया है। इसके बजाय Developers.google.com/android/reference/com/google/android/gms/… का उपयोग करें ।
राजीव

जवाबों:


361

आप नीचे दिए गए कोड का उपयोग यह जांचने के लिए कर सकते हैं कि जीपीएस प्रदाता और नेटवर्क प्रदाता सक्षम हैं या नहीं।

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
पेट 16

2
आप यह देखने के लिए जांच सकते हैं कि फोन हवाई जहाज मोड में है और इसे संभाल लें .... stackoverflow.com/questions/4319212/……
John

2
मेरे पास lm.isProviderEnabled (LocationManager.GPS_PROVIDER) के साथ कुछ मुद्दे थे जो हमेशा झूठे होते थे। ऐसा तब लगता है जब आप Play Services के नए संस्करण का उपयोग करते हैं: वह जो एक डायलॉग दिखाता है, जहाँ आप सेटिंग गतिविधि को दिखाए बिना डायलॉग से अपने जीपीएस को चालू कर सकते हैं। जब उपयोगकर्ता उस संवाद से जीपीएस चालू करता है, तो वह कथन हमेशा गलत होता है, भले ही जीपीएस चालू हो
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
स्पष्टता के लिए, हो सकता है कि वह कैच ब्लॉक में झूठा लौटना चाहे। स्थान को प्रारंभ करेंमाँसेट को सेटिंग्स .ecure। LOCATION_MODE_OFF।
रयानलेऑनार्ड

2
यह एक अच्छा जवाब है क्योंकि यह पुराने और नए दोनों एंड्रॉइड लोकेशन एपीआई के साथ काम करता है।
डिडेरिक

2
LOCATION_PROVIDERS_ALLOWED - लिंक यह स्थिरांक API स्तर 19 में पदावनत कर दिया गया था। हमें LOCATION_MODE और MODE_CHANGED_ACTION (या PROVIDERS_CHANGED
-ACTION

3
इस उत्तर को सही उत्तर के रूप में स्वीकार किया जाना चाहिए था। LocationManager.isProviderEnabled () विधि मेरे 4.4 डिवाइस पर विश्वसनीय नहीं है (और जैसा कि मैंने देखा कि अन्य डेवलपर्स के अन्य ओएस संस्करणों पर भी यही समस्या थी)। मेरे मामले में यह प्रत्येक मामले में GPS के लिए सही है (स्थान सेवाओं के सक्षम होने या न होने से कोई फर्क नहीं पड़ता)। इस महान समाधान के लिए धन्यवाद!
strongmayer

2
यह मेरे परीक्षण उपकरण, सैमसंग SHV-E160K, एंड्रॉइड 4.1.2, एपीआई 16 पर काम नहीं करता था। हालांकि मैं जीपीएस को ऑफ़लाइन बनाता हूं, यह फ़ंक्शन अभी भी सही है। मैंने एंड्रॉइड
नूगट

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विधि क्योंकि कॉल एपीआई 23 की आवश्यकता है ;-)
Mackovich

6
या आप इसके बजाय LocationManagerCompat का उपयोग कर सकते हैं । :)
मोक्कुन

वापसी lm का उपयोग करें! = Null && lm.isLocationEnabled (); बदले में lm.isLocationEnabled ();
डॉ। डीएस

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
बहुत धन्यवाद, लेकिन मुझे जीपीएस की जांच करने के लिए कोड की आवश्यकता नहीं है, लेकिन सिर्फ स्थान सेवाएं।
मेरोलेथ

1
स्थान सेवाएँ हमेशा उपलब्ध होती हैं, लेकिन विभिन्न प्रदाता अनुपलब्ध हो सकते हैं।
lenik

4
@lenik, कुछ डिवाइस एक सेटिंग प्रदान करता है ("सेटिंग> व्यक्तिगत> स्थान सेवाओं> मेरे स्थान पर पहुंच" के तहत) जो विशिष्ट प्रदाताओं को सक्षम करने पर भी, स्थान का पता लगाने में पूरी तरह से सक्षम / अक्षम करता है। मैंने यह पहली बार एक फोन के साथ देखा था जिसे मैं परीक्षण कर रहा था, और वाईफाई और जीपीएस दोनों सक्षम होने के बावजूद वे मेरे ऐप में मृत दिखाई दिए ...। दुर्भाग्य से, मैंने तब से सेटिंग को सक्षम किया और अब मूल परिदृश्य को पुन: पेश नहीं कर सकता, यहां तक ​​कि अक्षम करने पर भी "मेरे स्थान पर पहुंच" सेटिंग। इसलिए मैं नहीं कह सकता कि अगर सेटिंग 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)
}

यह एंड्रॉइड 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.कि यदि आपके पास नेटवर्क या जीपीएस प्रदाता की अनुमति नहीं है, तो यह एक अपवाद फेंक सकता है, जिसके आधार पर यह सक्षम है। अधिक जानकारी के लिए स्रोत कोड की जाँच करें।
xuiqzy

15

उपर्युक्त उत्तर को कार्य करते हुए, एपीआई 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
Gennady Kozlov

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);
लेडीडूडी

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

एंड्रॉइड गूगल मैप्स में वर्तमान जियो लोकेशन प्राप्त करने के लिए , आपको अपना डिवाइस स्थान विकल्प चालू करना चाहिए। यह जांचें कि स्थान चालू है या नहीं, आप अपने 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()
 }

संकेत: संवाद के लिए निम्न आयात की आवश्यकता है (Android स्टूडियो को आपके लिए इसे संभालना चाहिए)

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 वर्ग की जाँच करें ।


हैलो, मैं उपयोगकर्ता के वर्तमान स्थान को प्राप्त करने के लिए पिछले दो दिनों से संघर्ष कर रहा हूं। मुझे उपयोगकर्ता के वर्तमान लंबे समय की आवश्यकता है, मुझे पता है कि Google एपीआई क्लाइंट का उपयोग करके किया जा सकता है। लेकिन इसमें मार्शमैलो अनुमति को कैसे एकीकृत किया जाए। साथ ही यदि उपयोगकर्ता की लोकेशन सेवाएं चालू हैं, तो उसे कैसे सक्षम किया जाए। क्या आप मदद कर सकते हैं?
चेतना

नमस्ते! आपके पास बहुत से प्रश्न हैं, मैं टिप्पणियों में क्या जवाब नहीं दे सकता हूं। कृपया एक नया प्रश्न पूछें ताकि मैं इसका अधिक आधिकारिक रूप से उत्तर दे सकूं!
बेंडाफ

मैंने अपना प्रश्न यहाँ पोस्ट किया है: stackoverflow.com/questions/39327480/…
चेतना

2

मैं पहला कोड का उपयोग शुरू विधि बनाने के लिए है

 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

यदि आप GPS प्रदाता और NETERT प्रदाता दोनों के लिए वापसी मानों की जाँच करते हैं, तो नेटवर्क प्रदाता के लिए जाँच करने के लिए आपको केवल स्ट्रिंग बदलने की आवश्यकता है जो isProvider के पास है।


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

}

स्थान सेवाओं के सक्षम होने का पता लगाने के लिए .LocationEnabled विधि का उपयोग करें।

https://github.com/Polidea/RxAndroidBle/issues/327# पेज अधिक जानकारी देगा कि निष्क्रिय प्रदाता का उपयोग क्यों न करें, इसके बजाय स्थान मोड का उपयोग करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.