31.12.2016 Views

Mobil Uygulama Ders Notları – v0.5

mobil-uygulama-ders-notu-v05

mobil-uygulama-ders-notu-v05

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

İçindekiler<br />

<strong>Mobil</strong> <strong>Uygulama</strong> <strong>Ders</strong> <strong>Notları</strong> <strong>–</strong> <strong>v0.5</strong><br />

Not: Belgedeki örnekler Android 2.2 , Java jdk1.8.0_102 sürümüyle hazırlanmıştır.<br />

1-Android mobil uygulama geliştirme ortamı kurulumu<br />

1.1-Java<br />

- http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html<br />

Adresinden dökümandaki versiyon indirilir.Ardindan JAVA_HOME tanımlaması yapılır.<br />

Bilgisayarım-> Özellikler -> Gelişmiş Sistem Ayarları -> Oram Değişkenleri -> Yeni<br />

Anahtar : JAVA_HOME Değer : “C:\Program Files\Java\jdk1.8.0_102\jdk1.8.0_102”<br />

1.2-Android Studio <strong>–</strong> IDE<br />

-https://developer.android.com/studio/index.html<br />

Buradan; android-studio-bundle-145.3360264-windows.exe (Includes Android SDK (recommended)) indirilir.<br />

Kurulumdan sonra;<br />

C:\Users\user\$USER_NAME default kullanıcı dizinine aşağıdaki dosyalar oluşturulur.Buradaki $USER_NAME<br />

değeri sizin açtığınız kullanıcı adıdır.<br />

.android<br />

.AndroidStudio2.2<br />

.gradle<br />

Bu dosyalar Android Studio’nun kullanıcı bazlı configrasyon dosyalarıdır.<br />

1.3-SDK<br />

SDK temelde framework’tür.<br />

1.2 maddesindeki paket indirilirse Android Studio ile birlikte kurulur.Kurulumdan sonsa disk içerisindeki default<br />

yeri; “C:\Users\user\$USER_NAME\AppData\Local\Android\sdk” şeklindedir.<br />

2-Sanal Cep Telefonu Oluşturma<br />

Tools->Android->AVD Manager menusunden AVD Android Device Manager ile sanal çep telefonu<br />

oluşturulur.Oluşturulan sanal cep telefonu emulatordür.Sanal cep telefonu oluşturabilmek için açık proje olması<br />

gereklidir.Aksi durumda bu menu pasiftir.<br />

Sanal cep telefonununu daha verimli ve hızlı kullanabilmek için;<br />

-İşlemcinin sanallaştırma desteğininin (VT ) BİOS’dan enable yapılması gerekir.<br />

-INTEL HAXM surucusunun yuklu olması gerekir.<br />

Bu iki bileşen sisteminizde aktif/kurulu değilse sanal cep telefonu oluştururken gerekli uyarıları alırsınız.<br />

3-Hızlı Giriş<br />

Yüzme öğremenin ilk adımı ıslanmaktır.Hata yapmaktan korkmayın, isteksiz olmaktan korkun.<br />

3.1-MerhabaDunya<br />

3.1.1-merhaba-dunya-uygulaması<br />

Aşağıdaki ekran görüntüsünün yanında verilen kodlardan anlaşılacağı üzere, iki önemli dosya<br />

mevcuttur.Bunlardan birincisi kullanıcının gördüğü, frontend şeklinde tanımlanan, uygulamanın grafik arayuzunu<br />

oluşturan res\layout\activity_main.xml dosyasıdır.<br />

İkinci dosya ise; kullanıcı aktivitelerini işleyen ve tekrardan grafik arabirime dönütler gönderen, backend şeklinde<br />

tanımlanan MainActivity.java dosyasıdır.


2 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

1-Merhaba Dünya <strong>Uygulama</strong>sı<br />

Ekran Görüntüsü<br />

3.2-MerhabaDunya Build apk<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

MainActivity.java<br />

public class MainActivity extends AppCompatActivity {<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

}<br />

}<br />

Build -> Generate Signed Apk -> Key oluşturulur, ardindan apk dosyasının kaydedileceği yer gösterilir.<br />

4-Android İşletim Sistemi Mimarisi<br />

4.1-<strong>Uygulama</strong> aslında nerede çalışıyor ?<br />

4.2-JVM / Dalvik ve ART<br />

Java’nın Gücü Nereden Geliyor ?<br />

Java Platform Bağımsızdır.Java uygulamaları derlendirkten sonra diğer bilindik uygulamaların aksine direkt<br />

bilgisayarın işlemcisinden çalışmak yerine Java Sanal makinasında çalışırlar.Bu nedenler geliştirdiğiniz uygulamları<br />

Windows yada Açık Kod işletim sistemlerine Java Sanal Makinası kurarak çalıştırabilirsiniz.Bu java’nın güçlü yönüdür.<br />

PC mimarisinde Java Sanal Makinası kullanılmaktadır.Android ise Dalvik ile başlayan yolcuğuna Android 4.4<br />

Kitkat 4.4 sürümünden sonra ART ile devam etmektedir.<br />

“Android'deki uygulamalar daha önce Dalvik adı verilen Java emülatöründe çalıştırılıyordu. Java dilinde<br />

yazılan bu uygulamalar, Dalvik ile makine diline çevirilip donanıma aktarılıyordu. Bu da performansı etkiliyordu.<br />

ART(Android Run Time) yapısıyla beraber uygulama kurulurken derleme yapılıp önbelleğe alındığı için uygulamaları<br />

başlattığınızda derleme işlemi yapılmayacağından uygulamalar çok daha hızlı açılır.”


3 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

5-Android Hayat Döngüsü<br />

http://kod5.org/activity-sinifi/<br />

6-Andriod Studio IDE<br />

6.1-Geliştirme ortamı<br />

6.2-Paletler<br />

7-Kullanıcı Arayüz Tasarımı<br />

7.1-View Nesneleri<br />

7.2-match_parent / wrap_content<br />

match_parent :Yatay yada dikeyde en fazla genişliği kullan.<br />

wrap_content: Yatay yada dikeyde nesne içeriği kadar genişle.<br />

7.3-LinearLayout<br />

