Merhaba Arkadaşlar,
Bu yazımda Sizlere Android uygulama içerisinde Google Maps üzerinde çalışan bir uygulama içerisinden kullanıcının bulunduğu noktaya Marker eklerken yaşadığımız en büyük sorunu anlatacağım : KULLANICININ KONUM SERVİSLERİ KAPALI VE MARKER EKVATOR’A EKLENİYOR!
Resimdeki uygulamada Konum butonuna basıldığında kullanıcının bulunduğu konuma MARKER ekleyerek, zoom yapıyor. Faat Kullanıcının konum izinleri kapalıysa 0,0 noktasına yani ekvator’a Marker ekleyerek yanlış bilgilendirme yapıyor.
Oysa ki; bizim yazılımcı olarak istediğimiz görüntü: Konum İzinleri’nin açık olup-olmadığını kontrol edecek bir yapı. Görselle anlatacak olursak:
İşte bu yapıyı sağlamak İçin Yapacaklarımız:
Öncelikle Konum butonunu layout’ta ekledikten sonra class’ımıza gelip, tanımlama ve atama işlemlerini yapıyoruz:
Button btnKonumum=(Button)findViewById(R.id.button4);
Butonu tanımladıktan sonra OnClick Listener oluştururken hata alan arkadaşlar tanımlamayı final olarak yapabilirler.
final Button btnKonumum=(Button)findViewById(R.id.button4);
Daha sonra tanımladığımız btnKonumum butonuna, Onclick Listener ataması yapıyoruz.
btnKonumum.setOnClickListener(new View.OnClickListener() {
@Override
//Override, daha önceden yazılmış bir fonksiyonun yapısını değiştirmek için kullanılır, burada kullanmamızın bir anlamı yok ama //yine de kalsın.
public void onClick(View v) {
//buraya onClick olayında çalışacak kodlarımızı yazacağız
}
});
Şimdi de Onclick Fonksiyonumuzun içerisini dolduralım:
Öncelikle LocationManager sınıfından Location Servislerinin özelliklerini taşıyan bir nesne oluşturuyoruz.
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Ve bu oluşturduğumuz nesne üzerinden IF-ELSE yapısı ile kontrolümüzü gerçekleştiriyoruz:
if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
//GPS Provider Yerine NETWORK PROVIDER kullandık, androidin son cihazları network üzerinden de iyi bir alt yapı sunuyor.
// Konum Bilgisi Açık İse Marker’ı bu satırlarda ekliyoruz.
mMap.addMarker(new MarkerOptions().position(new LatLng(BackgroundService.lastLattitude,BackgroundService.lastLongitude)).title(“Şuanki Konumunuz”).icon(BitmapDescriptorFactory.fromResource(R.drawable.toothicon)));
LatLng coordinateKonumum = new LatLng(BackgroundService.lastLattitude,BackgroundService.lastLongitude);
mMap.moveCamera(CameraUpdateFactory.newLatLng(coordinateKonumum));
mMap.animateCamera(CameraUpdateFactory.zoomTo((float) 15.00),3000, null);
}
else{
showGPSDisabledAlertToUser();
//Konum Bilgisi Kapalı İse Çağırılacak Fonksiyon.
}
Yukarıdaki fonksiyonun ekran görüntüsü:
En son olarak da showGPSDisabledAlertToUser fonksiyonumuzu yazalım ve artık bitsin bu yazı:
private void showGPSDisabledAlertToUser(){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage(“Konumunuzu Belirlemek İçin Konum Ayarlarınızı Etkinleştirmeniz Gerekiyor. Konum Ayarlarınızı Etkinleştirmek İstiyor Musunuz? “)
.setCancelable(false)
.setPositiveButton(“Evet”,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
});
alertDialogBuilder.setNegativeButton(“Hayır”,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}