Aktifkan layanan lokasi tanpa membuka halaman pengaturan

121

Melawan pendekatan tradisional yang meminta pengguna untuk pergi ke halaman pengaturan dan mengaktifkan layanan lokasi dan kembali lagi, saya telah memperhatikan cara yang lebih sederhana untuk melakukan hal yang sama di beberapa aplikasi terbaru.

Mengacu pada tangkapan layar di bawah ini, ini meminta dialog kepada pengguna untuk mengaktifkan layanan lokasi hanya dengan satu klik dan berfungsi di aplikasi tersebut.

Bagaimana saya bisa mencapai hal yang sama?

masukkan deskripsi gambar di sini

GAMA
sumber
13
Bisakah pemilih negatif memberikan alasannya?
GAMA
3
Terima kasih telah menanyakan pertanyaan ini. Atas suara
Lokesh Pandey
@GAMA Beginilah cara kerja stackoverflow! Orang tidak membutuhkan alasan untuk menolak. Komunitas yang sangat bermusuhan dan hebat pada saat yang sama!

Jawaban:

150

Dialog ini dibuat oleh LocationSettingsRequest.Builder yang tersedia di Layanan Google Play.

Anda perlu menambahkan ketergantungan ke aplikasi Anda build.gradle:

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

Kemudian Anda dapat menggunakan contoh minimal ini:

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

Anda dapat menemukan contoh lengkapnya di sini .

Mattia Maestrini
sumber
1
Maaf, tapi saya tidak mengerti dua baris pertama:You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
GAMA
Anda dapat menemukan informasi lebih lanjut tentang cara mengatur Layanan Google Play di sini
Mattia Maestrini
di mana lokasi build.gradle ?
GAMA
Di dalam direktori modul aplikasi Anda. Biasanya nama direktori adalahapp
Mattia Maestrini
3
SettingsApi sekarang dihentikan.
Sagar Kacha
27

Ikuti langkah-langkah yang disebutkan di bawah ini

1) Buat LocationRequestsesuai keinginan Anda

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

2) Buat aLocationSettingsRequest.Builder

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

3) Dapatkan LocationSettingsResponse Taskmenggunakan kode berikut

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

Catatan: LocationServices.SettingsApi tidak digunakan lagi, jadi gunakan sebagai SettingsClientgantinya.

4) Tambahkan a OnCompleteListeneruntuk mendapatkan hasil dari Tugas. Setelah Taskselesai, klien dapat memeriksa pengaturan lokasi dengan melihat kode status dari LocationSettingsResponseobjek.

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

KASUS 1:: LocationSettingsStatusCodes.RESOLUTION_REQUIRED Lokasi tidak diaktifkan tetapi, kita dapat meminta pengguna untuk mengaktifkan lokasi dengan meminta dia untuk mengaktifkan lokasi dengan dialog (dengan memanggil startResolutionForResult).

Permintaan Pengaturan Lokasi Google Map

KASUS 2:: LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE Pengaturan lokasi tidak dipenuhi. Namun, kami tidak memiliki cara untuk memperbaiki pengaturan tersebut sehingga kami tidak akan menampilkan dialog.

5) OnActivityResult kita bisa mendapatkan tindakan pengguna di dialog pengaturan lokasi. RESULT_OK=> Pengguna menyalakan Lokasi. RESULT_CANCELLED- Pengguna menolak permintaan pengaturan lokasi.

RevanthKrishnaKumar V.
sumber
11

Ini Bekerja Mirip dengan peta google

Tambahkan Dependensi di file build.gradle

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

ini atau itu

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

masukkan deskripsi gambar di sini

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
sumber
2
SettingsApi sekarang dihentikan
Sagar Kacha
2
SettingsApi sekarang tidak digunakan lagi. Sekarang gunakan SettingsClient: developers.google.com/android/reference/com/google/android/gms/…
Rishabh Chandel
9
implementation 'com.google.android.gms:play-services-location:16.0.0'

Deklarasi Variabel

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