7.3.1-Layout_width / layout_height<br />

layout_width: Layout genişliği<br />

layout_height:Layout yüksekliği


4 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

7.3.1.1-LinearLayout-uyg<br />

LinearLayout - <strong>Uygulama</strong>sı<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


5 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:layout_height="wrap_content"<br />

android:id="@+id/button2" /><br />

<br />

MainActivity.java<br />

public class MainActivity extends AppCompatActivity {<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

}<br />

}<br />

7.3.2-layout_weight:dikey genişlik önceliği<br />

layout_weight:dikey genişlik önceliği, 0 ise öncelik yok, 1 ise layout içerisindeki tum dikey yada yatay alanı<br />

kaplar.Bu durumda match_prent ezilir/geçersiz kılınır.<br />

7.3.2.1-layout-weight-uyg<br />

LayoutWeight - <strong>Uygulama</strong>sı<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />


6 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

<br />

7.3.3-layout_gravity<br />

layout_gravity:içinde bulununan layouta göre widget’lerin yatay pozisyon belirleme<br />

7.3.3.1-layot-gravity-uyg<br />

LayoutWeight - <strong>Uygulama</strong>sı<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />


7 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

7.3.4-Gravity<br />

Gravity:nesnenin içindeki textin pozisyonunu belirleme<br />

8-gravity-uyg<br />

Gravity - <strong>Uygulama</strong>sı<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />


8 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

7.3.5-RelativeLayout<br />

Widget’lerin konumlarını ; Birbirlerinin konumlarına göre ve içinde bulundukları Layout’a göre belirlememizi<br />

sağlar.NOT : Layuot’a eklenen widget’lere ID verilmelidir !! Relavite türkçe karşılığı görecelidir.Verilen ID’ye göre<br />

layout dosyasi içindeki widget’lere MainActivity.java dosyası içerisinden erişilir.<br />

Relative Layout’un içine eklediğimiz öğeleri birbirlerinin sağına, soluna, aşağısına veya yukarısına geç diyebiliriz.<br />

android:layout_above<br />

android:layout_below<br />

android:layout_toLeftOf<br />

android:layout_toRightOf<br />

Hangi görsel öğenin id’si verilmişse onun üstünde görünür<br />

Hangi görsel öğenin id’si verilmişse onun altında görünür<br />

Hangi görsel öğenin id’si verilmişse onun solunda görünür<br />

Hangi görsel öğenin id’si verilmişse onun sağında görünür<br />

Relative Layout’un içine koyduğumuz öğerleri birbirlerine göre veya içine koyulan layout’a göre hizalayabiliriz.<br />

Aşağıda en çok kullanılan hizalama metotlarını bulabilirsiniz.<br />

android:layout_alignBottom<br />

android:layout_alignLeft<br />

android:layout_alignTop<br />

android:layout_alignRight<br />

android:layout_alignParentBottom<br />

android:layout_alignParentLeft<br />

android:layout_alignParentRight<br />

android:layout_alignParentTop<br />

7.3.5.1-RelativeLayout-uyg<br />

RelativeLayout - <strong>Uygulama</strong>sı<br />

Id’si verilen öğenin altını referans altını referans alarak hizalama<br />

yapar. Kendi alt bölümünü buna göre genişletir veya daraltır.<br />

Id’si verilen öğenin solundan referans alarak hizalama yapar. Kendi sol<br />

bölümünü buna göre genişletir veya daraltır.<br />

Id’si verilen öğenin üstünden referans alarak hizalama yapar. Kendi üst<br />

bölümünü buna göre genişletir veya daraltır.<br />

Id’si verilen öğenin sağından referans alarak hizalama yapar. Kendi sağ<br />

bölümünü buna göre genişletir veya daraltır.<br />

İçine koyulduğu layout’un en altına yerleşmesine yarar.<br />

İçine koyulduğu layout’un en soluna yerleşmesine yarar.<br />

İçine koyulduğu layout’un en sağına yerleşmesine yarar.<br />

İçine koyulduğu layout’un en üstüne yerleşmesine yarar.


9 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

<br />

8-Resource(Kaynak) Dosyaları<br />

8.1-String tanımlama <strong>–</strong><br />

8.1.1-merhaba-dunya-string:uyg<br />

Temelde çoklu dil desteğini sağlamak için uygulama içinde kullanılan metinler strings.xml içinde değişken<br />

olarak tanımlanır.<strong>Uygulama</strong> LinearLayout kullanılarak yapılmıştır.<br />

2-String Tanımlama <strong>Uygulama</strong>sı<br />

Ekran Görüntüsü<br />

app\src\main\res\values\strings.xml<br />

<br />

Merhaba Dunya<br />

String<br />

Ad : <br />

Soyad :<br />

GÖNDER<br />

<br />

MainActivity.java<br />

public class MainActivity extends<br />

AppCompatActivity {<br />

@Override<br />

protected void onCreate(Bundle<br />

savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

}<br />

}


10 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

res\layout\activity_main.xml<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


11 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

9-Temel Uygulamlar<br />

9.1-Kullanıcıdan veri alma ve Toast ile gösterme<br />

Ad/Soyad/Göster Butonu-3-Toast-uyg<br />

Toast Mesaj Göster <strong>Uygulama</strong>sı<br />

app\src\main\res\values\strings.xml<br />

<br />

LinearLayout<br />

Ad<br />

Soyad<br />

Goster<br />

<br />

MainActivity.java<br />

public class MainActivity extends AppCompatActivity {<br />

//<strong>Uygulama</strong>yı çalıştıran metod,activity_main adlı<br />

layout’u ekrana yüklüyor.<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState)<br />

