Google haritaları gibi konum etkinleştir iletişim kutusu nasıl gösterilir?


129

Google Play Hizmetlerinin (7.0) en son sürümünü kullanıyorum ve kılavuzlarında verilen adımları izledim ve aşağıdaki gibi "asla" düğmesi olan konum iletişim kutusunu etkinleştirdim. Uygulamamın zorunlu olarak konuma ihtiyacı var, bu nedenle kullanıcıya "hiçbir zaman" gösterilmesini istemiyorum çünkü kullanıcı "hiçbir zaman" seçeneğini tıkladığında, konumu veya tekrar konum isteğini alamıyorum.

Google Haritalar'da hiçbir zaman düğmesi olmayan yalnızca evet ve hayır düğmesi varken, aynı şeyi nasıl başaracağınıza dair bir fikriniz var mı?

Uygulamamın resmi görüntü açıklamasını buraya girin

Google Haritasının resmi görüntü açıklamasını buraya girin

Yanıtlar:


149

LocationSettingsRequest.Builder'ın bir yöntemi vardır setAlwaysShow(boolean show). Doküman şu anda hiçbir şey yapmadığını belirtse de (güncellenen 2015-07-05: güncellenmiş Google dokümanları bu ifadeyi kaldırdı), ayar builder.setAlwaysShow(true);Google Haritalar davranışını etkinleştirecek: görüntü açıklamasını buraya girin

İşte onu çalıştıran kod:

if (googleApiClient == null) {
    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 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;
            }
        }
    });
}

Android Belgelerinden

Kotlin için buraya bakın: https://stackoverflow.com/a/61868985/12478830


1
@ MarianPaździoch, Google'ın SettingsApi'deki kendi örnek koduna ihtiyaç duymadığından, buna ihtiyacınız olmadığından oldukça emin.
Kai

1
@Kai Evet, Nexus 5'te kod değiştirilmemiş. Günlükleri kullanarak, konum hizmetleri başlangıçta kapalı olduğunda her zaman isabet ettiğini görüyorum RESOLUTION_REQUIRED. Sonra konumu kabul edip etkinleştirdiğimde, isabet ediyor SUCCESSve tamamen atlıyor onActivityResult(). NoVeya geri düğmesine basmak , diyaloğu bir saniyeliğine kaybolur, ardından yeniden yükleyip RESOLUTION_REQUIREDtekrar basar . İletişim kutusundan kurtulmanın tek yolu, uygulamayı kabul etmek veya kapatıp yeniden açmaktır.
pez

2
@pez, Google Play hizmetleri 7.5.74 ile Galaxy S4 üzerinde test edildi ve çalışıyor, iptal etmek RESOLUTION_REQUIRED'in çağrılmasına neden olmuyor. Benim önerim oyun hizmetlerini güncellemek ve tekrar denemek olacaktır. Bu başarısız olursa, başkalarının bu sorunla karşılaşıp çözmediğini görmek için yeni bir StackOverflow sorusu başlatın.
Kai

2
@Kai benim için çalıştı ama ya bir kullanıcı hayır tuşuna basarsa, diyaloğu tekrar nasıl gösterir veya hayır'a basıldığında oraya bir kod eklenir. Herhangi bir yardım çok takdir edilecektir.
Gurpreet singh

1
NOT: Aktiviteniz launchModeAYARLANAMAZ, singleInstanceaksi takdirde bu ÇALIŞMAZ. Diyalog asla görünmeyecek ve onActivityResultotomatik olarak çağrılacaktır. android:launchMode="singleInstance"Faaliyetiniz için VAR OLMAYIN AndroidManifest. Bunu 3 saat sonra çok zor bir şekilde öğrendim
ᴛʜᴇᴘᴀᴛᴇʟ

55

Evet / Hayır düğmelerini kullanmak isteyenler için kai'nin cevabına bazı değişiklikler eklemek istiyorum.

Faaliyetinizde bu sabiti beyan edin

protected static final int REQUEST_CHECK_SETTINGS = 0x1;

call settingsrequest()) (senin onStart içinde

public void settingsrequest()
    {
        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(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:
                        // 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(MainActivity.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;
                }
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
// Check for the integer request code originally supplied to startResolutionForResult().
            case REQUEST_CHECK_SETTINGS:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        startLocationUpdates();
                        break;
                    case Activity.RESULT_CANCELED:
                        settingsrequest();//keep asking if imp or do whatever
                        break;
                }
                break;
        }
    }

1
resmi belgelerden alınmıştır: Developers.google.com/android/reference/com/google/android/gms/… Yalnızca harita eklemeniz gerekiyorsa, bunu kullanmak için bu kitaplıkları eklemeniz gerekir (tüm oyun hizmetleri kitaplığını içe aktarmadan ): 'com.google.android.gms: play-services-maps: 9.0.2' compile 'com.google.android.gms: play-services-location: 9.0.2'
derleyin

