Aktivieren Sie die Ortungsdienste, ohne zur Einstellungsseite zu navigieren

120

Gegen den traditionellen Ansatz, den Benutzer aufzufordern, zur Einstellungsseite zu wechseln, Ortungsdienste zu aktivieren und wieder zurückzukehren, habe ich in einigen der neuesten Apps eine einfachere Möglichkeit festgestellt, dasselbe zu tun.

Unter Bezugnahme auf den folgenden Screenshot wird dem Benutzer ein Dialogfeld angezeigt, in dem die Ortungsdienste mit nur einem Klick aktiviert werden. In diesen Apps funktioniert dies.

Wie kann ich das gleiche erreichen?

Geben Sie hier die Bildbeschreibung ein

GAMA
quelle
13
Können negative Wähler den Grund angeben?
GAMA
3
Vielen Dank, dass Sie diese Frage gestellt haben. Up Voted
Lokesh Pandey
@GAMA So funktioniert der Stackoverflow! Die Leute brauchen keinen Grund, um abzustimmen. So eine feindliche und großartige Gemeinschaft zugleich!

Antworten:

150

Dieser Dialog wird von LocationSettingsRequest.Builder erstellt , der in den Google Play Services verfügbar ist.

Sie müssen Ihrer App eine Abhängigkeit hinzufügen build.gradle:

compile 'com.google.android.gms:play-services-location:10.0.1'

Dann können Sie dieses minimale Beispiel verwenden:

private void displayLocationSettingsRequest(Context context) {
    GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context)
            .addApi(LocationServices.API).build();
    googleApiClient.connect();

    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(10000);
    locationRequest.setFastestInterval(10000 / 2);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);
    builder.setAlwaysShow(true);

    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();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    Log.i(TAG, "All location settings are satisfied.");
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to upgrade location settings ");

                    try {
                        // Show the dialog by calling startResolutionForResult(), and check the result
                        // in onActivityResult().
                        status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e) {
                        Log.i(TAG, "PendingIntent unable to execute request.");
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog not created.");
                    break;
            }
        }
    });
}

Das vollständige Beispiel finden Sie hier .

Mattia Maestrini
quelle
1
Es tut mir leid, aber ich habe die ersten beiden Zeilen nicht verstanden:You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
GAMA
Weitere Informationen zum Einrichten des Google Play-Dienstes finden Sie hier
Mattia Maestrini
Wo befindet sich build.gradle ?
GAMA
In Ihrem Anwendungsmodulverzeichnis. Normalerweise ist der Verzeichnisnameapp
Mattia Maestrini
3
SettingsApi ist jetzt beraubt.
Sagar Kacha
27

Befolgen Sie die unten genannten Schritte

1) Erstellen Sie eine LocationRequestnach Ihren Wünschen

LocationRequest mLocationRequest = LocationRequest.create()
           .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
           .setInterval(10 * 1000)
           .setFastestInterval(1 * 1000);

2) Erstellen Sie eineLocationSettingsRequest.Builder

LocationSettingsRequest.Builder settingsBuilder = new LocationSettingsRequest.Builder()
               .addLocationRequest(mLocationRequest);
settingsBuilder.setAlwaysShow(true);

3) Erhalten Sie LocationSettingsResponse Taskfolgenden Code

Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(this)
              .checkLocationSettings(settingsBuilder.build());

Hinweis: LocationServices.SettingsApi ist veraltet, verwenden Sie SettingsClientstattdessen.

4) Fügen Sie a hinzu OnCompleteListener, um das Ergebnis aus der Aufgabe zu erhalten. Wenn der Vorgang Taskabgeschlossen ist, kann der Client die Standorteinstellungen überprüfen, indem er den Statuscode des LocationSettingsResponseObjekts überprüft .

result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
    @Override
    public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
    try {
        LocationSettingsResponse response = 
                          task.getResult(ApiException.class);
        } catch (ApiException ex) {
            switch (ex.getStatusCode()) {
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        ResolvableApiException resolvableApiException = 
                                 (ResolvableApiException) ex;
                            resolvableApiException
                                   .startResolutionForResult(MapsActivity.this, 
                                         LOCATION_SETTINGS_REQUEST);
                    } catch (IntentSender.SendIntentException e) {

                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:

                    break;
            }
        }
    }
});  

FALL 1 :: LocationSettingsStatusCodes.RESOLUTION_REQUIRED Standort ist nicht aktiviert, aber wir können den Benutzer bitten, den Standort zu aktivieren, indem er ihn auffordert, den Standort mit dem Dialogfeld einzuschalten (durch Aufrufen startResolutionForResult).

Google Map Location Settings Request

FALL 2 :: Die LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE Standorteinstellungen sind nicht erfüllt. Wir haben jedoch keine Möglichkeit, die Einstellungen zu korrigieren, sodass der Dialog nicht angezeigt wird.