{<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

//Layout'daki butona id'si üzerinden erişilip button<br />

turunde gosterButon adlı nesne tanimlaniyor.<br />

Button gosterButon = (Button)<br />

findViewById(R.id.gosterButon);<br />

//Layout'daki EditText’lere id'leri üzerinden erişilip<br />

EditText türünde nesneler tanımlanıyor.<br />

final EditText ad = (EditText)<br />

findViewById(R.id.adText);<br />

final EditText soyad = (EditText)<br />

findViewById(R.id.soyadText);<br />

//göster butonuna tıklanmasını dinleyen metod.<br />

gosterButon.setOnClickListener(new<br />

View.OnClickListener() {<br />

@Override<br />

/göster butonuna tıklandığında çalışan kodlar<br />

public void onClick(View v) {<br />

//ad ve soyad nesnelerinden gelen text değerler alınıp<br />

string veri türündeki değişkenlere atanıyor.<br />

String adGelen = ad.getText().toString();<br />

String soyadGelen = soyad.getText().toString();<br />

//Toast içersinde ekrana yazırılacak text mesaj<br />

Ekran Görüntüsü<br />

hazırlanıyor<br />

String mesaj = "Merhaba " + adGelen + " " +<br />

soyadGelen + " !";<br />

//Toast mesajını ekranda gösteren kod.LENGTH_LONG<br />

parametresiyle açilan baloncuğun ekranda uzun süre kalması<br />

sağlanıyor.<br />

Toast.makeText(MainActivity.this, mesaj,<br />

Toast.LENGTH_LONG).show();<br />

}<br />

});<br />

}<br />

}<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />


12 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:layout_width="match_parent"<br />

android:layout_height="wrap_content"><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

9.2-Basit Hesap Makinası<br />

HesapMakinasi-uygulama<br />

HesapMakinasi- <strong>Uygulama</strong>sı<br />

app\src\main\res\values\strings.xml<br />

<br />

Hesap Makinasi<br />

Sayı 1<br />

Sayı 2<br />

+<br />

-<br />

*<br />

/<br />

İşlem Sonucu<br />


13 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


14 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:layout_width="wrap_content"<br />

android:layout_height="wrap_content"<br />

android:id="@+id/toplaButon"<br />

android:layout_weight="1" /><br />

<br />

<br />

<br />

<br />

<br />

<br />

MainActivity.java<br />

public class MainActivity extends AppCompatActivity {<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

// Layout'daki butonlara id'ler üzerinden erişilip button turunde nesneler tanimlaniyor.<br />

Button toplaButon = (Button) findViewById(R.id.toplaButon);<br />

Button cikarButon = (Button) findViewById(R.id.cikarButon);<br />

final Button bolButon = (Button) findViewById(R.id.bolButon);<br />

Button carpButon = (Button) findViewById(R.id.carpButon);<br />

final EditText say1Text = (EditText) findViewById(R.id.sayi1Text);<br />

final EditText say2Text = (EditText) findViewById(R.id.sayi2Text);<br />

toplaButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View v) {<br />

Integer say1 = Integer.parseInt(say1Text.getText().toString());<br />

Integer say2 = Integer.parseInt(say2Text.getText().toString());<br />

Integer toplam = say1 + say2;<br />

final TextView sonucText = (TextView) findViewById(R.id.sonucText);<br />

//sonucText.setText(String.format("%d", toplam));<br />

sonucText.setText(Integer.toString(toplam));<br />

}<br />

});<br />

// cikarButon<br />

cikarButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View v) {<br />

Integer say1 = Integer.parseInt(say1Text.getText().toString());<br />

Integer say2 = Integer.parseInt(say2Text.getText().toString());<br />

Integer fark;<br />

fark = say1-say2;<br />

final TextView sonucText = (TextView) findViewById(R.id.sonucText);<br />

sonucText.setText(Integer.toString(fark));<br />

}<br />

});<br />

// bolButon<br />

bolButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View v) {<br />

Integer say1 = Integer.parseInt(say1Text.getText().toString());<br />

Integer say2 = Integer.parseInt(say2Text.getText().toString());


15 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

}<br />

float bolum;<br />

bolum = say1 / say2;<br />

final TextView sonucText = (TextView) findViewById(R.id.sonucText);<br />

sonucText.setText(String.valueOf(bolum));<br />

}<br />

});<br />

// carpButon<br />

carpButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View v) {<br />

Integer say1 = Integer.parseInt(say1Text.getText().toString());<br />

Integer say2 = Integer.parseInt(say2Text.getText().toString());<br />

});<br />

}<br />

float carpim;<br />

carpim = say1*say2;<br />

final TextView sonucText = (TextView) findViewById(R.id.sonucText);<br />

sonucText.setText(Float.toString(carpim));<br />

}<br />

9.3-Menu<br />

9.3.1-Context Menu:view elemanlarına uzun süre basıldığında.<br />

11-ContextMenu-uyg<br />

ContextMenu <strong>Uygulama</strong>sı<br />

Ekran Görüntüsü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />


16 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

res\values\strings.xml<br />

<br />

Context Menu<br />

<br />

Ahmet Aslan<br />

Mehmet Kaplan<br />

Ali Kuş<br />

Ayşe Doğru<br />

Burak Doğan<br />

Aslı Şahin<br />

<br />

<br />

res\layout\list_item.xml<br />

<br />

<br />

<br />

res\menu\menu_context.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

<br />

app\src\main\java\com\test\contextmenu\MainActivity.java<br />

public class MainActivity extends AppCompatActivity {<br />

//asagidaki nesneler metodlardan erismek icin burada tanimlaniyor.<br />

ListView liste; // ListView türünde liste adli nesne tanimlaniyor.<br />

Adapter adapter; // adapter adli Adapter veri turunden nesne tanimlaniyor.<br />

/*<br />

* 3 adet metod tanimlaniyor;<br />

* 1-onCreate : program calistiginda calisan metod, activity_main.xml'i ekrana basar.<br />

* 2-onCreateContextMenu: ContextMenu'yu ekrana basan metod.<br />

* 3-onContextItemSelected: ContextMenu'den eleman(item) secildiginde calisan metod.<br />

*/<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);


17 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

String kullanicilar[]; // kullanicilar adlı dizi tanımlaniyor.<br />

kullanicilar = getResources().getStringArray(R.array.kullanicilar); // kullanicilar dizisinin<br />

içersine string.xml dosyasinda tanımlanan kullanicilar dizisi ataniyor.<br />

liste = (ListView) findViewById(R.id.listView); // activity_main.xml içindeki ListView nesnesine<br />