bu iletişim kutusunun tıklama olayını nasıl işleyeceğimi ve iletişim kutusunda asla düğmesini göstermemeliyim
M.Yogeshwaran

ActivityOnResult'daki anahtar durumundan settingsrequest () satırını kaldırın .. Sorduğunuz bu mu ???
Veer3383

Hiçbir iletişim düğmesine tıklarsam hala bu iletişim kutusu sürekli olarak geliyor .. ActivityOnResult'daki anahtar durumundan settingsrequest () satırını zaten kaldırıyorum .. o zaman neden sürekli gösteriliyor?
Asmi

Projeyi inşa etmek için temizlemeniz gerekebilir.
Veer3383

25

LocationServices.SettingsApi artık kullanımdan kaldırıldı, Bu yüzden SettingsClient kullanıyoruz

    LocationRequest mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(10);
        mLocationRequest.setSmallestDisplacement(10);
        mLocationRequest.setFastestInterval(10);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        LocationSettingsRequest.Builder builder = new 
        LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);

Ardından, mevcut konum ayarlarının karşılanıp karşılanmadığını kontrol edin. LocationSettingsResponse görevini oluşturun:

        Task<LocationSettingsResponse> task=LocationServices.getSettingsClient(this).checkLocationSettings(builder.build());

Ardından Dinleyici ekleyin

task.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
            @Override
                    public void onComplete(Task<LocationSettingsResponse> task) {
                        try {
                            LocationSettingsResponse response = task.getResult(ApiException.class);
                            // All location settings are satisfied. The client can initialize location
                            // requests here.

                        } catch (ApiException exception) {
                            switch (exception.getStatusCode()) {
                                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                    // Location settings are not satisfied. But could be fixed by showing the
                                    // user a dialog.
                                    try {
                                        // Cast to a resolvable exception.
                                        ResolvableApiException resolvable = (ResolvableApiException) exception;
                                        // Show the dialog by calling startResolutionForResult(),
                                        // and check the result in onActivityResult().
                                        resolvable.startResolutionForResult(
                                                HomeActivity.this,
                                                101);
                                    } catch (IntentSender.SendIntentException e) {
                                        // Ignore the error.
                                    } catch (ClassCastException e) {
                                        // Ignore, should be an impossible 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;
                            }
                        }
                    }
                });

OnActivityResult eklendi

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
        switch (requestCode) {
            case 101:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        // All required changes were successfully made
                        Toast.makeText(HomeActivity.this,states.isLocationPresent()+"",Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        // The user was asked to change settings, but chose not to
                        Toast.makeText(HomeActivity.this,"Canceled",Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
                break;
        }
    }

SettingsClient bağlantısına bakın


1
SettingsClient Kullanarak stackoverflow.com/a/53277287 @BadLoser'ı kontrol edin
Ketan Ramani

İçe aktarılacak bağımlılığın adı nedir? Sembol Görevi çözülemiyor.
Denis

Buldum: uygulama 'com.google.android.gms: play-services-tasks: 16.0.1'
Denis

@Denis, implementation 'com.google.android.gms:play-services-location:16.0.0'onun yerine kullanabilirim .
CoolMind

25

Google haritalarına benzer mi çalışıyor?
Kaynak Kodu: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0

Build.gradle dosyasına Bağımlılık ekleyin:

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

VEYA

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

görüntü açıklamasını buraya girin

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

}

benim için zevk
Keshav Gera

1
Yayın Alıcısı
Gönderisine

Mükemmel çözüm.
Lalit Sharma

Teşekkürler Lalit Sharma
Keshav Gera

Lütfen bağlantıyı günceller misiniz, şimdi bozuk, bunun yerine kodu
GitHub'a gönderin

7

Ola Cabs, bu işlevselliği elde etmek için yeni yayınlanan Ayarlar API'sini kullanıyor. Yeni API'ye göre, kullanıcının aynı şekilde sorunsuz bir entegrasyon sağlayan konum hizmetlerini etkinleştirmek için ayarlar sayfasına gitmesine gerek yoktur. Daha fazla ayrıntı için lütfen aşağıyı okuyun:

https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi


bu veer3383 cevabı ile aynı görünüyor. yanlışsam lütfen beni düzeltin
rakesh kashyap

@rakeshkashyap evet aynı şey
MatPag

Aşağıdakileri yapmanın mümkün olup olmadığını bilmek istedim: * konum almak için bir zaman aşımı ayarlayın. * Gerekli tüm sensörler etkinse GPS ayarları API'sini kontrol edin ve mesajı buna göre gösterin. * Bu mümkünse, zaman aşımı nasıl ayarlanır? API'yi oluştururken böyle bir ayar bulamadım
rakesh kashyap

Merhaba, GPS'i Kapalı durumdan açtıktan sonra haritayı ikinci kez yüklemeyle ilgili sorun yaşıyorum, Lütfen herhangi biri bana yardım etsin: stackoverflow.com/questions/44368960/… Teşekkürler.
Jaimin Modi