5) OnActivityResult Wir können die Benutzeraktion im Dialogfeld "Standorteinstellungen" abrufen. RESULT_OK=> Benutzer hat den Standort aktiviert. RESULT_CANCELLED- Der Benutzer lehnte die Anforderung der Standorteinstellung ab.

RevanthKrishnaKumar V.
quelle
11

Es funktioniert ähnlich wie bei Google Maps

Fügen Sie die Abhängigkeit in der Datei build.gradle hinzu

compile 'com.google.android.gms:play-services:8.3.0'

Dies oder das

compile 'com.google.android.gms:play-services-location:10.0.1'

Geben Sie hier die Bildbeschreibung ein

import android.content.Context;
import android.content.IntentSender;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.location.LocationSettingsRequest;
import com.google.android.gms.location.LocationSettingsResult;
import com.google.android.gms.location.LocationSettingsStatusCodes;

import java.util.List;

public class LocationOnOff_Similar_To_Google_Maps extends AppCompatActivity {

    protected static final String TAG = "LocationOnOff";

    private GoogleApiClient googleApiClient;
    final static int REQUEST_LOCATION = 199;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setFinishOnTouchOutside(true);

        // Todo Location Already on  ... start
        final LocationManager manager = (LocationManager) LocationOnOff_Similar_To_Google_Maps.this.getSystemService(Context.LOCATION_SERVICE);
        if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)) {
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
            finish();
        }
        // Todo Location Already on  ... end

        if(!hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)){
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps not Supported",Toast.LENGTH_SHORT).show();
        }

        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocationOnOff_Similar_To_Google_Maps.this)) {
            Log.e("keshav","Gps already enabled");
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps not enabled",Toast.LENGTH_SHORT).show();
            enableLoc();
        }else{
            Log.e("keshav","Gps already enabled");
            Toast.makeText(LocationOnOff_Similar_To_Google_Maps.this,"Gps already enabled",Toast.LENGTH_SHORT).show();
        }
    }


    private boolean hasGPSDevice(Context context) {
        final LocationManager mgr = (LocationManager) context
                .getSystemService(Context.LOCATION_SERVICE);
        if (mgr == null)
            return false;
        final List<String> providers = mgr.getAllProviders();
        if (providers == null)
            return false;
        return providers.contains(LocationManager.GPS_PROVIDER);
    }

    private void enableLoc() {

        if (googleApiClient == null) {
            googleApiClient = new GoogleApiClient.Builder(LocationOnOff_Similar_To_Google_Maps.this)
                    .addApi(LocationServices.API)
                    .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                        @Override
                        public void onConnected(Bundle bundle) {

                        }

                        @Override
                        public void onConnectionSuspended(int i) {
                            googleApiClient.connect();
                        }
                    })
                    .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                        @Override
                        public void onConnectionFailed(ConnectionResult connectionResult) {

                            Log.d("Location error","Location error " + connectionResult.getErrorCode());
                        }
                    }).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);

            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();
                    switch (status.getStatusCode()) {
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            try {
                                // Show the dialog by calling startResolutionForResult(),
                                // and check the result in onActivityResult().
                                status.startResolutionForResult(LocationOnOff_Similar_To_Google_Maps.this, REQUEST_LOCATION);

                                finish();
                            } catch (IntentSender.SendIntentException e) {
                                // Ignore the error.
                            }
                            break;
                    }
                }
            });
        }
    }

}
Keshav Gera
quelle
2
EinstellungenApi ist jetzt beraubt
Sagar Kacha
2
SettingsApi ist jetzt veraltet. Verwenden Sie jetzt SettingsClient: developer.google.com/android/reference/com/google/android/gms/…
Rishabh Chandel
9
implementation 'com.google.android.gms:play-services-location:16.0.0'

Variable Aussage

private SettingsClient mSettingsClient;
private LocationSettingsRequest mLocationSettingsRequest;
private static final int REQUEST_CHECK_SETTINGS = 214;
private static final int REQUEST_ENABLE_GPS = 516;

Öffnen Sie den Dialog mit dem folgenden Code

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
builder.setAlwaysShow(true);
mLocationSettingsRequest = builder.build();

mSettingsClient = LocationServices.getSettingsClient(YourActivity.this);

mSettingsClient
    .checkLocationSettings(mLocationSettingsRequest)
    .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            //Success Perform Task Here
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            int statusCode = ((ApiException) e).getStatusCode();
            switch (statusCode) {
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    try {
                        ResolvableApiException rae = (ResolvableApiException) e;
                        rae.startResolutionForResult(YourActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException sie) {
                        Log.e("GPS","Unable to execute request.");
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    Log.e("GPS","Location settings are inadequate, and cannot be fixed here. Fix in Settings.");
            }
        }
    })
    .addOnCanceledListener(new OnCanceledListener() {
        @Override
        public void onCanceled() {
            Log.e("GPS","checkLocationSettings -> onCanceled");
        }
    });

onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_CHECK_SETTINGS) {
        switch (resultCode) {
            case Activity.RESULT_OK:
                //Success Perform Task Here
                break;
            case Activity.RESULT_CANCELED:
                Log.e("GPS","User denied to access location");
                openGpsEnableSetting();
                break;
        }
    } else if (requestCode == REQUEST_ENABLE_GPS) {
        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        if (!isGpsEnabled) {
            openGpsEnableSetting();
        } else {
            navigateToUser();
        }
    }
}

private void openGpsEnableSetting() {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivityForResult(intent, REQUEST_ENABLE_GPS);
}   
Ketan Ramani
quelle
Vielen Dank! Wenn Sie diesen Code fragmentarisch verwenden, lesen Sie stackoverflow.com/a/39579124/2914140 : Anstelle eines rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)Aufrufs startIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)wird er sonst onActivityResult()nicht aufgerufen.
CoolMind
@CoolMind Dank kann für jemanden verwendet werden, der dies für Fragment benötigt
Ketan Ramani
@CoolMind, ist es möglich, etwas Ähnliches wie startIntentSenderForResultin der Methode zu verwenden openGpsEnableSetting()?
Aliton Oliveira
@AlitonOliveira, könnten Sie im Detail beschreiben? Im Code wird openGpsEnableSetting()einfach ein Dialog gestartet, um die GPS-Einstellungen zu aktivieren. Nachdem es beendet ist, onActivityResult()wird mit aufgerufen requestCode == REQUEST_ENABLE_GPS.
CoolMind
onActivityResult()wird von Activity aufgerufen und ich habe mich gefragt, ob es möglich ist, das Ergebnis an das FragmentGleiche zurückzugeben startIntentSenderForResult.
Aliton Oliveira
8

Vielen Dank an Mattia Maestrini +1

Xamarinlösung:

using Android.Gms.Common.Apis;
using Android.Gms.Location;

public const int REQUEST_CHECK_SETTINGS = 0x1;

private void DisplayLocationSettingsRequest()
{
    var googleApiClient = new GoogleApiClient.Builder(this).AddApi(LocationServices.API).Build();
    googleApiClient.Connect();

    var locationRequest = LocationRequest.Create();
    locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
    locationRequest.SetInterval(10000);
    locationRequest.SetFastestInterval(10000 / 2);

    var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
    builder.SetAlwaysShow(true);

    var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());
    result.SetResultCallback((LocationSettingsResult callback) =>
    {
        switch (callback.Status.StatusCode)
        {
            case LocationSettingsStatusCodes.Success:
                {
                    DoStuffWithLocation();
                    break;
                }
            case LocationSettingsStatusCodes.ResolutionRequired:
                {
                    try
                    {
                        // Show the dialog by calling startResolutionForResult(), and check the result
                        // in onActivityResult().
                        callback.Status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
                    }
                    catch (IntentSender.SendIntentException e)
                    {
                    }

                    break;
                }
            default:
                {
                    // If all else fails, take the user to the android location settings
                    StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
                    break;
                }
        }
    });
}

protected override void OnActivityResult(int requestCode, Android.App.Result resultCode, Intent data)
{
    switch (requestCode)
    {
        case REQUEST_CHECK_SETTINGS:
            {
                switch (resultCode)
                {
                    case Android.App.Result.Ok:
                        {
                            DoStuffWithLocation();
                            break;
                        }
                    case Android.App.Result.Canceled:
                        {
                            //No location
                            break;
                        }
                }
                break;
            }
    }
}

HINWEIS:

Dies funktioniert nicht mit Huawei oder anderen Geräten, auf denen keine Google-Dienste installiert sind.