erişiliyor.<br />

adapter = new ArrayAdapter(getApplicationContext(),R.layout.list_item,kullanicilar); //<br />

kullanicilar dizisinin elemanlari, list_item.xml icindeki TextView'lere aranip adapter nesnesine<br />

doldurulyor.<br />

liste.setAdapter((ListAdapter) adapter); // liste'nin icine adapter nesnesi ataniyor.<br />

registerForContextMenu(liste);// menu, liste nesnesiyle olusturuluyor, ekrana basiliyor.<br />

}<br />

/*<br />

* ContextMenu oluşturan metod<br />

*/<br />

@Override<br />

public void onCreateContextMenu (ContextMenu menu,<br />

View v,<br />

ContextMenu.ContextMenuInfo menuInfo) {<br />

super.onCreateContextMenu(menu, v, menuInfo);<br />

MenuInflater inflater = getMenuInflater();<br />

inflater.inflate(R.menu.menu_context, menu);<br />

}<br />

/*<br />

* ContextMenu'den item(bilesen) secildiginde calisan metod<br />

* return boolean veri turunde.<br />

*/<br />

@Override<br />

public boolean onContextItemSelected(MenuItem item){<br />

AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)<br />

item.getMenuInfo();<br />

switch (item.getItemId()) {<br />

case R.id.duzenle:<br />

// duzenle secildiginde calisan kodlar.<br />

TextView tv = (TextView) menuInfo.targetView; // secilen TextView'e erişiliyor.<br />

Toast.makeText(getApplicationContext(), "Duzenleme için Seçilen kişi :" +<br />

tv.getText().toString(), Toast.LENGTH_LONG).show(); // secilen TextView'in text i toast icinde ekrana<br />

basiliyor.<br />

return true;<br />

case R.id.paylas:<br />

// paylas secildiginde calisan kodlar.<br />

TextView tv1 = (TextView) menuInfo.targetView; // secilen TextView'e erişiliyor.<br />

Toast.makeText(getApplicationContext(), "Paylaşmak için seçilen kişi :" +<br />

tv1.getText().toString(), Toast.LENGTH_LONG).show(); // secilen TextView'in text i toast icinde ekrana<br />

basiliyor.<br />

return true;<br />

case R.id.sil:<br />

// sil secildiginde calisan kodlar.<br />

TextView tv2 = (TextView) menuInfo.targetView; // secilen TextView'e erişiliyor.<br />

Toast.makeText(getApplicationContext(), "Silmek için seçilen kişi :" +<br />

tv2.getText().toString(), Toast.LENGTH_LONG).show(); // secilen TextView'in text i toast icinde ekrana<br />

basiliyor.<br />

return true;<br />

}<br />

return super.onContextItemSelected(item);<br />

}<br />

}


18 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

10-Activity Nedir ?<br />

Cevap :<br />

10.1-Activiteler Arasi Basit Geçiş-<strong>Uygulama</strong><br />

10.1-Activiteler Arasi Basit Geçiş-<strong>Uygulama</strong><br />

Ekran Görüntüsü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

res\layout\activity_second.xml Dosyasi<br />

<br />

<br />

<br />

<br />

app\manifests\AndroidManifest.xml Dosyası<br />

<br />

<br />


19 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:icon="@mipmap/ic_launcher"<br />

android:supportsRtl="true"<br />

android:theme="@style/AppTheme"><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

app\src\main\java\com\test\contextmenu\MainActivity.java<br />

package net.sevketkeser.activitegecisbasit;<br />

import android.content.Intent;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.view.View;<br />

import android.widget.Button;<br />

public class MainActivity extends AppCompatActivity {<br />

Button baslatButon;<br />

private Intent intent;<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

baslatButon = (Button) findViewById(R.id.baslatButon);<br />

baslatButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View view) {<br />

intent = new Intent(MainActivity.this, SecondActivity.class);<br />

startActivity(intent);<br />

}<br />

});<br />

}<br />

}<br />

app\src\main\java\com\test\contextmenu\SecondActivity.java<br />

package net.sevketkeser.activitegecisbasit;<br />

import android.content.Intent;<br />

import android.os.Bundle;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.view.View;<br />

import android.widget.Button;<br />

public class SecondActivity extends AppCompatActivity {<br />

Button geriButon;<br />

private Intent geriIntent;<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState){<br />

super.onCreate(savedInstanceState);


20 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

setContentView(R.layout.activity_second);<br />

geriButon = (Button) findViewById(R.id.geriButon);<br />

}<br />

}<br />

geriButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View view) {<br />

geriIntent = new Intent(SecondActivity.this, MainActivity.class);<br />

startActivity(geriIntent);<br />

}<br />

});<br />

10.2- Activiteler Arasi Parametreli Geçiş-<strong>Uygulama</strong><br />

10.2.1-Bundle Nesnesi<br />

Nedir ?<br />

10.2- Activiteler Arasi Parametreli Geçiş-<strong>Uygulama</strong><br />

Ekran Görüntüsü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />


21 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:layout_height="wrap_content"<br />

android:id="@+id/sayiEditText" /><br />

<br />

<br />

<br />

res\layout\activity_second.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

<br />

app\manifests\AndroidManifest.xml Dosyası<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />


22 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

app\src\main\java\com\test\contextmenu\MainActivity.java<br />

package net.sevketkeser.activitelerarasigecis2;<br />

import android.content.Intent;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.view.View;<br />

import android.widget.Button;<br />

import android.widget.EditText;<br />

public class MainActivity extends AppCompatActivity {<br />

EditText sayiEditText;<br />

Button sayiGonder;<br />

private Intent intent;<br />

private Bundle bundle;<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

sayiEditText = (EditText) findViewById(R.id.sayiEditText);<br />

sayiGonder = (Button) findViewById(R.id.sayiGonder);<br />

sayiGonder.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View view) {<br />

intent = new Intent(MainActivity.this, SecondActivity.class);<br />

bundle = new Bundle();<br />

bundle.putString("sayi", sayiEditText.getText().toString());<br />

intent.putExtras(bundle);<br />

});<br />

}<br />

startActivity(intent);<br />

}<br />

}<br />

