it-swarm.com.de

Android: Überprüfen Sie, ob die Standortdienste mit dem Anbieter für den Standort mit gebundenen Standorten aktiviert sind

Laut der Android-Dokumentation:

Die Google Location Services-API, Teil der Google Play Services, bietet ein leistungsfähigeres High-Level-Framework, das automatisch verarbeitet Standortanbieter, Benutzerbewegungen und Standortgenauigkeit als die Plattform-Standort-API in Android.location.

Bei der Verwendung des Fixed Location Providers (von Standort-APIs in Google Play-Diensten) weiß ich nicht, wie ich überprüfen kann, ob der Standort des Nutzers aktiviert oder deaktiviert ist.

Mit dem oldAndroid.location war es einfach:

locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Ich möchte jedoch nicht beide Standortanbieter von Google Play Services und old für Android verwenden.

Wie kann ich überprüfen, ob der Standort vom Benutzer mit dem Fused Location Provider aktiviert wurde?

Danke im Voraus.

17
josuadas

Siehe SettingsApi : Überprüfen Sie Ihre Standortanfrage und stellen Sie sicher, dass die Systemeinstellungen des Geräts für die Standortanforderungen der App ordnungsgemäß konfiguriert sind.

17
Aryan Najafi

Dieses Android-Entwickler-Lernprogramm könnte helfen - hier sind die Grundlagen:

Code, der in Ihrer Activity onCreate () ausgeführt werden soll:

 // Create an instance of GoogleAPIClient.
    if (mGoogleApiClient == null) {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

    mGoogleApiClient.connect();

    LocationRequest mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(LocationSettingsResult locationSettingsResult) {

            final Status status = locationSettingsResult.getStatus();
            final LocationSettingsStates LS_state = locationSettingsResult.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(LocationByGPS.this, REQUEST_CHECK_SETTINGS);

                    } catch (IntentSender.SendIntentException e) {
                        // Ignore the error.
                    }
                    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;
            }
        }
    });

Diese Methode überschreiben:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
    switch (requestCode) {
        case REQUEST_CHECK_SETTINGS:
            switch (resultCode) {
                case Activity.RESULT_OK:
                    // All required changes were successfully made
                    GetUserLocation();//FINALLY YOUR OWN METHOD TO GET YOUR USER LOCATION HERE
                    break;
                case Activity.RESULT_CANCELED:
                    // The user was asked to change settings, but chose not to

                    break;
                default:
                    break;
            }
            break;
    }
}

Denken Sie daran, diese in Ihrer Klasse zu implementieren:

public class MyClass extends AppCompatActivity implements
    ActivityCompat.OnRequestPermissionsResultCallback,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener{

  protected static final int REQUEST_CHECK_SETTINGS = 0x1;


  /* 
     your code i.e. with the above code etc....
 */

 }

Gute Erklärung hier in diesem Google-Entwicklerlink.

Prost!

36
S bruce

Wie jetzt im Jahr 2019

Der neueste, beste und kürzeste Weg ist

    public booleanisLocationEnabled()
    {
     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
Mayank Sharma

Sie können auch so überprüfen:

LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean isEnabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
1