3
SettingsAPIkullanımdan kaldırıldı, şimdi SettingsClient developer.google.com/android/reference/com/google/android/gms/… kullanıyorsunuz
Saik Caskey

7

Bağımlılık

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

kod

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentSender;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
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.LocationSettingsStates;
import com.google.android.gms.location.LocationSettingsStatusCodes;

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    public static final int REQUEST_LOCATION=001;

    GoogleApiClient googleApiClient;

    LocationManager locationManager;
    LocationRequest locationRequest;
    LocationSettingsRequest.Builder locationSettingsRequest;
    Context context;


    PendingResult<LocationSettingsResult> pendingResult;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            Toast.makeText(this, "Gps is Enabled", Toast.LENGTH_SHORT).show();

        } else {
            mEnableGps();
        }

    }

    public void mEnableGps() {
        googleApiClient = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
        googleApiClient.connect();
        mLocationSetting();
    }

    public void mLocationSetting() {
        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(1 * 1000);
        locationRequest.setFastestInterval(1 * 1000);

        locationSettingsRequest = new LocationSettingsRequest.Builder().addLocationRequest(locationRequest);

        mResult();

    }

    public void mResult() {
        pendingResult = LocationServices.SettingsApi.checkLocationSettings(googleApiClient, locationSettingsRequest.build());
        pendingResult.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
                Status status = locationSettingsResult.getStatus();


                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location
                        // requests here.

                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:

                        try {

                            status.startResolutionForResult(MainActivity.this, REQUEST_LOCATION);
                        } catch (IntentSender.SendIntentException e) {

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

        });
    }


    //callback method
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
        switch (requestCode) {
            case REQUEST_LOCATION:
                switch (resultCode) {
                    case Activity.RESULT_OK:
                        // All required changes were successfully made
                        Toast.makeText(context, "Gps enabled", Toast.LENGTH_SHORT).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        // The user was asked to change settings, but chose not to
                        Toast.makeText(context, "Gps Canceled", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
                break;
        }
    }


    @Override
    public void onConnected(@Nullable Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

4

Yalnızca "Konum için GPS kullan" yerine "Konum için GPS, Wi-Fi ve mobil ağları kullan" iletişim kutusunu elde etmek için Builder için birkaç Konum İsteği ekleyebilirsiniz.

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                .addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY))
                .addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_HIGH_ACCURACY))
                .setAlwaysShow(true);

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

Benim durumumda, "Konum için GPS, Wi-Fi ve mobil ağları kullan" cümlesini almak için PRIORITY_HIGH_ACCURACY kullanmak yeterlidir. Ancak gerçek cihazda çalışması garip ama simülatörde çalışmıyor. Simülatör cümlesinde, simülatör cihazında GPS olduğunu görmeme rağmen, başlangıçta her zaman "GPS kullan" yok.
2019

0

Kotlin'de şu kodu kullanın:

import android.app.Activity
import android.content.Intent
import android.content.IntentSender
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.google.android.gms.common.api.GoogleApiClient
import com.google.android.gms.common.api.PendingResult
import com.google.android.gms.common.api.Status
import com.google.android.gms.location.*

class MainActivity : AppCompatActivity() {
    private var googleApiClient: GoogleApiClient? = null
    private val REQUESTLOCATION = 199
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableLoc()
    }
    private fun enableLoc() {
        googleApiClient = GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(object : GoogleApiClient.ConnectionCallbacks {
                override fun onConnected(bundle: Bundle?) {}
                override fun onConnectionSuspended(i: Int) {
                    googleApiClient?.connect()
                }
            })
            .addOnConnectionFailedListener {
            }.build()
        googleApiClient?.connect()
        val locationRequest = LocationRequest.create()
        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
        locationRequest.interval = 30 * 1000.toLong()
        locationRequest.fastestInterval = 5 * 1000.toLong()
        val builder = LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest)
        builder.setAlwaysShow(true)
        val result: PendingResult<LocationSettingsResult> =
            LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build())
        result.setResultCallback { result ->
            val status: Status = result.status
            when (status.statusCode) {
                LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> try {
                    status.startResolutionForResult(
                        this@MainActivity,
                        REQUESTLOCATION
                    )
                } catch (e: IntentSender.SendIntentException) {
                }
            }
        }
    }
    override fun onActivityResult(
        requestCode: Int,
        resultCode: Int,
        data: Intent?
    ) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            REQUESTLOCATION -> when (resultCode) {
                Activity.RESULT_OK -> Log.d("abc","OK")
                Activity.RESULT_CANCELED -> Log.d("abc","CANCEL")
            }
        }
    }
}

0

Kullanıcı konumunu ön plana çıkarmak için lütfen çok basit çözümüme bakın.

  1. GPS Ayarı iletişim kutusu
  2. Canlı verilere sahip kullanıcı konumu.
  3. LocationUtility sınıfı, konum güncellemelerini duraklatmak / devam ettirmek için aktivite yaşam döngüsünün farkındadır.
  4. En son FusedLocationProviderClient ile konum

https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.