app\src\main\java\com\test\contextmenu\SecondActivity.java<br />

package net.sevketkeser.activitelerarasigecis2;<br />

import android.content.Intent;<br />

import android.os.Bundle;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.view.View;<br />

import android.widget.Button;<br />

import android.widget.EditText;<br />

import android.widget.TextView;<br />

public class SecondActivity extends AppCompatActivity {<br />

EditText gelensayiEditText;<br />

Button geriButon;<br />

@Override<br />

protected void onCreate (Bundle savedInstanceState){<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_second);<br />

gelensayiEditText = (EditText) findViewById(R.id.gelenSayiEditText);<br />

geriButon = (Button) findViewById(R.id.geriButon);<br />

Bundle data = getIntent().getExtras();<br />

gelensayiEditText.setText(data.getString("sayi"));


23 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

// Main Activiy'e geri don.<br />

geriButon.setOnClickListener(new View.OnClickListener() {<br />

@Override<br />

public void onClick(View view) {<br />

Intent geriIntent = new Intent(SecondActivity.this,<br />

MainActivity.class);<br />

startActivity(geriIntent);<br />

}<br />

});<br />

}<br />

}<br />

...<br />

12-Veri tabanı işlmeleri - SQL<br />

İnsert<br />

select<br />

Delete<br />

Update<br />

12.1-SQL <strong>Uygulama</strong> Sözlük <strong>Uygulama</strong>sı<br />

12.1-SQL <strong>Uygulama</strong> Sözlük <strong>Uygulama</strong>sı<br />

Ekran Görüntüsü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />


24 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

android:layout_height="wrap_content"<br />

android:orientation="horizontal"><br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

res\layout\list_item.xml Dosyasi<br />

<br />

<br />

<br />

<br />

<br />

strings.xml<br />

<br />

Dictionary<br />

Ad<br />

Açıklama<br />

Kaydet<br />

Güncelle<br />

Sil<br />

<br />

MainActivity.java Dosyası<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.app.Activity;<br />

import android.content.ContentValues;<br />

import android.database.Cursor;<br />

import android.database.sqlite.SQLiteDatabase;


25 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

import android.os.Bundle;<br />

import android.view.View;<br />

import android.widget.Adapter;<br />

import android.widget.AdapterView;<br />

import android.widget.AdapterView.OnItemClickListener;<br />

import android.widget.Button;<br />

import android.widget.EditText;<br />

import android.widget.ListView;<br />

import android.widget.SimpleCursorAdapter;<br />

import android.widget.Toast;<br />

public class MainActivity extends AppCompatActivity {<br />

private DatabaseHelper helper;<br />

private SimpleCursorAdapter adapter;<br />

private Cursor kelimeListesiCursor;<br />

private String[] projection = new String[] {<br />

DictionaryContract.Kelime._ID,<br />

DictionaryContract.Kelime.COLUMN_AD,<br />

DictionaryContract.Kelime.COLUMN_ACIKLAMA<br />

};<br />

private String[] from = new String[] {<br />

DictionaryContract.Kelime.COLUMN_AD,<br />

DictionaryContract.Kelime.COLUMN_ACIKLAMA<br />

};<br />

private int [] to = new int[] {<br />

R.id.adListItemTextView,<br />

R.id.aciklamaListItemTextView<br />

};<br />

@Override<br />

public void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

}<br />

ekranKontrolleriniOlustur();<br />

private void ekranKontrolleriniOlustur() {<br />

helper = new DatabaseHelper(this);<br />

SQLiteDatabase db = helper.getReadableDatabase();<br />

kelimeListesiCursor = butunKelimeleriSorgula();<br />

adapter = new SimpleCursorAdapter(this,R.layout.list_item,<br />

kelimeListesiCursor, from, to, 0);<br />

final EditText adEditText = (EditText) findViewById(R.id.adEditText);<br />

final EditText aciklamaEditText = (EditText)<br />

findViewById(R.id.aciklamaEditText);<br />

Button kaydetButton = (Button) findViewById(R.id.kaydetButton);<br />

kaydetButton.setOnClickListener(new View.OnClickListener() {<br />

public void onClick(View v) {<br />

String ad = adEditText.getText().toString();<br />

String aciklama = aciklamaEditText.getText().toString();<br />

kelimeEkle(ad, aciklama);<br />

}


26 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

});<br />

Button guncelleButton = (Button) findViewById(R.id.guncelleButton);<br />

guncelleButton.setOnClickListener(new View.OnClickListener() {<br />

public void onClick(View v) {<br />

String ad = adEditText.getText().toString();<br />

String aciklama = aciklamaEditText.getText().toString();<br />

kelimeGuncelle(ad, aciklama);<br />

}<br />

});<br />

Button silButton = (Button) findViewById(R.id.silButton);<br />

silButton.setOnClickListener(new View.OnClickListener() {<br />

public void onClick(View v) {<br />

String ad = adEditText.getText().toString();<br />

kelimeSil(ad);<br />

}<br />

});<br />

ListView sozlukListView = (ListView) findViewById(R.id.sozlukListView);<br />

sozlukListView.setAdapter(adapter);<br />

sozlukListView.setOnItemClickListener(new OnItemClickListener() {<br />

id) {<br />

public void onItemClick(AdapterView arg0, View view, int position, long<br />

//adapter.setSelectedPosition(position);<br />

editTextGuncelle(kelimeListesiCursor, position, adEditText,<br />

aciklamaEditText);<br />

}<br />

});<br />

}<br />

private int getKelimeId(String ad) {<br />

}<br />

Cursor cursor = kelimeSorgula(ad);<br />

if(cursor == null)<br />

return -1;<br />

int count = cursor.getCount();<br />

if(count != 1)<br />

return -1;<br />

cursor.moveToNext();<br />

int idIndex = cursor.getColumnIndex(DictionaryContract.Kelime._ID);<br />

return cursor.getInt(idIndex);<br />