Pierre
quelle
Es funktioniert nicht!! Können Sie bitte vollständigen Code teilen
Omkar
Ich versuche, die DisplayLocationSettingsRequest () -Methode über die OnCreate-Methode von Android Activity aufzurufen. Leider kann ich das Popup "Standortbestimmungsanforderung" nicht anzeigen, das den Standort aktiviert. Kannst du mir bitte helfen?
Omkar
@Omkar haben Sie die Xamarin.GooglePlayServices.Location über Nuget installiert? Haben Sie die beiden obigen Zeilen eingefügt using android.Gms.Common.Apis; using Android.Gms.Location;? Erhalten LocationServices.SettingsApi.CheckLocationSettingsSie nach dem Anruf einen Rückruf innerhalb result.SetResultCallback(? Platzieren Sie an jedem einen Haltepunkt und überprüfen Sie, was der Code tut
Pierre
Ja, ich habe alle Voraussetzungen hinzugefügt. Und ich erhielt das Ergebnis als Id = 1, Status = WaitingForActivation, Method = (null). Aber diese Wartezeit ist unendlich, da sie lange gewartet wurde und kein Ergebnis erhalten hat.
Omkar
4

Android Marshmallow 6 unterstützt die Laufzeitberechtigung. Laufzeitberechtigungen funktionieren nur auf Marshmallow und vor Marshmallow funktioniert es immer noch auf die alte Art und Weise.

Weitere Informationen finden Sie in diesem offiziellen Video für Android-Entwickler:

https://www.youtube.com/watch?v=C8lUdPVSzDk

Und um Erlaubnis bitten: http://developer.android.com/training/permissions/requesting.html

Sharj
quelle
Sind Marshmallow-APIs für Entwicklungszwecke verfügbar?
GAMA
Bedeutet das also, dass der durch den Screenshot gezeigte Workflow nur mit Marshmallow und später erreicht werden kann?
GAMA
Ja, wie in der Dokumentation angegeben, handelt es sich um API-Level 23, sodass es nur unter Marshmallow und neueren Versionen funktioniert.
Sharj
jede Möglichkeit, das gleiche Verhalten in meinem eigenen benutzerdefinierten Dialog zu erreichen
Srishti Roy
4

Vielen Dank an Mattia Maestrini für die Antwort, die ich gerne mit hinzufügen möchte

compile 'com.google.android.gms:play-services-location:8.1.0'

würde genügen. Dies verhindert, dass Ihre App unnötige Bibliotheken enthält, und hilft, die Anzahl Ihrer Methoden niedrig zu halten.

Vuong Pham
quelle
2

Kotlin-Lösung

Hinzufügen build.gradle(Module:app)

implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'

Danach erstellen Sie diese Funktion

fun enablegps() {

    val mLocationRequest = LocationRequest.create()
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
        .setInterval(2000)
        .setFastestInterval(1000)

    val settingsBuilder = LocationSettingsRequest.Builder()
        .addLocationRequest(mLocationRequest)
    settingsBuilder.setAlwaysShow(true)

    val result = LocationServices.getSettingsClient(this).checkLocationSettings(settingsBuilder.build())
    result.addOnCompleteListener { task ->

        //getting the status code from exception
        try {
            task.getResult(ApiException::class.java)
        } catch (ex: ApiException) {

            when (ex.statusCode) {

                LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try {

                    Toast.makeText(this,"GPS IS OFF",Toast.LENGTH_SHORT).show()

                    // Show the dialog by calling startResolutionForResult(), and check the result
                    // in onActivityResult().
                    val resolvableApiException = ex as ResolvableApiException
                    resolvableApiException.startResolutionForResult(this,REQUEST_CHECK_SETTINGS
                    )
                } catch (e: IntentSender.SendIntentException) {
                    Toast.makeText(this,"PendingIntent unable to execute request.",Toast.LENGTH_SHORT).show()

                }

                LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {

                    Toast.makeText(
                        this,
                        "Something is wrong in your GPS",
                        Toast.LENGTH_SHORT
                    ).show()

                }


            }
        }



    }


}
Jimale Abdi
quelle
1

Mit dem kürzlich durchgeführten Marshmallow-Update muss Ihre App auch bei aktivierter Standorteinstellung explizit um Erlaubnis bitten. Die empfohlene Methode hierfür besteht darin, den Abschnitt Berechtigungen Ihrer App anzuzeigen, in dem der Benutzer die Berechtigung nach Bedarf umschalten kann. Das Code-Snippet dafür lautet wie folgt:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Location Permission");
        builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app.");
        builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);}
        });
        builder.setNegativeButton(android.R.string.no, null);
        builder.show();
    }
} else {
    // do programatically as show in the other answer 
}

Und überschreiben Sie die onRequestPermissionsResultMethode wie folgt:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_COARSE_LOCATION: {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    Log.d(TAG, "coarse location permission granted");
                } else {
                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            }
        }
    }

Ein anderer Ansatz ist, dass Sie mit SettingsApi auch abfragen können, welche Standortanbieter aktiviert sind. Wenn keine aktiviert ist, können Sie einen Dialog auffordern, um die Einstellung in der App zu ändern.

Mahendra Liya
quelle
1

Der einfachste Weg, den ich während meiner Recherche gefunden habe, besteht darin, eine Util-Klasse für diesen Standortanforderungsprozess zu erstellen und sie dann aufzurufen, um das GPS für uns einzuschalten.

Bitte überprüfen Sie diesen Blog! Es erzählte die ganze Geschichte.

Harpreet
quelle