Merhaba arkadaşlar bu yazımızda android üzerinde konum belirleme üzerine bir uygulama yapacağız. Bu arada android üzerinden gelen bir özel kullanıma hitap eden uyarı bildirimi olan toast’ın nasıl kullanıldığını göreceğiz.Bu yazıyı okumadan önce uygulamayı test edecekleri telefonlarının GPS destekliyor ve GPS özelliğinin olmasına dikkat etmenizi tavsiye etmekteyim. Eğer böyle bir probleminiz varsa emulatörden bu uygulamayı ek uygulamaile test edebilirsiniz. Bu durumu konuya dahil etmiş bulunmaktayım. Uygulamamızda GPS verisini alıp ekranda anlık olarak değişimini göstereceğiz. GPS bilgi alımını açıp kapamalarda uyarılar vereceğiz ve bu arada Toast kullanımını öğrenmiş olacağız.

GPS hakkında kısa bir özet geçecek olursak;

GPS genelde ne olarak bilinir ?
– Bildiğiniz üzere GPS (Global Positioning System) , küresel konumlama sistemi olarakta bilinmektedir.  

GPS konumlamamızı nasıl yapmaktadır ? 
 GPS, kısaca yörüngedeki uydularımızın dünyayı belirli ölçeklere bölmesi ve birbirleriyle olan doğrulama uzaklığı ile bizim konumumuzu belirlemesidir.

Destekleyen aygıtlar bunu nasıl gerçekleştirmektedir ?
–  Konumlama verisini çekebilmek için uydudan anlık bilgi istemektedir. Bu bilgi aslında birçok uydunun birbirleriyle pozisyon doğrulaması gerçekleştirmesiyle konum kullanıcıya aktarılır ve kullanıcı bunu herhangi bir uygulamasında yada bilgilendirme amaçlı kullanabilir. Ancak şöyle bir dezavantajı vardır birden cok anlık bilgi alımlarında kimi zaman cihazın yavaş kalmasına sebeb olabilir.Birde tam noktasal konumlama yapamayabilir belirli sapmaları gerçeklemektedir.Tabikide %97’lere varan bir doğruluk ile çalışmaktadır.

GPS üzerinden veri alışverişi ücretlimidir ?
– Kesinlikle değildir. Tamamen ücretsizdir.  

Yapmak istediğimiz uygulamanın amacı ?
– Anlık veri alıp bunu bilgilendirme amacıyla ekranda konumlama metoduyla göstermek. Birbaşka uygulamamızda bir ev etkinliği için yapılmış QR kod uygulaması yapacağım. Onda da konumumuz QR kodun bulunduğu yerde ise kişi bir bilgilendirme uyarısı alacak ve eve girişi için gerekli olan maili atacaktır.Yakın zaman içinde takip ediniz.

Sıra geldi arkadaşlar android üzerinde bunu nasıl gerçekleyeceğimize öncelikle bir dipnot vermek istiyorum. Uygulamamızı ilk olarak destekleyen bir telefon üzerinde gerçekleştireceğim ardından , destekleyen telefonu olmayan yada öğrenme aşamasında ilk olarak emülatörü tercih eden arkadaşlar için anlatacağım.

Şimdi ilk olarak bir android proje dosyası oluşturuyoruz ve projemize başlıyoruz.

NOT: Uygulamamızda sadece 1 adet TextView olacak ve 1 aktif xml kullanacağız. Arzu isteğinize göre buton koyup siz bastıkca gelmesini isteyebilirsiniz bunuda gerçeklemeniz gayet kolay. Daha önceki konularımda buton konusu fazlaca bulunuyor.

GPS bilgilerimizi alabilmemiz için , ilk olarak bir konum yöneticisi oluşturmalıyız. Bunuda açıklayalım nasıl :

LocationManager konumYoneticisi = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

konumYöneticisi , LocationManager sınıfı altında mevcut konum bilgisini çağırır.
Şimdi konum bilgimizi sürekli dinleyecek olan sınıfı , konum dinleyicimizi oluşturuyoruz. Bu sınıf altında 3 adet override’ımız var.
Override , daha önce bir class tarafından oluşturulmuş fonksiyonların class’ı çağırmamızla gelen miras yapısının bozulup önceliğinin kendi oluşturacağımız fonksiyonlar olduğunu ve bilgilerini bu fonksiyonlar üstünden alacağını belirliyoruz.

LocationListener’ımızla beraber 3 adet fonksiyonumuz geliyor ve bunlar birisi
onStatusChanged      : GPS Servisinin durum bilgisi
onProviderEnable     : GPS ‘in aktif duruma getirildiği bilgisi
onProviderDisable    : GPS ‘in pasif duruma getirildiği bilgisi 
onLocationChanged : GPS’ten alınan konum bilgilerini içerir.  

LocationListener konumDinleyicisi = new LocationListener() {

 @Override
 public void onStatusChanged(String provider, int status, Bundle extras) {

 }

 @Override
 public void onProviderEnabled(String provider) {

 }

 @Override
 public void onProviderDisabled(String provider) {

 }

 @Override
 public void onLocationChanged(Location loc) {

}
};

Peki biz bunları nasıl kullanacağız ??
– onLocationChanged fonksiyonumuz ile bunu sağlayacağız.