private Cursor kelimeSorgula(String ad) {<br />

if(ad == null)<br />

throw new RuntimeException("Kelime adý sorgulama iþlemi için boþ<br />

býrakýlamaz");<br />

String where = DictionaryContract.Kelime.COLUMN_AD + "=?";<br />

String [] whereArgs = new String [] {ad};<br />

SQLiteDatabase db = helper.getReadableDatabase();


27 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

Cursor cursor = db.query(DictionaryContract.TABLE_NAME, projection, where,<br />

whereArgs, null, null, null);<br />

}<br />

return cursor;<br />

private long kelimeEkle(String ad, String aciklama) {<br />

int kelimeId = getKelimeId(ad);<br />

if(kelimeId != -1) {<br />

Toast.makeText(getApplicationContext(), "Bu kelime daha önce eklenmiþtir",<br />

Toast.LENGTH_LONG).show();<br />

return -1;<br />

}<br />

}<br />

ContentValues satir = new ContentValues();<br />

satir.put("ad", ad);<br />

satir.put("aciklama", aciklama);<br />

SQLiteDatabase db = helper.getWritableDatabase();<br />

long eklenenKelimeId = db.insert(DictionaryContract.TABLE_NAME, null, satir);<br />

listeGuncelle();<br />

return eklenenKelimeId;<br />

private void kelimeGuncelle(String ad, String aciklama) {<br />

ContentValues guncelSatir = new ContentValues();<br />

guncelSatir.put("ad", ad);<br />

guncelSatir.put("aciklama", aciklama);<br />

int kelimeId = getKelimeId(ad);<br />

if(kelimeId == -1) {<br />

Toast.makeText(getApplicationContext(), "Güncellenecek kelime bulunamadý",<br />

Toast.LENGTH_LONG).show();<br />

return;<br />

}<br />

}<br />

SQLiteDatabase db = helper.getWritableDatabase();<br />

String where = DictionaryContract.Kelime._ID + "=" + kelimeId;<br />

db.update(DictionaryContract.TABLE_NAME, guncelSatir, where, null);<br />

listeGuncelle();<br />

private void kelimeSil(String ad) {<br />

int kelimeId = getKelimeId(ad);<br />

if(kelimeId == -1) {<br />

Toast.makeText(getApplicationContext(), "Silinecek kelime bulunamadý",<br />

Toast.LENGTH_LONG).show();<br />

return;<br />

}<br />

}<br />

SQLiteDatabase db = helper.getWritableDatabase();<br />

String where = DictionaryContract.Kelime._ID + "=" + kelimeId;<br />

db.delete(DictionaryContract.TABLE_NAME, where, null);<br />

listeGuncelle();


28 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

private void editTextGuncelle(Cursor cursor, int position, EditText adEditText,<br />

EditText aciklamaEditText) {<br />

cursor.moveToPosition(position);<br />

int adIndex = cursor.getColumnIndex(DictionaryContract.Kelime.COLUMN_AD);<br />

int aciklamaIndex =<br />

cursor.getColumnIndex(DictionaryContract.Kelime.COLUMN_ACIKLAMA);<br />

}<br />

String ad = cursor.getString(adIndex);<br />

String aciklama = cursor.getString(aciklamaIndex);<br />

adEditText.setText(ad);<br />

aciklamaEditText.setText(aciklama);<br />

private void listeGuncelle() {<br />

}<br />

kelimeListesiCursor.requery();<br />

adapter.notifyDataSetChanged();<br />

private Cursor butunKelimeleriSorgula() {<br />

SQLiteDatabase db = helper.getReadableDatabase();<br />

return db.query(DictionaryContract.TABLE_NAME, projection, null, null, null,<br />

null, null);<br />

}<br />

}<br />

DictionaryContact.java<br />

import android.net.Uri;<br />

import android.provider.BaseColumns;<br />

public final class DictionaryContract {<br />

public static final String AUTHORITY =<br />

"com.kodlab.dictionary.provider.DictionaryProvider";<br />

public static final Uri AUTHORITY_URI = Uri.parse("content://" + AUTHORITY);<br />

public static final String DATABASE_NAME = "sozluk";<br />

public static final String TABLE_NAME = "kelime";<br />

public static final int DATABASE_VERSION = 1;<br />

public static class Kelime implements BaseColumns {<br />

private Kelime() {}<br />

public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI,<br />

"kelime");<br />

public static final String CONTENT_TYPE =<br />

"vnd.android.cursor.dir/net.sevketkeser.sozluk.provider.DictionaryProvider.kelime";<br />

public static final String CONTENT_ITEM_TYPE =<br />

"vnd.android.cursor.item/net.sevketkeser.sozluk.provider.DictionaryProvider.kelime";<br />

public static final String COLUMN_AD = "ad";<br />

public static final String COLUMN_ACIKLAMA = "aciklama";<br />

public static final String DEFAULT_SORT_ORDER = "ad ASC";<br />

public static final String[] FULL_PROJECTION = new String[] {_ID, COLUMN_AD,<br />

COLUMN_ACIKLAMA};


29 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

}<br />

}<br />

DatabaseHelper.java<br />

import android.database.sqlite.SQLiteOpenHelper;<br />

import android.content.Context;<br />

import android.database.sqlite.SQLiteDatabase;<br />

import android.util.Log;<br />

public class DatabaseHelper extends SQLiteOpenHelper {<br />

public static final String DATABASE_CREATE =<br />

"CREATE TABLE " + DictionaryContract.TABLE_NAME + " (" +<br />

DictionaryContract.Kelime._ID + " INTEGER PRIMARY KEY<br />

AUTOINCREMENT," +<br />

DictionaryContract.Kelime.COLUMN_AD + " TEXT NOT NULL, " +<br />

DictionaryContract.Kelime.COLUMN_ACIKLAMA + " TEXT);";<br />

public static final String DATABASE_DROP = "DROP TABLE IF EXISTS " +<br />

DictionaryContract.TABLE_NAME;<br />

public DatabaseHelper(Context context) {<br />

super(context, DictionaryContract.DATABASE_NAME, null,<br />

DictionaryContract.DATABASE_VERSION);<br />

}<br />

@Override<br />

public void onCreate(SQLiteDatabase db) {<br />

db.execSQL(DATABASE_CREATE);<br />

}<br />

@Override<br />

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {<br />

Log.w("DatabaseHelper", "Veritabani " + oldVersion + "\'dan" + newVersion +<br />

"\'a guncelleniyor");<br />

db.execSQL(DATABASE_DROP);<br />

onCreate(db);<br />

}<br />

}


