Android Programlama - Konum Bulma Ve Map İşlemleri

Başlatan Fuul oyun, 12 Nisan 2016, 03:41:29

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.


                        
Telefonlara GPS özelliği eklendikten sonra lokasyon tabanlı uygulamalar oldukça popüler hale gelmeye başladı. Foursquare vb uygulamaların yakaladığı başarıları söylemeye bile gerek yok. Artık neredeyse her uygulamanın konumunuz ile ilgili bir bağlantısı oluyor. İş bu şekilde olunca bizimde yapacağımız uygulamada konum servislerini kullanmamız kaçınılmaz olacaktır. Peki bunu android de nasıl yaparız bakalım.
   
   Harita üzerinde konum göstermek istiyorsak Google'ın SDK lerinden faydalanmak zorundayız. SDK seçiminizi nasıl yapacağınıza dair ayrıntılı bir yazı yazmıştım ona göz atabilirsiniz
   
   Linklerin Görülmesine İzin Verilmiyor Üye ol Veya Giriş Yap
   
   Google SDK mızı indirdiğinizi ve yeni bir proje oluşturduğumuzu varsayarak yapılacak işlemlere geçiyorum.
   
   Android programlamada en çok kullanılan terim kuşkusuz Activity terimidir. Activity çeşitleri vardır ve her birinin ayrı işlevleri vardır. Biz harita üzerinde işlem yapacağımız için uygulamamız MapActivity olacak.
   
   Proje oluştuğunda standart olarak Activity şeklinde oluşacaktır. Siz bunu MapActivity olarak değiştireceksiniz.
   
   yanlış: public class GPSanasayfa extends Activity
   doğru: public class GPSanasayfa extends MapActivity
   
   Daha sonra ihtiyacımız olacak bu MapActivity içerisinde kullanacağımız bir kaç değişkene ihtiyacımız olacak onlara geçmesen önce sayfamıza bir adet MapView eklememiz gerekli. Şuanda bize sadece bir adet MapView yetecektir.
   
   Değişkenlerimize geçelim.
   
   
[Seç][/url]MapView mapView;
   MapController mc;
   private MyLocationOverlay myLocOverlay;
   private String provider;
   private LocationManager lm;
   Eklemiş olduğumuz mapView değişkeni, sayfamıza eklediğimiz MapView kontrolüne ulaşmamızı sağlayacak.
   
   MapController ise bize haritamız üzerinde zoom yapmamızı sağlayacak.
   
   MyLocationOverlay kontrolü bize MapActivity nin sağlamış olduğu güzelliklerden birisi. Konum tabanlı uygulamalarda o an bulunduğumuz noktayı gösteren küçük bir mavi yuvarlak olur. İşte bu location overlaydir.
   
   Provider değişkenini konum sağlayıcımızı belirlemek için kullanacağız.
   
   LocationManager ise konumumuzu kontrol etmek için kullanılacak bir değişkendir.
   
   İhtiyacımız olan değişkenleri tanımladıktan sonra onCreate methoduna geçiyoruz. onCreate methodu uygulama açılışında ilk çalışan kısımdır. Buraya yazılan kodlar uygulamanın açılışında çalışır. Bu kısım telefonun internet erişimi var mı ya da GPS i aktif mi gibi kontroller yapılabilir. Siz isterseniz bu kontrolleri ekleyebilirsiniz.
   
   İlk iş olarak yukarıda tanımladığımız mapView değişkeni ile sayfamıza eklediğimiz mapView kontrolü arasında iletişim kurmak.
   
   
[Seç][/url]mapView = (MapView) findViewById(R.id.mapView1);
   Artık sayfamıza eklediğimiz mapview e bu değişken sayesinde ulaşabileceğiz.
   
   Şimdide zoom özelliklerimizi tanıtalım mapview'ımıza.
   
   
[Seç][/url]mc = mapView.getController();
       mapView.setBuiltInZoomControls(true);
       mc.setZoom(15);
   Zoom kontrolünü aktif ettim ve standart olarak 15 zoom değeri belirledim. Siz isteğinize göre değiştirebilirsiniz.
   
   
[Seç][/url]lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
       Criteria criteria = new Criteria();  
         provider = lm.getBestProvider(criteria, false);
   Location manager ile uygulamamızın lokasyon servislerinden faydalanacağımızı belirtiyoruz ve bize o an erişim olan en iyi konum sağlayıcıyı seçmesini söylüyoruz. Konum sadece GPS üzerinden değil normal internet bağlantısı üzerinden de alınabilmektedir. Kapalı bir mekandaysak WiFi üzerinden konum bulmak GPS'e göre daha sağlıklı olacaktır.
   
   
[Seç][/url]Location location = lm.getLastKnownLocation(provider);
   Bu kısımda ise bilinen en son konumu location değişkenimize atıyoruz. Location değişkeni longitude ve latitude olmak üzere GPS koordinatları içerir ve noktasal konum gösterir.
   
   Bu kısımdan sonra devam etmeden önce yukarıya eklememiz gereken küçük bir kod olacak. Konumuzun değişip değişmediğini anlık olarak kontrol etmek için Location Listener denilen bir method var. Bunu activitymize ekliyoruz.
   
   
