BSM447 – MOBİL UYGULAMA GELİŞTİRME Öğr. Gör. Nevzat TAŞBAŞI 8. Hafta
Android Konum Uygulamaları Android projelerinde konum bilgilerini elde etmek ve bunları göstermek için farklı yöntemler mevcuttur. Android projelerinde konum bilgileri GPS kullanılarak kesin olarak öğrenilebilir. GPS kullanıldığında bulunulan enlem ve boylam değerleri öğrenilerek istenilen yerde kullanılabilir.
Android Konum Uygulamaları Eğer projenin çalıştığı cihazda bir Sim kart takılı ise GSM operatörlerinden alınan bilgi ile konum bulunmaya çalışılabilir. GPS bilgisi kadar kesin sonuçlar vermeyebilir. [2] Yine tam olarak kesin konum bilgisi vermeyen Wifi ağları kullanılarak konum tahmini yapılabilir. [3]
Android Konum Uygulamaları GPS üzerinden veri almak veya GSM operatörün verilerini alabilmek için öncelikle projemize gerekli izinleri almamız gerekmektedir. Bunun için internet ve GPS, GSM operatöründen veri alma izinlerinin tanımlanması gerekmektedir. İnternet izni almak için AndroidManifest dosyasında internet ve GPS izinleri eklenmelidir.
Android Konum Uygulamaları İnternete bağlanmak için <uses-permission android:name= "android.permission.INTERNET"/> Eğer GPS verisi kullanılacaksa projeye aşağıdaki iznin eklenmesi gerekmektedir. <uses-permissionandroid:name= "android.permission.ACCESS_FINE_LOCATION"/> Eğer kesin olmayan konum bilgisi ile çalışılacaksa <uses-permissionandroid:name= "android.permission.ACCESS_COARSE_LOCATION"/> İzinlerin alınması gereklidir.
Android Konum Uygulamaları GPS verilerini alabilmek için öncelikle locationManager sınıfından bir nesne tanımlanmalıdır. LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); GPS verisi almak için Provider olarak LocationManager.GPS_PROVIDER seçilir. Konum yönetici ile ilgili oluşacak olayları dinlemek için LocationListener arayüzünden miras almak gerekecektir.
Android Konum Uygulamaları LocationListener içerisinde onLocationChanged metodu ile cihazın konumunun değişmesi sonucunda oluşur. Parametre olarak gelen location değerinde location.getLatitude() ile location.getLongitude() metodları ile enlem ve boylam değerleri geri döndürülecektir. onStatusChanged metodu servis durumu değiştiğinde gerçekleşen metotdur. onProviderEnabled ile onProviderDisabled metotları GPS konum servisi açıldığında veya kapatıldığında oluşan metotlardır. Konum öğrenme adresi: http://itouchmap.com/latlong.html
Android Konum Uygulamaları boolean servis = <locationManagersınıfı> .isProviderEnabled(LocationManager.GPS_PROVIDER); if (!enabled) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } Konum öğrenme adresi: http://itouchmap.com/latlong.html
Google API’si alma Oluşturacağımız projede Google haritalarını kullanmak için öncelikle Google’dan uygulama anahtarı almamız gerekmektedir. Bunun için Command Prompt açılır ve java jdk’sının kurulduğu klasöre gidilir. Bu klasörün altındaki bin klasörüne geçilir.
Google API’si alma
Google API’si alma Bu klasör altında bulunan keytool programı -list -v -alias androiddebugkey -keystore "C:\Users\<Kullanıcı_ Adınız>\.android\debug.keystore -storepass android -keypass android" keytool.exe -list -v -alias androiddebugkey -keystore C:\Users\Admin\.android\debug.keystore -storepass android -keypass android parametreleri ile çalıştırılır.
Google API’si alma
Google API’si alma Gelen bilgilerden MD5,SHA1 bilgilerini kopyalıyoruz. Daha sonra https://cloud.google.com/console#/project adresine giderek kullanıcı adı ve parolamızı giriyoruz.
Google API’si alma İlk defa giriyorsanız <API Project komutuna tıklayarak ana sayfaya gidilir.
Google API’si alma Yeni proje oluşturmak için CREATE PROJECT butonu tıklanır.
Google API’si alma Açılan pencere projemize bir isim verdikten sonra eşsiz bir ID belirledikten sonra Create butonuna tıklıyoruz. Google ID değerini kontrol ettikten sonra doğrulama işlemi için cep telefonunuza mesaj gönderme işlemi gerçekleştirir. Cep telefonunuza gelen doğrulama kodunu girdikten sonra Project oluşacaktır.
Google API’si alma Proje içerisinde kullanılacak API’ler APIs&auth sekmesi tıklanarak açılan pencereden ON durumuna getirilir.
Google API’si alma Daha sonra APIs&auth sekmesi altında yer alan API sekmesindeki Registered Apps tıklanır.
Google API’si alma Açılan isim değeri girildikten sonra Platform seçeneğinden Android seçilir. Daha sonra Package name kısmına oluşturacağınız projecenin paket ismini girdikten sonra daha önce öğrendiğimiz SHA1 değeri girilerek işlem bitirilir.
Fragment ile Harita Gösterimi Projeye harita gösterecek bileşen eklemek için önce bileşenler için gerekli kütüphaneler eklenir. Bunun için ağaç yapısında proje ismi üzerinde sağ tıklanır. Açılan menüden properties seçilir.
Fragment ile Harita Gösterimi
Fragment ile Harita Gösterimi Açılan pencerede Android seçilir. Library kısmındaki Add… butonu tıklanır.
Fragment ile Harita Gösterimi Açılan pencere google-play_service_lib eklenir. Daha sonra tekrar proje üzerinde sağ tıklanır.
Fragment ile Harita Gösterimi Açılan pencerede Android tools sekmesinden Android Support Library seçeneği tıklanır. Android Support Library eklenir. Lisans kabul edildikten sonra kurulum başlatılır.
Fragment ile Harita Gösterimi Daha sonra harita kullanımı için gerekli izinler alınır. <permission android:name="com.example.androidmapv2ex.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> <uses-permission android:name="com.example.androidmapv2ex.permission.MAPS_RECEIVE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Fragment ile Harita Gösterimi Harita için oluşturduğumuz api değeri burada kullanılacaktır. <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="api_değeri"/>
Fragment ile Harita Gösterimi Harita gösterimi için Fragment bileşeni kullanılacaktır. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <fragment android:id="@+id/map" class="com.google.android.gms.maps.SupportMapFragment"/> <TextView android:id="@+id/yer_bilgisi" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
Fragment ile Harita Gösterimi Oluşturulan proje Activity sınıfından değil de FragmentActivity sınıfından miras alacaktır. Java kodları içerisinde GoogleMap haritaadı = ((MapFragment) getFragmentManager().findFragmentById(R.id.haritaidisi)).getMap(); şeklinde projeye dâhil edilir. Bu bileşenin map.addMarker() metodu ile LatLngTüründe veri ile gösterilecek marker belirlenir. MarkerOptions().position değerine haritada gösterilecek nokta belirtilir. Bu marker haritaya eklenir.
MapView ile harita gösterimi İstenirse fragment yerine MapView elemanı ile harita gösterilebilir. Bu bileşen com.google.android.maps.MapView ile eklenir. Oluşturduğumuz api android:apiKey="adpşdegeri" şeklinde yazılır.
MapView ile harita gösterimi MapView bileşenini projemizde kullanabilmek için projemizin Activity sınıfı yerine MapActivity sınıfından miras alması gerekmektedir. Bileşen proje içerisinde MapView haritaadı = (MapView) findViewById(R.id.mapidisi);
Android Konum Uygulamaları Kaynaklar: [1] http://www.ahmetcebisli.net/2011/07/android-listview/ [2]https://gelecegiyazanlar.turkcell.com.tr [3] http://www.akilliyazilim.org/androiddersleri/android-dersleri-30android-location-api.html