30 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

13-Sensörler<br />

13.1-Sensör Listesi<br />

Ekran Görüntüsü<br />

13.1-Sensör Listesi<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

MainActivity.java<br />

package net.sevketkeser.sensorlistesi;<br />

import android.content.Context;<br />

import android.hardware.Sensor;<br />

import android.hardware.SensorManager;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.widget.TextView;<br />

import java.util.List;<br />

public class MainActivity extends AppCompatActivity {<br />

@Override<br />

protected void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

SensorManager sensorManager = (SensorManager)<br />

getSystemService(Context.SENSOR_SERVICE);<br />

List sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);<br />

TextView sensorListTextView = (TextView)<br />

findViewById(R.id.sensorListTextView);<br />

StringBuilder stringBuilder = new StringBuilder();


31 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

for(Sensor sensor : sensorList) {<br />

"\n");<br />

stringBuilder.append("Ad : " + sensor.getName() + "\n");<br />

stringBuilder.append("Tip : " + sensor.getType() + "\n");<br />

stringBuilder.append("Uretici : " + sensor.getVendor() + "\n");<br />

stringBuilder.append("Versiyon : " + sensor.getVersion() + "\n");<br />

stringBuilder.append("Maksimum Aralýk : " + sensor.getMaximumRange() +<br />

stringBuilder.append("Güç :" + sensor.getPower() + "\n");<br />

stringBuilder.append("\n");<br />

}<br />

sensorListTextView.setText(stringBuilder.toString());<br />

}<br />

}<br />

13.2-Hareket Sensörü<br />

Ekran Görüntüsü<br />

13.2-Hareket Sensörü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />


32 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

MainActivity.java Dosyasi<br />

package net.sevketkeser.hareketsensoru;<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.app.Activity;<br />

import android.content.Context;<br />

import android.hardware.Sensor;<br />

import android.hardware.SensorEvent;<br />

import android.hardware.SensorEventListener;<br />

import android.hardware.SensorManager;<br />

import android.os.Bundle;<br />

import android.widget.TextView;<br />

public class MainActivity extends Activity implements SensorEventListener {<br />

private static final float ALPHA = 0.9f;<br />

private SensorManager sensorManager;<br />

private Sensor accelerometerSensor;<br />

private TextView gercekIvmeTextView;<br />

private TextView lineerIvmeTextView;<br />

private float[] gravity = new float[3];<br />

private float[] linear_acceleration = new float[3];<br />

@Override<br />

public void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);<br />

accelerometerSensor =<br />

sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);<br />

}<br />

gercekIvmeTextView = (TextView) findViewById(R.id.gercekIvmeTextView);<br />

lineerIvmeTextView = (TextView) findViewById(R.id.lineerIvmeTextView);<br />

public final void onAccuracyChanged(Sensor sensor, int accuracy) {<br />

}<br />

public final void onSensorChanged(SensorEvent event) {<br />

gravity[0] = ALPHA * gravity[0] + (1 - ALPHA) * event.values[0];<br />

gravity[1] = ALPHA * gravity[1] + (1 - ALPHA) * event.values[1];<br />

gravity[2] = ALPHA * gravity[2] + (1 - ALPHA) * event.values[2];<br />

linear_acceleration[0] = event.values[0] - gravity[0];<br />

linear_acceleration[1] = event.values[1] - gravity[1];<br />

linear_acceleration[2] = event.values[2] - gravity[2];<br />

String gercekIvme = String.format("Gerçek İvme:\nX: %8.3f\nY: %8.3f\nZ:<br />

%8.3f",<br />

event.values[0], event.values[1], event.values[2]);<br />

String lineerIvme = String.format("Lineer İvme:\nX: %8.3f\nY: %8.3f\nZ:<br />

%8.3f",<br />

linear_acceleration[0], linear_acceleration[1],<br />

linear_acceleration[2]);<br />

}<br />

gercekIvmeTextView.setText(gercekIvme);<br />

lineerIvmeTextView.setText(lineerIvme);<br />

protected void onResume() {<br />

super.onResume();<br />

sensorManager.registerListener(this, accelerometerSensor,


33 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

SensorManager.SENSOR_DELAY_NORMAL);<br />

}<br />

}<br />

protected void onPause() {<br />

super.onPause();<br />

sensorManager.unregisterListener(this);<br />

}<br />

13.3-Pozisyon Sensörü<br />

Ekran Görüntüsü<br />

13.3-Pozisyon Sensörü<br />

res\layout\activity_main.xml Dosyasi<br />

<br />

<br />

<br />

<br />

MainActivity.java<br />

import android.support.v7.app.AppCompatActivity;<br />

import android.os.Bundle;<br />

import android.hardware.Sensor;<br />

import android.hardware.SensorEvent;<br />

import android.hardware.SensorEventListener;<br />

import android.hardware.SensorManager;<br />

import android.os.Bundle;<br />

import android.app.Activity;<br />

import android.content.Context;<br />

import android.widget.TextView;


34 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

public class MainActivity extends Activity implements SensorEventListener {<br />

private SensorManager sensorManager;<br />

private Sensor orientationSensor;<br />

private Sensor accelerometerSensor;<br />

private Sensor magneticFieldSensor;<br />

private TextView gercekOrientationTextView;<br />

private TextView hesaplananOrientationTextView;<br />

private float [] orientationSensorValues = new float[3];<br />

private float [] accelerometerSensorValues = new float[3];<br />

private float [] magneticFieldSensorValues = new float[3];<br />

@Override<br />

public void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);<br />

orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);<br />

accelerometerSensor =<br />

sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);<br />

magneticFieldSensor =<br />

sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);<br />

gercekOrientationTextView = (TextView)<br />

findViewById(R.id.gercekOrientationTextView);<br />

hesaplananOrientationTextView = (TextView)<br />

findViewById(R.id.hesaplananOrientationTextView);<br />

}<br />

public final void onAccuracyChanged(Sensor sensor, int accuracy) {}<br />

