Android Konum İzinleri ve Konum Dialog Ayarları

location dialog

Merhaba arkadaşlar bu yazımızda sizlerele konum izinleri nasıl alınır ve konum ayarları sayfasına gitmeden veya üst barı aşağıya çekip konumu aktif et demek yerine kullanıcıya konumu aktif değilse bir dilog çıkartıp açıp açmayacağımızı nasıl yapıldığını anlatan bir yazı hazırladım. Eğer fragment kullanıyorsanız kodlarınızı ona göre düzenleyiniz.

Önce her zaman yaptığımız gibi google servisini gradle’a ekleyelim

implementation 'com.google.android.gms:play-services:12.0.1'

sonra manifest de konum izni alacaklar için iznimizi ekliyoruz.

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

Mainactivity.java dosyamıza geldik global tanımlamalarımızı en üstte yapalım

private static final int REQUEST_CHECK_SETTINGS = 0x1;
private static GoogleApiClient mGoogleApiClient;

oncreate içerisinde veya showLocationState() den hemen önce google api kontrolünü yapmamız gerekiyor.

initGoogleAPIClient();
private void initGoogleAPIClient() {
    //Without Google API Client Auto Location Dialog will not work
    mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this)
            .addApi(LocationServices.API)
            .build();
    mGoogleApiClient.connect();
}

Şimdi dialog göstereceğimiz methodumuz var onu da ekleyelim.

private void showLocationState(){
    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);//Setting priotity of Location request to high
    locationRequest.setInterval(30 * 1000);
    locationRequest.setFastestInterval(5 * 1000);//5 sec Time interval for location update
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest);
    builder.setAlwaysShow(true); //this is the key ingredient to show dialog always when GPS is off

    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, 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:
                    //Konum ayarları etkin ise buraya
                    // istekler burda
                    //updateGPSStatus("GPS is Enabled in your device");
                    Log.d("locationEnable","SUCCESS");
                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Konum ayarları etkin değil fakat dialog gösterip konum açılmasını sağlıyor isek buraya
                    // Dialog göster
                    try {
                        // startResolutionForResult(), çağırıp kontrol edilir
                        Log.d("locationEnable","RESOLUTION_REQUIRED");
                        status.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                    } catch (IntentSender.SendIntentException e) {
                        e.printStackTrace();
                        // Ignore the error.
                    }
                    break;
                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                    // Konum eğer açılamıyor ise buraya düşer
                    Log.d("locationEnable","SETTINGS_CHANGE_UNAVAILABLE");
                    break;
            }
        }
    });
}

 

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CHECK_SETTINGS) {

        if (resultCode == RESULT_OK) {

            Toast.makeText(MainActivity.this, "GPS enabled", Toast.LENGTH_LONG).show();
        } else {

            Toast.makeText(MainActivity.this, "GPS is not enabled", Toast.LENGTH_LONG).show();
        }

    }
}

Bir button click veya oncreate içerisinde de aşağıdaki location gösterimini çağırıyoruz.

showLocationState();

Bu bölüme kadar olan kısım sadece konum değerini ayarlara gitmeden açmak ile ilgili olan bölümdü. Peki biz konum iznini nasıl alacağız onu da anlatayım.

/*  Konum izni için User Permission  */
private void requestLocationPermission() {
    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                ACCESS_FINE_LOCATION_INTENT_ID);

    } else {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                ACCESS_FINE_LOCATION_INTENT_ID);
    }
}

 

/*  Marshmallow ve üzeri cihazlar için geçerli olduğu için kontrol yapıyoruz */
private void checkPermissions() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                android.Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED)
            requestLocationPermission();
        else
            showLocationState();
    } else
        showLocationState();

}

Tek kalan izni bir yerde çağırmak. Buton click veya oncreate içerisinde çağırabilirsiniz.

checkPermissions();//konum izni al

 

 

İlk yorum yapan olun

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.