Buka Dialog Menggunakan Kode Di Bawah Ini

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
sumber
Terima kasih! Jika Anda menggunakan kode ini dalam fragmen, lihat stackoverflow.com/a/39579124/2914140 : sebagai ganti rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)panggilan startIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null), jika onActivityResult()tidak, tidak akan dipanggil.
CoolMind
@CoolMind Terima kasih dapat digunakan untuk seseorang yang membutuhkan ini untuk fragmen
Ketan Ramani
@ CoolMind, apakah mungkin menggunakan sesuatu yang mirip dengan startIntentSenderForResultmetode ini openGpsEnableSetting()?
Aliton Oliveira
@AlitonOliveira, dapatkah Anda menjelaskan secara detail? Dalam kode openGpsEnableSetting()cukup memulai dialog untuk mengaktifkan pengaturan GPS. Setelah selesai, onActivityResult()dipanggil dengan requestCode == REQUEST_ENABLE_GPS.
CoolMind
onActivityResult()dipanggil dari Aktivitas dan saya bertanya-tanya apakah mungkin mengembalikan hasilnya ke Fragmentsejenis startIntentSenderForResult.
Aliton Oliveira
8

Terima kasih kepada Mattia Maestrini +1

Solusi Xamarin:

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

CATATAN:

Ini tidak akan berfungsi dengan Huawei atau perangkat lain yang tidak memasang layanan Google.

Pierre
sumber
Ini tidak bekerja!! Bisakah Anda berbagi kode lengkap
Omkar
Saya mencoba memanggil metode DisplayLocationSettingsRequest () dari metode OnCreate pada Android Activity. Namun sayangnya saya tidak dapat melihat pop-up permintaan pengaturan lokasi yang mengaktifkan Lokasi. Bisakah Anda membantu saya.
Omkar
@Omkar, apakah Anda menginstal Lokasi Xamarin.GooglePlayServices.Location melalui Nuget? Apakah Anda memasukkan dua baris di atas using android.Gms.Common.Apis; using Android.Gms.Location;? Setelah menelepon, LocationServices.SettingsApi.CheckLocationSettingsapakah Anda mendapat panggilan balik result.SetResultCallback(? Tempatkan titik istirahat di masing-masing dan periksa apa yang dilakukan kode
Pierre
Ya, saya menambahkan semua prasyarat. Dan saya menerima hasil sebagai Id = 1, Status = WaitingForActivation, Method = (null). Tetapi waktu tunggu ini tidak terbatas karena menunggu waktu yang lama, dan tidak mendapat hasil.
Omkar
4

Android Marshmallow 6 mendukung izin waktu proses. Izin waktu proses hanya berfungsi di Marshmallow dan di pra-Marshmallow masih berfungsi dengan cara lama.

Anda dapat mempelajari lebih lanjut tentang itu di Video resmi Pengembang Android ini:

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

Dan meminta izin: http://developer.android.com/training/permissions/requesting.html

Sharj
sumber
Apakah Marshmallow API tersedia untuk tujuan pengembangan?
GAMA
jadi apakah itu berarti alur kerja yang ditampilkan melalui tangkapan layar hanya dapat dicapai Marshmallow dan yang lebih baru?
GAMA
Ya, seperti yang dinyatakan dalam dokumentasi, itu adalah API level 23 sehingga hanya akan berfungsi di Marshmallow dan yang lebih baru.
Sharj
cara apa pun untuk mencapai perilaku yang sama dalam dialog khusus saya
Srishti Roy
4

Terima kasih Mattia Maestrini atas Jawabannya, saya ingin menambahkannya menggunakan

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

sudah cukup. Ini mencegah aplikasi Anda memasukkan pustaka yang tidak perlu dan membantu menjaga metode Anda tetap dihitung.

Vuong Pham
sumber
2

Solusi Kotlin

Menambahkan 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'

setelah itu buat fungsi ini

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
sumber
1

Dengan pembaruan Marshmallow baru-baru ini, meskipun setelan Lokasi diaktifkan, aplikasi Anda perlu meminta izin secara eksplisit. Cara yang disarankan untuk melakukan ini adalah dengan menunjukkan bagian Izin aplikasi Anda di mana pengguna dapat mengalihkan izin sesuai kebutuhan. Potongan kode untuk melakukan ini adalah sebagai berikut:

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 
}

Dan ganti onRequestPermissionsResultmetode seperti di bawah ini:

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

Pendekatan lainnya adalah Anda juga dapat menggunakan SettingsApi untuk menanyakan penyedia lokasi mana yang diaktifkan. Jika tidak ada yang diaktifkan, Anda dapat meminta dialog untuk mengubah pengaturan dari dalam aplikasi.

Mahendra Liya
sumber
1

Cara paling sederhana yang saya temukan saat penelitian saya, adalah membuat kelas Util untuk proses permintaan lokasi ini dan kemudian memanggilnya untuk mengaktifkan gps untuk kami.

Silakan periksa blog ini! Itu menceritakan keseluruhan cerita.

Harpreet
sumber