[Seç][/url]public class GPSanasayfa extends MapActivity implements LocationListener
   Bu küçük ekleme bize 4 farklı kontrol mekanizması kazandıracak.
   - onLocationChanged (lokasyon değiştiği zaman çalışır)
   - onProviderDisabled (konum sağlayan servis pasif olduğu zaman çalışır)
   - onProviderEnabled (konum sağlayan servis aktif olduğu zaman çalışır)
   - onStatusChanged (durum değişikliklerinde çalışır)
   
   Bize en gerekli olan şüphesiz onLocationChanged dir. Konum değiştiği zaman buna göre tekrar haritamızı güncellememiz gerekir.
   
   Devam edelim
   
   
[Seç][/url]if (location != null) {
           onLocationChanged(location);
            }
   location değişkenimiz herhangi bir gps koordinat bilgisi içeriyorsa onLocationChanged fonksiyonuna bilgiyi gönderiyoruz. Bakalım bu fonksiyon lokasyon bilgimizi ne yapacak.
   
   
[Seç][/url]public void onLocationChanged(Location location) {
         double lat = location.getLatitude();
         double lng = location.getLongitude();
   }
   Bu fonksiyon parametre olarak bizim gönderdiğimiz location değişkeni içerisindeki koordinat bilgilerini alıyor. Koordinatlar virgüllü sayılar oldukları için double değişkeni ile tanımlıyoruz. Artık latitude ve longitude bilgilerini aldık ve kişinin bulunduğu konumu biliyoruz.
   
   Peki harita üzerinde nasıl göstereceğiz ? Bakalım...
   
   MapActivity içinde onResume ve onPause olmak üzere iki fonksiyon daha var. Bunlar adından da anlaşılacağı gibi activity devam ettiği sürece çalışan ya da activity durdurulduğu zaman çalışan iki fonksiyon. Activitymiz çalıştığı sürece biz konum bilgisini güncellemeliyiz. Bu süre içerisinde kullanıcı hareket halinde olabilir ve konumu sürekli değişiyor olabilir.
   
   
[Seç][/url]@Override
     protected void onResume() {
        super.onResume();
        lm.requestLocationUpdates(provider, 400, 1, this);
        myLocOverlay = new MyLocationOverlay(GPSanasayfa.this, mapView);
        myLocOverlay.enableMyLocation();
   
       mapView.getOverlays().add(myLocOverlay);
       myLocOverlay.runOnFirstFix(new Runnable() {
          public void run() {
             mc.animateTo(myLocOverlay.getMyLocation());
              }
       });
     
       mapView.postInvalidate();
       
        
     }
   requestLocationUpdates ile konumumuzu güncel tutuyoruz. Sağlayıcımızı belirtiyoruz (provider) , ne kadar sürede konum bilgisini tekrar edeceğini milisaniye cinsinden belirtiyoruz (400) , ne kadarlık bir menzil bizim için yeni bir konum demektir onu belirtiyoruz (1) , son olarakta hangi activityde tekrar edeceğini belirtiyoruz (this) .
   
   Yukarıda belirtmiş olduğum location overlay (harita üzerinde konumumuzu gösteren mavi nokta) ile activitymiz üzerindeki mapviewi ilişkilendiriyoruz. Ve Location overlay'ın konum bilgimizi kullanmasını sağlıyoruz (enableMyLocation()).
   
   Haritamıza location overlayımızı ekliyoruz ve haritanın şuanki konumumuza hareket etmesini yani sayfayı ortalamasını sağlıyoruz.
   
   Son olarak posInvalidate() ile haritamızın görünümünü yeniliyoruz.
   
   Map Activitymiz çalıştığı süre boyunca bu kısımdaki kodlar çalışacaktır. Activitymiz durduğu anda ise onPause çalışacaktır. Şimdi ona bakalım.
   
   
[Seç][/url]@Override
     protected void onPause() {  
        super.onPause();
       lm.removeUpdates(this);
       myLocOverlay.disableMyLocation();
     }
   RemoveUpdates ile artık konum bilgisi istemiyoruz güncelleme diyoruz
   disableMyLocation() komutu ile de benim konumumu kullanma adam ol diyoruz
   
   Uygulamamız hazır. Emulator üzerinde GPS olmadığı için bilgisayar üzerinde programımızı sağlıklı bir şekilde test etmek ne yazık ki mümkün değil. DDMS yardımı ile Emulator Control sekmesinden el ile koordinat bilgisi girerek test etmek mümkün ancak yinede cihazdaki kadar sağlıklı sonuç verdiğini düşünmüyorum.
   
   Manifest dosyamıza gereken izinleri vermeyi unutmuyoruz
   
   
[Seç][/url]<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
   
   <uses-library
         android:name="com.google.android.maps"
         android:required="true" >
       </uses-library>
   Aklınıza takılan kısımda sorabilirsiniz.
   
   Yazı tamamen bana aittir paylaşırken kaynak belirtmeyenin telefonu brick olsun
   
   Kaynak : Linklerin Görülmesine İzin Verilmiyor Üye ol Veya Giriş Yap
   
                     
                  
                  

Linkback: Android Programlama - Konum Bulma Ve Map İşlemleri
  • Gösterim 1,649 
  • Android Eğitim
  • 0 Yanıtlar




Paylaş whatsappPaylaş facebookPaylaş linkedinPaylaş twitterPaylaş myspacePaylaş redditPaylaş diggPaylaş stumblePaylaş technoratiPaylaş delicious

Benzer Konular (5)


İçerik sağlayıcı paylaşım sitesi olarak hizmet veren Replikacep.com sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur.Replikacep.com hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.
Footer menü
Hakkımızda
Bize Ulaşın
Biz Kimiz
Hizmetlerimiz