public final void onSensorChanged(SensorEvent event) {<br />

if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)<br />

orientationSensorValues = event.values;<br />

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)<br />

accelerometerSensorValues= event.values;<br />

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)<br />

magneticFieldSensorValues = event.values;<br />

String gercekOrientationStr = String.format("Gerçek Orientation<br />

(Yönelim):\nAzimuth:%3.0f\nPitch: %3.0f\nRoll: %3.0f",<br />

orientationSensorValues[0], orientationSensorValues[1],<br />

orientationSensorValues[2]);<br />

gercekOrientationTextView.setText(gercekOrientationStr);<br />

float [] hesaplananOrientation = orientationHesapla();<br />

String hesaplananOrientationStr = String.format("Hesaplanan Orientation<br />

(Yönelim):\nAzimuth: %3.0f\nPitch: %3.0f\nRoll: %3.0f",<br />

hesaplananOrientation[0], hesaplananOrientation[1],<br />

hesaplananOrientation[2]);<br />

hesaplananOrientationTextView.setText(hesaplananOrientationStr);<br />

}<br />

private float [] orientationHesapla() {<br />

float[] values = new float[3];<br />

float[] R = new float[9];<br />

SensorManager.getRotationMatrix(R, null, accelerometerSensorValues,<br />

magneticFieldSensorValues);<br />

SensorManager.getOrientation(R, values);


35 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

values[0] = (float) Math.toDegrees(values[0]);<br />

values[1] = (float) Math.toDegrees(values[1]);<br />

values[2] = (float) Math.toDegrees(values[2]);<br />

}<br />

return values;<br />

protected void onResume() {<br />

super.onResume();<br />

sensorManager.registerListener(this, orientationSensor,<br />

SensorManager.SENSOR_DELAY_NORMAL);<br />

sensorManager.registerListener(this, accelerometerSensor,<br />

SensorManager.SENSOR_DELAY_NORMAL);<br />

sensorManager.registerListener(this, magneticFieldSensor,<br />

SensorManager.SENSOR_DELAY_NORMAL);<br />

}<br />

}<br />

protected void onPause() {<br />

super.onPause();<br />

sensorManager.unregisterListener(this);<br />

}<br />

13.4-Light Sensörü<br />

Empty-<strong>Uygulama</strong><br />

Ekran Görüntüsü<br />

Empty<br />

res\layout\activity_main.xml Dosyasi<br />

<br />


36 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

<br />

MainActivity.java Dosyasi<br />

import android.os.Bundle;<br />

import java.util.Timer;<br />

import java.util.TimerTask;<br />

import android.app.Activity;<br />

import android.content.Context;<br />

import android.hardware.Sensor;<br />

import android.hardware.SensorEvent;<br />

import android.hardware.SensorEventListener;<br />

import android.hardware.SensorManager;<br />

import android.os.Bundle;<br />

import android.view.WindowManager;<br />

import android.widget.TextView;<br />

public class MainActivity extends Activity implements SensorEventListener {<br />

private SensorManager sensorManager;<br />

private Sensor isikSensoru;<br />

private TextView isikMiktariTextView;<br />

private float isikMiktari;<br />

@Override<br />

public void onCreate(Bundle savedInstanceState) {<br />

super.onCreate(savedInstanceState);<br />

setContentView(R.layout.activity_main);<br />

}<br />

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);<br />

isikSensoru = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);<br />

isikMiktariTextView = (TextView) findViewById(R.id.isikMiktariTextView);<br />

Timer timer = new Timer();<br />

timer.scheduleAtFixedRate(new TimerTask() {<br />

public void run() {<br />

ekranGuncelle();<br />

}<br />

}, 0, 1000);<br />

public final void onAccuracyChanged(Sensor sensor, int accuracy) {}<br />

public final void onSensorChanged(SensorEvent event) {<br />

isikMiktari = event.values[0];<br />

}<br />

private void ekranGuncelle() {<br />

runOnUiThread(new EkranGuncelleRunnable());<br />

}<br />

private class EkranGuncelleRunnable implements Runnable {<br />

@Override<br />

public void run() {<br />

if(isikMiktari >= SensorManager.LIGHT_SUNLIGHT) {<br />

isikMiktariTextView.setText("GÜNEÞLÝ");<br />

ekranParlaklikAyarla(0.25f);<br />

} else if(isikMiktari >= SensorManager.LIGHT_OVERCAST) {<br />

isikMiktariTextView.setText("KAPALI");<br />

ekranParlaklikAyarla(0.5f);<br />

} else if(isikMiktari >= SensorManager.LIGHT_CLOUDY) {<br />

isikMiktariTextView.setText("BULUTLU");<br />

ekranParlaklikAyarla(0.75f);<br />

} else {<br />

isikMiktariTextView.setText("GECE KARANLIÐI");<br />

ekranParlaklikAyarla(1.0f);


37 | <strong>Mobil</strong> Ugulama <strong>Ders</strong> <strong>Notları</strong><br />

}<br />

}<br />

}<br />

private void ekranParlaklikAyarla(float parlaklik) {<br />

WindowManager.LayoutParams layoutParams = getWindow().getAttributes();<br />

layoutParams.screenBrightness = parlaklik;<br />

getWindow().setAttributes(layoutParams);<br />

}<br />

protected void onResume() {<br />

super.onResume();<br />

if(isikSensoru != null)<br />

sensorManager.registerListener(this, isikSensoru,<br />

SensorManager.SENSOR_DELAY_NORMAL);<br />

}<br />

}<br />

protected void onPause() {<br />

super.onPause();<br />

sensorManager.unregisterListener(this);<br />

ekranParlaklikAyarla(-1.0f);<br />

}<br />

..<br />

etc<br />

<strong>Mobil</strong> Ugulama <strong>Ders</strong>i WWW Kaynakları<br />

Android<br />

https://denizkilinc.com/2013/07/02/android-isletim-sistemi-mimarisi-kernel-libraries-runtime-framework-dvm/<br />

http://kod5.org/category/mobil/android/<br />

Java<br />

https://www.mobilhanem.com/temel-java-egitimleri/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!