Konum bilgilerimiz:
Latitude = Enlem
Longtitude = Boylam 

Bu bilgileri onLocationChanged altında bilgilerimizi cağırdığımız onLocationChanged( Location loc ) ‘un yaptığını söyleyebiliriz.
Bu bilgilerimizi çekebilmemiz için :

loc.getLatitude();
loc.getLongitude();

bu iki fonksiyonumuz bilgilerimizi getirmektedir. Artık herhangi bir şekilde görsel olarak aktarmamız yetecektir.

Son olarak yöneticimiz ile dinleyicimizi birbirinede bağlarsak tamamlamış olacağız.

konumYoneticisi.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, konumDinleyicisi);

Bu komutumuz herşeyi birbirine bağlamaktadır.
İşin .java olan kısmını hallettik şimdi bu gps bilgisini alabilmemiz için AndroidManifest.xml‘de izin işlemlerini yapmamız gerekmektedir.

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

Bu kodumuzun amacı tamamen konum bilgisini kullanıcıya izin vermesidir.

Şimdi bu konuda anlaştığımıza göre sıra geldi Toast ( Uyarı ) konumuza bu kısım gayet kolay olup uygulamalarda sık sık görülmektedir. Android kullanıcıları bunu çok sevmektedir. Sadece bir adet dez avantajı vardır. Oda belirli süre ekranda kalmasından dolayı ard arda gelen uyarı bilgilerini gecikmel göndermesidir.

Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show();

Toast altında makeText oluşturuyoruz. getApplicationContext‘in yaptığı tamamen class’ımızı belirtmesidir. Text kısmına String bir bilgi girmemiz yeterlidir. LENGTH_SHORT kısmında yazının boyutunu belirlemekteyiz. İki seçeneğimiz bulunmaktadir .
1. LENGTH_SHORT : küçük boyutta
2. LENGTH_LONG   : büyük boyutta göstermektedir.

activity_main.xml altında bir small TextView koyduktansonra projemizi tamamlayacak olursak :

NOT : Projemizi çalıştırdığımızda çalışmıyorsa GPS veri alımını açmamız gerekmektedir. Aksi halde çalışmayacaktır.

MainActivity.java

[codesyntax lang=”php”]

package com.example.gpsdeneme;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	public void onCreate(Bundle savedInstanceState)

	{

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
		final String gpsAcildi = "GPS Acıldı";
		final String gpsKapatildi = "GPS Kapalı";

		final TextView konumText = (TextView)findViewById(R.id.textView2);

		LocationManager konumYoneticisi = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

		LocationListener konumDinleyicisi = new LocationListener() {

			@Override
			public void onStatusChanged(String provider, int status, Bundle extras) {

			}

			@Override
			public void onProviderEnabled(String provider) {
				Toast.makeText( getApplicationContext(),gpsAcildi,Toast.LENGTH_SHORT).show();
				konumText.setText("GPS Veri bilgileri Alınıyor...");
			}

			@Override
			public void onProviderDisabled(String provider) { 
				 Toast.makeText( getApplicationContext(),gpsKapatildi,Toast.LENGTH_SHORT).show();
				 konumText.setText("GPS Bağlantı Bekleniyor...");
			}

			@Override
			public void onLocationChanged(Location loc) {
				loc.getLatitude();
				loc.getLongitude();

				String Text = "Bulunduğunuz konum bilgileri : \n" +"Latitud = " + loc.getLatitude() +"\nLongitud = "+ loc.getLongitude();
				konumText.setText(Text);
			}
		};

		konumYoneticisi.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, konumDinleyicisi);
		}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
}

[/codesyntax]
activity_main.xml 
[codesyntax lang=”php”]

<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" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/gpsBaglanti"
        tools:context=".MainActivity" />

</RelativeLayout>

[/codesyntax]

string.xml

[codesyntax lang=”php”]

<resources>

    <string name="app_name">GPSDeneme</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">MainActivity</string>
    <string name="gpsBaglanti">GPS Bağlantı Bekleniyor</string>

</resources>

[/codesyntax]

AndroidManifest.xml

[codesyntax lang=”php”]
<manifest xmlns:android=”http://schemas.android.com/apk/res/android&#8221;
package=”com.example.gpsdeneme”
android:versionCode=”1″
android:versionName=”1.0″ >
<uses-sdk
android:minSdkVersion=”8″
android:targetSdkVersion=”15″ />
<uses-permission android:name=”android.permission.ACCESS_FINE_LOCATION”></uses-permission>

<application
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name”
android:theme=”@style/AppTheme” >
<activity
android:name=”.MainActivity”
android:label=”@string/title_activity_main” >
<intent-filter>
<action android:name=”android.intent.action.MAIN” />

<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>

</manifest>
[/codesyntax]
Sonuç olarak test ediyoruz..

Arkadaşlar bir yazımızında sonuna gelmiş bulunmaktayız. Gönül isterdi bir GPS modül üzerinden aldığım veriyle yapmak ancak öğrenci olmamdan dolayı temin etmekte sıkıntı yasıyorum. Şuanlık bu işimizi görecektir. Kendinize iyi bakınız. Sorularınız için mail’de atabilirsiniz İyi çalışmalar.

______
Gökhan TARIM
tarim.gokhan@gmail.com