matech bilişim teknolojileri · emülatör seçimlerinde dikkat edilecek tek konu sürümün en az...

156
1 Matech Bilişim Teknolojileri Hakkımızda Matech müşterilerine yenilikçi dijital çözümler sunan bir teknoloji şirketidir. Müşterilerimize web ve mobil ortamda başarılı bir iş kurmaları için yardımcı olmaya odaklandık. Yararlı olmayan ve başarılı olmayacağına inandığımız hiç bir projeyi prensiplerimiz gereği geliştirmiyoruz. Müşterilerimizin projelerini kendi işimiz gibi benimsiyoruz. Gelişime açık, teknoloji üreten ve dünyadaki yenlikleri takip eden takım arkadaşlarından oluşan bir yazılım firmasıyız. "Eğer sevdiğin işi yaparsan, hayatın boyunca bir gün bile çalışmış olmazsın." Konfüçyüs. 1. Danışmanlık; Projenizi geliştirmeye başlamadan önce deneyimlerimiz doğrultusunda sizi bilgilendiriyoruz. 2. Geliştirme; En doğru ürüne ulaşabilmek için geliştirme süreçlerimizi müşterilerimizle birlikte ilerletiyoruz. 3. Yayın; Test süreçlerimizden başarılı bir şekilde geçen ürünlerinizi yayınlıyoruz ve takibini yapıyoruz. www.matechbilisim.com Android Eğitim Programı Dökümanın Güncelleme Zamanı: 01 Aralık 2017 Eğitmen: Bülent SİYAH www.bulentsiyah.com Eğitimin Hedefi Tüm katılımcıların Android hakkındaki temel kavramlara hakim olması ve eğitim sonunda geliştirilecek uygulama benzerinde uygulamaları yazabilecek kabiliyete ulaşması, karşılaşılacak sorunların üstesinden gelebilecek yeterliliğe ulaştırılması hedeflenmektedir. Bu eğitim içeriği en özet bilgilerle ve en hızlı şekilde mobil uygulama geliştirme için oluşturulmuştur. İçerik hazırlanırken muhtemel tüm gereklilikler göz önüne alınmıştır. İçeriklerin tümü orta düzeyde rahatlıkla tüm talepleri yerine getiren uygulamalar başarıyla yazılabilir. Eğitim Gereksinimleri Katılımcılarımızın temel düzeyde olsa JAVA bilgisine sahip olmalı, bu bilgiye sahip olmayan kullanıcılar sadece genel kültür düzeyinde mobil uygulamaların sadece yaşam döngüsünü öğrenerek eğitim programından yararlanmış olacaklar.

Upload: others

Post on 26-Jan-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

1

Matech Bilişim Teknolojileri

Hakkımızda

Matech müşterilerine yenilikçi dijital çözümler sunan bir teknoloji şirketidir. Müşterilerimize web ve mobil ortamda başarılı bir iş kurmaları için yardımcı olmaya odaklandık. Yararlı olmayan ve başarılı olmayacağına inandığımız hiç bir projeyi prensiplerimiz gereği geliştirmiyoruz.

Müşterilerimizin projelerini kendi işimiz gibi benimsiyoruz. Gelişime açık, teknoloji üreten ve dünyadaki

yenlikleri takip eden takım arkadaşlarından oluşan bir yazılım firmasıyız. "Eğer sevdiğin işi yaparsan,

hayatın boyunca bir gün bile çalışmış olmazsın." Konfüçyüs.

1. Danışmanlık; Projenizi geliştirmeye başlamadan önce deneyimlerimiz doğrultusunda sizi

bilgilendiriyoruz.

2. Geliştirme; En doğru ürüne ulaşabilmek için geliştirme süreçlerimizi müşterilerimizle birlikte ilerletiyoruz.

3. Yayın; Test süreçlerimizden başarılı bir şekilde geçen ürünlerinizi yayınlıyoruz ve takibini yapıyoruz.

www.matechbilisim.com

Android Eğitim Programı Dökümanın Güncelleme Zamanı: 01 Aralık 2017 Eğitmen: Bülent SİYAH www.bulentsiyah.com

Eğitimin Hedefi Tüm katılımcıların Android hakkındaki temel kavramlara hakim olması ve eğitim sonunda geliştirilecek uygulama benzerinde uygulamaları yazabilecek kabiliyete ulaşması, karşılaşılacak sorunların üstesinden gelebilecek yeterliliğe ulaştırılması hedeflenmektedir. Bu eğitim içeriği en özet bilgilerle ve en hızlı şekilde mobil uygulama geliştirme için oluşturulmuştur. İçerik hazırlanırken muhtemel tüm gereklilikler göz önüne alınmıştır. İçeriklerin tümü orta düzeyde rahatlıkla tüm talepleri yerine getiren uygulamalar başarıyla yazılabilir.

Eğitim Gereksinimleri Katılımcılarımızın temel düzeyde olsa JAVA bilgisine sahip olmalı, bu bilgiye sahip olmayan kullanıcılar

sadece genel kültür düzeyinde mobil uygulamaların sadece yaşam döngüsünü öğrenerek eğitim

programından yararlanmış olacaklar.

Page 2: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

2

Her katılımcı için Android Studio ve SDK kurulumu yapılmış uygulama geliştirmeye hazır olan bilgisayar

olmalıdır.

Eğitim Sonu Uygulama Geliştirilmesi Eğitimin tamamlanmasının ardından, “welcome aktivitye” sahip, “splash screen” bulunan, “Shared

Preferences” kullanılmış, arayüzler arası animasyonlu geçişlere sahip, özelleştirilmiş “Dialog” ve “Toast”

gibi kullanıcı etkileşim araçlarının da kullanıldığı, “Runtime Permission” kullanılmış olan, kullanıcı giriş,

şifremi unuttum gibi “Login” ekranlarına sahip arayüz ile giriş yapılabilen, (Database - Data Caching) anket

verilerin alınabildiği “Anket Doldurma” ekranı bulunan ve topladığı verileri iç veritabanına (sqlite) yazabilen,

(otomatik offline mod) bu verileri kullanıcıyı etkilemeden ve uygun internet koşullarında servis yardımıyla

iletebilen, geçmişte doldurulmuş anketlerin listelendiği ve detay ekranın bulunduğu bir anket uygulaması

yazılacaktır.

Kaynak Paylaşımı Eğitim boyunca derslerdeki anlık kod ve link paylaşımları https://notepad.pw/AndroidEgitim linki üzerinden

yapılacaktır. Derslerin verimliliğini artırmak ve bölünmeleri azaltmak için sorular ve problemlerle ilgili

https://notepad.pw/AndroidEgitim linki üzerinden iletişim kurulabilir. Tüm katılımcılar sorulan soruları ve

cevapları buradan ortak olarak görebilecektir. Döküman içerindeki her proje ve kod bloğu Github ve Gist

üzerinden paylaşılacaktır. Referans olabilecek diğer kitap ve web sayfalara ait linkler aşağıda

paylaşılmıştır.

Kaynak linkleri

● Anlık kod ve link paylaşım,

Soru ve problemler

https://notepad.pw/AndroidEgitim

● Bütün halindeki proje

paylaşımları

https://github.com/bulentsiyah

● Kod bloklarından oluşan

paylaşımlar

https://gist.github.com/bulentsiyah

● Kitap tavsiyesi Android Studio Üzerinden Anlatımlı Örneklerle Android

Programlama Eğitimi

Page 3: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

3

Yazar: Aykut Taşdelen

● Web sayfaları https://github.com/googlesamples

https://android-arsenal.com/

https://gelecegiyazanlar.turkcell.com.tr/konu/android

http://umiitkose.com/android/

https://www.mobilhanem.com

http://www.vogella.com/tutorials/android.html

https://burakztrk.gitbooks.io/androidnotes

Page 4: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

4

Konular 1. Mobil Uygulama Geliştirme Hakkında

2. Bir Projenin Yaşam Döngüsü

a. Projenin kurgusu

b. Geliştirme ortamı detayları ve emülatör ile telefonun hazırlanması

c. Temel kavramlar ve Android e giriş (Activity, Servis, Receiver, Constant, Adapter vs.)

d. Proje oluşturma ve tüm proje yapısını tanıma

i. Manifest dosyası önemi ve detayı

ii. Style, Dimens, Color, String xml leri, Assets, Anim klasörü

e. Empty, Login, Maps, Tabbed Page ve Navigation Drawer proje kalıbı seçimi

f. Arayüz oluşturma argümanları.

i. Android Layout Türleri

ii. Button, Edittext, Textview, ImageButton, ImageView, Spinner, Listview, Seekbar arayüz

elemanları ve değer ölçümleri

iii. Progress, Alert Dialog, SnackBar ve Toast işlemleri

iv. Menü örnekleri (İkon veya Yazı, Alt menü, Popup menü)

v. İkon uyarlaması, Material Design Renk Kaynağı, Harici Font kullanımı

g. Google Play Store yayın aşamaları

i. İmzalı ve imzasız “apk” üretme

ii. Console detayları

iii. Ücretli ücretsiz yayınlama, uygulama içi satın alma

iv. Alfa, Beta yayınları

3. Android Activity Yaşam Döngüsü, Giriş ve Kayıt İşlemleri, Animasyonlu Giriş İşlemleri ve

3.Parti Yazılımlar, Splash Ekranı Ekleme ve Geçişler Arası Bilgi Aktarma (Bundle, Statik ve

Receiver)

a. Android activity yaşam döngüsü

b. Giriş ve kayıt işlemleri

c. Animasyonlu giriş işlemleri ve 3.Parti yazılımlar

d. Splash ekranı ekleme ve geçişler arası bilgi aktarma (Bundle, Statik ve Receiver)

Page 5: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

5

4. Android Shared Preferences Kullanımı ve Ayarlar Arayüzü

5. “Welcome” Tanıtım Arayüzleri Ekleme

6. Progress, Alert Dialog ve Toast Arayüzlerinin Özelleştirilmesi

7. Basit ve Özelleştirilmiş Listview kullanımı

8. Android Runtime Permission Kullanımı

9. Broadcast Receiver Kullanımı

a. Static Broadcast Receiver

b. Dynamic Broadcast Receiver

10. Android Sqlite Veritabanı Kullanımı

a. Ekleme, Silme, Güncelleme ve Listeleme (Resim kaydetme)

11. Timer, Servis, AsyncTask ve Handler(UI Thread) Kullanımı

12. Android Görüntü ve Video Alma

a. Kamera veya galeriden alınan resmi ekrana basma, SD karta kaydetme

b. Kamera veya galeriden alınan videoyu ekrana basma, SD karta kaydetme

13. Android Clipboard Manager, Ekran Görüntüsü Alma, Raw içerisndeki PDF Dosyasını Açma,

Picasso Kullanma

14. Android Location Listener (Gps ve Network-Fused) işlemleri

15. Android Google Maps Örneği

a. Pin ekleme, Harita ayarları açma/değiştirme

b. Çizgi çizdirme (manuel ve otomatik), Polyline, Polygon ve Circle Çizimi

c. InfoWindow, Geocoder ile adres bulma

d. Google Place Autocomplete kullanımı

16. Android Web Servis (Rest, WCF veya ASMX)

a. Ksop, Spring ve Retrofit kütüphaneleri kullanma

b. SOAP ve Rest web servislere bağlanma

17. Android Local Notification

a. Standart Bildirim

b. Genişletilmiş Bildirim

Page 6: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

6

c. Action Buttonlu Bildirim

d. Kombine Grup ve Alt Yazılı Bildirim

e. Özelleştirilmiş Bildirim

18. Android Firebase Push Notification

19. Android Firebase Analytics ile istatistik Toplama

20. Android Cihaz Bilgilerini Okuma, Bilgileri şifreleme (saklama ve gönderme durumlarında)

21. Android Loglama Örneği, İnternet Bağlantısı Kontrolü

22. Android Alarm Kullanımı (Alarm uyandırma servisi değil)

23. Android Badge Notification Kullanımı

24. Wifi Üzerinden Debug Etme

25. Apk sı Şifrelenmemiş Bir Uygulamayı Geri Çözme

26. Android Barcode Okuma (QR, UPC, EAN, Code) ve Mobil Cihazda Oluşturma

27. Android Servis içerisinden (Activity Değil) Alert Dialog Gösterme

28. Android Türkiye’de ki Son Depremler Uygulaması

29. Android Webview, Offline Web Sayfası (Html) Oluşturma ve Girilen Değerleri Okuma

30. Android Orientation (Ekran Döndürme) Sabitleme, Klavye Gizleme

Dahil Edilebilecek Diğer Konular ● Android Bildirim Dinleme (Notification Listener)

● Android Mesajlaşma Arayüzü ve Gönderimi (Web Socket)

● Android Check-In Uygulaması (Form ve Harita Seçimini Web Servise İletme)

● Android Tcp Client-Server işlemleri

● Android Rehber, Çağrı Kaydı Bilgileri Alma Uygulaması

● Android Call Recorder Uygulaması Örneği

● Uygulama İçi Satın Alma ve Kontrolü

Page 7: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

7

Page 8: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

8

Ders İçeriği

1.Mobil Uygulama Geliştirme Hakkında 2017 itibariyle Android 2 Milyar kullanıcı, Apple 1 Milyar kullanıcı barajlarını aşmış durumda. Bu verilerin anlamı şöyle yapılacak işler aslında daha yeni başlıyor (Android 2013 yılında 1 Milyar barajına ulaşmıştı) . Bu standart gelişim haricinde Yapay Zeka (AI), Nesnelerin interneti (IoT), Artırılmış gerçeklik (AR) ve Sanal gerçeklik (VR) kavramlarıyla da mobil dünyanın nasıl büyüyeceği yönünde tahminleri zorlayan gelişimlerin olacağının da göstergesidir. Özetle bu çalışmayı sadece uygulama yazmayı başarmak hedefinden çok, yapılabilecek bütün bu gelişimleri takip ve içinde olma yetkinliği kazandırması için bir adım olacak şekilde hedeflemeliyiz.

Google I/O 2017 etkinliği

Page 9: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

9

2.Bir Projenin Yaşam Döngüsü

2.a. Projenin kurgusu Bir projenin en başta bir hedefi vardır, bu hedef uygulama geliştirirken nelere ihtiyaç olacağını hangi teknolojilerin

kullanılacağını ve tüm gereksinimleri ve hatta ortalama bitiş süresini ortaya çıkartır. İşin başından tüm organizasyon

şeması ortaya çıkartıp modülleri ayırıp ilerlemek gerekir, örneğin mavi renge sahip bir butonu tıkladığımda ben

çalışıyorum diyebilen, birden fazla dile çevrilebilen, ücretsiz ama uygulama içi satın almaya sahip bir programı Google

Play Store yayınlamayı hedefleyelim.

Örnek toplamak için kullanılabilecek siteler:

www.pinterest.com

www.behance.net

Akış şeması (Flowchart)

Akış Şeması, mobil uygulamanın içindeki ekranlar arasındaki geçişleri, hangi ekrandan hangi ekrana geçileceğini ve

uygulama içindeki diğer navigasyonel fikirlerin tasarım süreci başlamadan önce görsel olarak düzenlenmesidir. Akış

şeması, uygulamanın içinde arayüzler arasındaki geçişin, çalışma akışının ve sürecinin her bir aşamasını (arayüzünün)

oklar ile birbirlerine bağlanarak görsel anlatımına denir. Mesela, bir sosyal medya uygulaması yapılıyorsa; “Giriş Yap”

ekranından başka hangi arayüzlere geçiş olacağı (mesela, “Şifreni mi unuttun?” ve “Kayıt Ol” ekranları). Bu akış

şeması aslında “kullanıcı uygulama içinde hangi arayüzden hangisine geçecek ve uygulama toplamda ne kadar arayüz

içerecek?” sorularına cevap vermek için tasarım aşamasının başında yapılmalıdır.

Akış Şeması için kullanılabilecek programlar:

https://www.lucidchart.com/

https://www.draw.io/

http://shapesapp.com/

https://www.gliffy.com/

Wireframing

Page 10: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

10

“Wireframe” aslında arayüz tasarımının şematik planıdır. Yani, tasarımın görsel bir iskeletidir. Wireframe, arayüzdeki

görsel elemanların yerleşimini genel hatlarıyla göstermek için yapılır. Butonların nerede duracağı, imgelerin

pozisyonları ve büyüklükleri ile metin aralarındaki ilişkiler bu süreçte çözülür.

Bazı Wireframe programları:

https://studio.design/

https://www.fluidui.com

http://www.simplediagrams.com/

https://gomockingbird.com/

http://www.lumzy.com/

Prototip / Kullanıcı deneyimi:

Mobil arayüz tasarımını bitirdikten sonra kolaylıkla bulunulabilecek ve kodlama bilmeden rahatlıkla kullanılabilecek

“Prototip yapma” programları ile mobil cihazlara yüklenebilecek çalışan küçük bir prototip tasarlanır.

Bu programların amacı hangi butonun ne işe yarayacağı, genel Wireframe ve akış şemasını daha görünür ve

kullanılabilir yapmaktır.

Prototip yapılabilecek programlar:

https://proto.io/

https://mockingbot.com/

https://www.invisionapp.com/

Bir projede olması gerekenler

● Dil bağımsız olmalı

Uygulamanın dil desteği için yapılması gereken tek şey kodlama yapılırken ilerde anlatılacak olan string

dosyası üzerinden tüm textlerin girilmiş olması. İşletim sistemi uygulama içindeki string dosyalarına bakarak

telefonun varsayılan diline ait dosyaya göre işlem yapıyor.

● Başarılı ikon, ana renklere sahip olmalı

https://icons8.com/

https://jgilfelt.github.io/AndroidAssetStudio/icons-launcher.html

https://www.materialui.co/

Page 11: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

11

https://www.computerhope.com/

https://material.io/guidelines/style/color.html#color-color-palette

● Welcome ekranları olmalı

● Splash screen olmalı

Page 12: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

12

● Firebase Analytics istatistik eklenmeli

● Apk şifrelenmeli

● Tanıtım videosu Play Store da eklenmiş olmalı, animasyon veya kullanım videosu

Page 13: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

13

https://www.youtube.com/watch?v=EJL9OP7MRZ0

● Tanıtım resimleri geniş ekran ve yazılı slogan başlıklar bulunmalı

Page 14: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

14

● Satma

○ Ücretsiz

○ Uygulama içi satın al

○ Ücretli

○ Video veya resimli reklamlar

2.b. Geliştirme Ortamı Ayarları ve Emülatör ile Telefon Hazırlanması Android Studio ve SDK indirme linki https://developer.android.com/studio/index.html

Page 15: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

15

Android Studio yüklemeler tamamlandıktan sonra dikkat edilecek husus SDK Platforms sekmesi için tüm Android

sürümleri indirmek yerine minimum, test cihazlarınızın ve en yüksek SDK platformlarını seçmiş olmak.

SDK Platforms Seçenekleri

SDK Tools sekmesinde ise Play store, USB debug ve diğer işlemler için aşağıdaki seçimlerin yüklenmiş olması

Page 16: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

16

SDK Tools Seçenekleri

Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma

anında izin kontrolü (RunTime Permission) eklenmiştir. Bu köklü değişiklik yüzünden Emülatörünüz 6.0 olursa

sorunsuz testlerinizi yapabilirisiniz.

Emülator konusunda birden çok seçenek olsa da https://www.visualstudio.com/tr/vs/msft-android-emulator/

Microsoftun emülatörü kullanılabilir. Kurulum sonrası cihaz boyutu seçimi hedef kullanılara yönelik olmalıdır. Eğer

birden fazla hedef kullanıcı varsa en geniş kullanıcı küme için seçim yapılabilir.

Page 17: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

17

Yükleme sonrası emülatörün görüntüsü:

Page 18: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

18

Page 19: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

19

Daha popüler olan GenyMotions Emülatör ile kodlarınızı çalıştırabilirsiniz. Emülatörler temelde aynı prensiple

çalıştıkları için istediğiniz Emülatörü kurabilirsiniz ama en popüleri GenyMotions dır. İndirme için hesap

oluşturduktan sonra https://www.genymotion.com/download-trial/ indirebilirsiniz ama 30 günlük deneme sürümü

bulunmaktadır. Genel kültür olması sebebiyle bu emülatöre değinilmiştir.

Android Studio kendi içindeki Emülatörü kullanmak için Tools -Android-AVD Manager altından eklenebilir. Sanal

makine kullanımı mevcut olanlar şöyle bir hata ile karşılaşabilirler. Bu hatayı çözmek için Biostan veya Intel Processor

(SDK ile yükleme yaptığınızda programlarınız içinde yüklü olmalı) çalıştırıp kullanım için aldığınız hatayı devre dışı

bırakabilirsiniz.

Page 20: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

20

Telefonda Debug Yapmaya Hazırlanma

Bunun için telefonun ayarlar bölümündeki geliştirici modu alanı açık olmalı, açık değilse aşağıdaki ekranda sizin

telefon modelinize göre değişse de Derleme Numarasına (Model numarası, Android sürümü, çekirdek sürümüde

olabilir) ard arda birkaç kez basınız. Geliştirisi seçeneklerini aktif hale getirip USB hata ayıklama açmalısınız. Ardından

yine ayarlar içinde Güvenlik bölümündeki bilinmeyen kaynaklara izin ver seçeneği seçilmeli. Debug anında bu

bilgisayara güvenmeli diye soru sorulacaktır, o dialogunda onaylanması halinde sorunsuz bir şekilde debug yapılabilir.

Page 21: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

21

Page 22: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

22

Page 23: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

23

Page 24: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

24

2.c. Temel kavramlar ve Android e giriş (Activity, Servis, Receiver, Constant, Adapter vs.) Activity Nedir ?

Activity Android’in taban sınıflarından biridir. Bu sınıf tarafından oluşturulan nesneler uygulamamızda ki ekranları

temsil eder.

Android sınıflarından biri olan View, kullanıcı arayüzünü oluşturan nesneleri içerir. Bir kaç View nesnesi; TextView,

ImageView, Button, EditText

Intent: Intent'in kelime karşılığı niyet, amaç demektir. Android'in diğer Activity'ler veya herhangi bir bileşenine

erişirken bu kavramı kullanmamız gerekiyor. İki çeşit Intent karşımıza çıkacaktır. Bunlardan birinci Explicit Intent(Açık

Niyet), ikincisi ise Implicit Intent(Kapalı Niyet) Explicit intentin kullanım amacı uygulamanıza yerleştirdiğiniz

fonksiyonun hangi uygulama ile devam ettirileceğine siz karar verebiliyorsanız bu intent Explicit Intent ile sağlanır.

Örneğin, Maps uygulaması ile etkileşime geçerken varsayılan olarak Google Maps uygulamasını yazılımcı olarak

doğrudan tanımlamanız bu intent türüne girer. Implicit Intent ise yine aynı uygulama için cihazda hangi map

uygulamasının kullanılacağına kullanıcının karar vermesini isterseniz bu kullanımda Implicit Intent olur.

Service: Bu bileşen ile doğrudan kullanıcı ile etkileşim halinde olmayan veya arka planda çalışabilen bir uygulama

geliştirebilirsiniz. Örnek verecek olur isek, bir müzik çalar geliştirdiniz ve kullanıcının uygulamanız ile müzik dinlerken

aynı anda farklı bir uygulamaya geçtiğinde müzik çalarınız kapanmasın istiyorsanız bu uygulamayı service olarak

geliştirmeniz size yardımcı olacak çözümdür. Resim upload etme veya indirme görevlerinde de service

kullanabilirsiniz. Kısaca arka planda kullanıcı bekletilmemesi gereken durumlarda kullanılır.

Broadcast Receivers: Bu bileşen, uygulamanızın android ile haberleşmesinde kullanacağınız bir özelliktir. Bu özellik ile

geliştirdiğiniz uygulamanız android'de gerçekleşen işlemleri dinleyip, aynı şekilde dinlemede olan diğer uygulamalar

ile etkileşime geçebilir olacaktır. Örneğin, telefonunuz kulaklığın takıldığını veya gelen bir sms'i Broadcast Receiver

bileşeni ile algılar. Bunun dışında kendi uygulamanız içerisinde servislerin birbiriyle veya activity servis arasında

iletişim kurulabilir.

Content Providers: Uygulamanızı geliştirdiğiniz zaman, uygulamanıza ait bileşenler (veritabanı gibi) sadece

uygulamanızın erişimine açıktır. Eğer bu bileşen kullanırsanız uygulamanıza ait veritabanı diğer uygulamalar ve

işletim sistemi tarafından erişilebilir olacaktır. Android sağladığı bazı içerik sağlayıcılar, Contacts Provider, Settings

Provider vb..

XML (Extensible Markup Language) Genişletilebilir İşaretleme Dili anlamına gelmektedir. Hem insanlar hemde

bilgisayarlar tarafından kolayca anlaşılabilen dokümanlar oluşturmaya yarayan bir işaretleme dilidir. XML

dokümanları ağaç veri yapısı şeklinde yazılır.

Page 25: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

25

Application Context: Yukarıda saydığımız bileşenlerden bir kaçı veya tamamı bir araya gelerek uygulama ortamınız

meydana getirir. Yukarıdaki tüm bileşenler bu içerikten türetilmiştir. Bütün bu bileşenleri uygulamanıza eklerken

uygulamanızın bu bileşenleri kullanabilmesi için tanıtılması gerekir.

Diğer tüm kavramlar aşağıdaki kaynaktan erişilebilir.

https://developers.google.com/android/for-all/vocab-words/?hl=tr

2.d. Proje oluşturma ve tüm proje yapısını tanıma Manifest AndroidMenifest.xml dosyası

Uygulama izinlerinin, çalışacak aktivity, servis receiver ların belirtildiği dosyadır. Uygulamanın hangi aktivity nin

başlangıç olduğuna karar verildiği yerdir.

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

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

<receiver android:name=".CallReceiver" >

<intent-filter>

<action android:name="android.intent.action.PHONE_STATE" />

</intent-filter>

<intent-filter>

<action android:name="android.intent.action.NEW_OUTGOING_CALL" />

</intent-filter>

</receiver>

<activity

android:name=".KisiEkleDuzenle"

android:windowSoftInputMode="stateHidden" />

Java Klasörü

Bu klasör altında Java dosyaları, kaynak kodları bulunmaktadır. Klasörleme mantığı activityler, servisler, receiverlar

ayrı ayrı gruplara bölmek gerekir.

Page 26: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

26

assets Klasörü

Harici fontların içinde bulunduğu klasördür.

Res Klasörü

Anim: Animasyon xmlerinin bulunduğu dosyadır.

Color: Tüm renkler buradaki color.xml altında bulunur.

Drawable: Uygulamada kullanılacak resim dosyaları tutulur. Buna ek olarak görünümle ilgili arkaplan değişikliğine

sebep olabilecek xmleleri barındırır.

Layout: Tüm aktivity, listview itemlerı için tasarlanmış ekranlar bulunur. Toast ve Progress dialog tasarımlarıda

burada bulunur.

Page 27: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

27

Menu: Herhangi bir aktivity de kullanılmak üzere menu dosyaları bulunur. Bu menu dosyaları uygulama içinde sağ

üstte ikon veya yazı olarak bulunabilir.

Mipmap: Uygulama ikonlarının veya resimlerin farklı boyutlardaki cihazlarda sorunsuz görünmesi için hdpi, mdpi

xhdpi, xxhdpi, xxxhdpi şeklinde klasörler bulunur. Bu klasörlere ikonların belirtilmiş boyutlardaki resimleri eklenerek

düzgün görünmesi sağlanır.

https://developer.android.com/guide/practices/screens_support.html

Values: Yazı, öçlüm ve stil dosyalarının bulunduğu klasördür. Özellikle başka dillere çevirmek için bu klasörü ülke

kodu eklenerek değişmesi sağlanıyor. Örneğin Orjinali ingilizde olan bir uygulamaya Values-tr klasörü oluşturulup

içine string xml atılırsa dil alt yapısı eklenmiş oluyor, geriye çeviri metinlerini eklemek kalıyor.

Page 28: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

28

Stil değişimi için values altındaki style.xml içerisine özelleştirilmiş stil kodları eklenir. Bu dosyada varsayılan tüm

tanımlar mevcuttur örneğin ilk oluştuğunda

<!-- Base application theme. -->

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

<!-- Customize your theme here. -->

<item name="colorPrimary">@color/colorPrimary</item>

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>

<item name="colorAccent">@color/colorAccent</item>

</style>

Şeklinde kullanılan aktivity renkleri ile ilgili bilgiler içerir. Bundan farklı olarak bir butonu stilini aşağıdaki gibi

değiştirilir.

<style name="CustomStyleButtonSuccess" parent="@android:style/Widget.Button">

<item name="android:gravity">center</item>

<item name="android:background">@drawable/custom_button_blue</item>

<item name="android:textColor">@color/white</item>

<item name="android:padding">10dip</item>

Page 29: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

29

</style>

libs: Kütüphanelerin tutulduğu klasör.

Gradle: Geliştirme aşamalarını otomatize eden açık kaynak kodlu Android Studio üzerinde çalışan bir yapı sistemidir.

Android Studio da bir proje oluşturduğumuzda otomatik olarak gradle build sistemi devreye girer ve build işlemini

gerçekleştirir. Burada proje, kütüphane, proguard ve anahtarlarla ilgili bilgiler tutulur. Burada ki minSdkVersion ve

targetSdkVersion daha önce AndroidManifest dosyasında bulunan değerlerin aynısıdır. compileSdkVersion da

projenizi compile etmek istediğin SDK versiyonu anlamına gelir.

Gradle projelerinde her modül için birer tane, genel proje için de 1 tane build.gradle dosyası vardır. Başlangıçta sizin

kullanacağınız tek dosya ‘app’(bu örnek projede) modülünün içinde olan build.gradle dosyasıdır.

Gradle’ın sağladığı en büyük avantaj kütüphane yönetim sistemidir. Projenizin ihtiyaç duyduğu herhangi bir açık

kaynak kodlu kütüphaneyi, projenize tek satır kod ile ekleyebilirsiniz. ( app dizinindeki build.gradle içerisinde

bulunan dependencies içerisinde bu işlemi kolayca gerçekleştirebilirsiniz böylece kullanacağınız kütüphaneyi

otomatik olarak internet üzerinden sizin için indirecektir.)

compileSdkVersion 25

Page 30: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

30

buildToolsVersion "25.0.2"

defaultConfig {

applicationId "com.bulentsiyah.familyreminder"

minSdkVersion 16

targetSdkVersion 25

versionCode 13

versionName "1.0914"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}

compile 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3'

compile 'com.github.dmytrodanylyk:android-morphing-button:98a4986e56'

compile 'com.github.ugurtekbas:dialTimePicker:8d263fc3a1'

compile 'de.hdodenhof:circleimageview:2.1.0'

Page 31: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

31

Page 32: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

32

2.e. Empty, Login, Maps, Tabbed Page ve Navigation Drawer proje kalıbı seçimi

Page 33: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

33

Page 34: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

34

Page 35: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

35

Basic Activity

Page 36: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

36

Bottom Navigation Activity

Page 37: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

37

Full Screen Activity

Page 38: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

38

Google AdMob Ads Activity

Page 39: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

39

Page 40: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

40

Google Maps Activity

Page 41: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

41

Eğer emülatör kullanıyorsanız, yukarıdaki durum için http://www.alteridem.net/2017/02/02/installing-google-play-

gapps-visual-studio-android-emulators/

yönergeleri yaparak sorunu çözebilirsiniz.

Page 42: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

42

Login Activity

Page 43: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

43

Master/Details Flow Activity

Page 44: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

44

Page 45: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

45

Navigation Drawer Activity

Page 46: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

46

Settings Activity

Page 47: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

47

Tabbed Activity

Page 48: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

48

Page 49: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

49

Page 50: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

50

Page 51: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

51

2.f. Arayüz oluşturma agrümanları Android Layout Türleri

RelativeLayout : RelativeLayout ile birlikte Android görsel bileşenlerini istediğimiz yere sürükleyip kullanabiliriz. Bu

layout içerisinde yer alan bileşenleri de kendi içerisinde konumlandırabiliriz sağına göre, soluna göre, alt kısma göre,

üst kısma göre. Relative Layout ile daha esnek tasarımlar yapabiliriz.

LinearLayout: LinearLayout ile birlikte tüm android bileşenlerini tek bir konumda kullanabiliriz. orientation özelliğini

kullanarak yatay LinearLayout (horizontal) ve dikey LinearLayout (vertical) olarak da konumlandırabiliriz. Alt alta yada

yan yana aynı çizgi üzerinde bulunacak componentleri LinearLayout ile kullanırız.

TableLayout: TableLayout ile birlikte Android bileşenlerini bir tablo yapısına yerleştirirsniz. Html’deki gibi tablo yapısı

şeklinde göstermek için kullanılır.

FrameLayout: FrameLayout ile birlikte Android bileşenleri üst üste biner. Örnek verecek olursak; iki butonunuz var ve

aynı yerde konumlansın istiyorsunuz, biri gözüktüğünde diğeri kaybolsun ve tam tersi koşulda gerçekleşsin

istiyorsanız FrameLayout kullanabilirsiniz. Başka bir örnek ise elinizde bulunan bir Listview üzerinde bir butonun her

zaman sabit kalmasını istiyorsunuz. Bu durumda FramelLayout kullanabilirsiniz.

GridLayout: row ve column yapısına sahip olan android bileşenlerini grid de toplayan layout türüdür.

Page 52: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

52

ConstraintLayout: Android Studio 2.2 ile gelen bu layout ile Android bileşenlerini sürükle bırak yaparak responsive bir

görüntü elde edebiliriz ayrıca alt alta ve yan yana android bileşenlerini elde etmek için kullandığımız LinearLayout

yerine ConstraintLayout kullanarak her cihaz için uyumlu tasarımlar oluşturabiliriz. Bu layout sınıfına en iyi örnek

https://medium.com/exploring-android/exploring-the-new-android-constraintlayout-eed37fe8d8f1 linkten

erişebilirsiniz.

Page 53: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

53

Button, Edittext, Textview, ImageButton, ImageView, Spinner, Listview, Seekbar arayüz

elemanları ve değer ölçümleri Örnek kodlar: https://gist.github.com/bulentsiyah/961000db4299f8a5ad8ba93b0f0a3b46

Page 54: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

54

Progress, Alert Dialog, SnackBar ve Toast işlemleri Örnek kodlar: https://gist.github.com/bulentsiyah/c6fb358635ad0f7f8a94b707578f9cdf

Page 55: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

55

Menü örnekleri (İkon veya Yazı, alt menü, Popup menü) Örnek kodlar: https://gist.github.com/bulentsiyah/ef7848fdd6975c06d0538ba7244ce39e

Page 56: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

56

İkon uyarlaması, Material Design Renk Kaynağı, Harici Font kullanımı Uygulama için seçilen ana ikon her boyuttaki cihaza uyarlanmalı bunun için online araçlar mevcut, bu araç sayesinde

ikonunuzu Android için uygun çözünürlüklere dönüştürmektedir. https://jgilfelt.github.io/AndroidAssetStudio/icons-

launcher.html

Bu online araç haricinde ikon kaynağı olabilecek https://icons8.com/, https://www.flaticon.com/

Renk kaynağı için https://material.io/guidelines/style/color.html#color-color-palette, https://flatuicolors.com/

Bu kaynaklardan alınan renk kodları values klasoru altındaki colors.xml içinde toplanmalıdır. Örnek kullanım

<color name="white">#ffffff</color>

<color name="gray">#b6b5b7</color>

<color name="blue">#36A9FF</color>

<color name="green">#00D700</color>

<color name="red">#D81300</color>

<color name="yellow">#FFA400</color>

Page 57: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

57

<color name="black">#000000</color>

Harici font kullanımı için main altında assets klasörü eklenmeli, fonts klasörü eklenmeli ve bu klasör içine font

dosyaları konulmalıdır. Font kaynağı için https://www.dafont.com/,

https://www.fontsquirrel.com/fonts/list/popular

Seçilen fontun kullanımı için uygulama başlığı değiştirme kodu

SpannableString s = new SpannableString(getString(R.string.app_name));

s.setSpan(new TypefaceSpan(this, "fonts/Pacifico.ttf"), 0, s.length(),

Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

actionBar.setTitle(s);

veya bir textview font değişimi için

Typeface face = Typeface.createFromAsset(getAssets(),

"fonts/Pacifico.ttf");

TextView tt= (TextView) findViewById(R.id.textView2);

tt.setTypeface(face);

Page 58: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

58

2.g. Google Play Store yayın aşamaları

İmzalı ve imzasız “apk” üretme

Page 59: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

59

Page 60: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

60

Page 61: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

61

Page 62: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

62

Page 63: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

63

Page 64: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

64

Console detayları Tek bir google hesabıyla bir kereye mahsus 25 dolarlık geliştirici lisansı alınabiliyor. Alınan bir lisans ile bir başka

hesap davet edilebiliyor, bu davet geliştirme düzenleme yayınlama gibi erişim kısıtlarına sahip olabiliyor.

Page 65: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

65

Page 66: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

66

Page 67: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

67

Page 68: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

68

Page 69: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

69

Page 70: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

70

Ücretli ücretsiz yayınlama, uygulama işi satın alma Play store uygulamanızı ücretsiz, ücretsiz ama uygulama içi satın almalı, ücretli veya ücretsiz ama reklam içerecek

şekilde yayınlayabilirsiniz.

Page 71: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

71

Page 72: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

72

Alfa, Beta yayınları Bir uygulamayı yayınlamadan önce alfa veya beta aşamalarında yayına sunulabilir. Bu aşamalarda açık ve kapalı

alanlar oluşturarak uygulamanın yayın öncesi test ve kontrolleri yapılabilir.

Bu aşamalarda açık yayında en az 1000 olacak şekilde katılımcı sayısı belirlenip, url gönderdiğiniz kişiler uygulamanızı

indirip test edebiliyorlar.

Page 73: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

73

Bu aşamalarda kapalı yayında ise belirlediğiniz kişilerin e-posta adresleri listeye ekleniyor, dolayısıyla sadece erişim

linkine sahip ve listedeki kişiler uygulamayı indirebiliyor.

Page 74: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

74

3.Android Activity Yaşam Döngüsü, Giriş ve Kayıt İşlemleri,

Animasyonlu Giriş İşlemleri ve 3.Parti Yazılımlar, Splash Ekranı Ekleme

ve Geçişler Arası Bilgi Aktarma (Bundle, Statik ve Receiver)

3.a. Android activity yaşam döngüsü Android Activity methodların hangi sırayla çalıştığını bilmek gerekir. Bu bilgi sayesinde bir harita, konum alma gibi

uygulamalar geliştiriyorsanız arayüz oluşmadan bazı tanımları başlatıp bağlantı kurmalısınız. Detay bilgi

https://developer.android.com/guide/components/activities/activity-lifecycle.html

onCreate : Activity başlatıldığında ilk çalışan method.

onStart : onCreate methodu işlemini tamamladıktan sonra çalışan method.

Page 75: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

75

onResume : Activity çalıştıktan sonra bütün ön yüzdeki işlemler bittiğinde activity devamı için çalışan kısımdır.

Activity arka plana geçip tekrar ön plana geldiğinde onResume methodu tetiklenir ve Activity çalışmaya devam eder.

onPause : Activity arka plana alındığında bu metod tetiklenir.

onStop : Aktivite arkaplana atıldığında çalışan bir diğer metoddur. Kullanıcı Activitye geri döndüğünde onRestart

methodu tetiklenir ve onStart methodundan itibaren yaşam döngüsü devam eder. Eğer kullanıcı geri dönmezse ilgili

Activity e ( bu durumda Activity sonlandı veya sistem tarafından kapatıldıysa ) onDestroy methodu tetiklenir.

onDestroy : Yaşam döngüsünün en son kısmıdır. Activity sonlandığında tetiklenir.Bellekte uygulama için kullanılan

tüm kaynaklarda sonlandırılmış olur.

Page 76: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

76

Örnek kodlar: https://gist.github.com/bulentsiyah/56b8e5cb5c46f89e443b9456872476b3

3.b. Giriş ve kayıt işlemleri Bu tip ekranlarda görsel uyumluluk, sade ve kolay kullanım yeterlidir. Örnek kodda giriş bilgilerinde yapılan hatalar

Edittext in error bilgilendirme özelliği ve validation işlemleri kullanılmıştır, kodlar incelendiğinde daha net

anlaşılabilir. Detaylı incelenirse kayıt ekranında status bar renginin arkaplan rengine göre değiştirilmesi sağlandı.

Page 77: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

77

Örnek kodlar: LoginActivity ve RegisterActivity java ve ilgili layoutlar incelenmelidir.

https://github.com/bulentsiyah/Android_Activity_Yasam_Dongusu__Giris_ve_Kayit_islemleri__Animasyonlu_Giris_i

slemleri

Page 78: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

78

3.c. Animasyonlu giriş işlemleri ve 3.Parti yazılımlar

Uygulamalara 3.parti kütüphaneleri eklemek için eğer gradle üzerinden yapılacaksa build.gradle (Module:app)

içerisine dependencies altında kütüphane sağlayıcının da belirteceği şekilde compile

'com.wrapp.floatlabelededittext:library:0.0.6' şeklinde kütüphane linki eklenerek uygulama dahil olması sağlanır.

Eğer bu yapı bir jar dosyası ise önce jar dosyası ana proje klasörü içine taşınıyor, ardından File menüsü altında Project

Structure seçilip sol menüden app ve açılan tab seçeneklerden de Dependencies seçilip, sağ taraftan jar dosyası

seçilir. Bu seçim tamamlandığında jar dosyası yine gradle tarafından uygulamaya dahil edilmiş olur

Page 79: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

79

Float Labeled EditText

Bu kütüphane, edittext arayüz elemanı kullanılırken yazım alanı doldurulduğunda hint içeriği yukarı başlık bölümüne

çekerek kullanıcıya hangi alanı doldurduğu bilgisi vermiş olur. Kütüphane gradle ile compile

'com.wrapp.floatlabelededittext:library:0.0.6' yazılarak uygulamaya dahil edilebilir.

Page 80: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

80

Page 81: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

81

Örnek kodlar: LoginActivity içinde Boolean floatLabeledEditText=false; true yapılarak layoutlar incelenmelidir.

https://github.com/bulentsiyah/Android_Activity_Yasam_Dongusu__Giris_ve_Kayit_islemleri__Animasyonlu_Giris_i

slemleri

Android Circular Progress Button

Kütüphane gradle ile compile 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3' yazılarak

uygulamaya dahil edilebilir. Referans link https://github.com/dmytrodanylyk/circular-progress-button

Örnek Kod: https://gist.github.com/bulentsiyah/65c9df223073261b334e8e298f0a1fae

Circle Image View

Kütüphane gradle ile compile 'de.hdodenhof:circleimageview:2.1.0' yazılarak uygulamaya dahil edilebilir. Referans

link https://github.com/hdodenhof/CircleImageView

Page 82: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

82

AndroidViewAnimations

Kütüphane gradle ile compile 'com.android.support:support-compat:25.1.1', compile

'com.daimajia.easing:library:2.0@aar', compile 'com.daimajia.androidanimations:library:2.3@aar' yazılarak

uygulamaya dahil edilebilir. Referans link https://github.com/daimajia/AndroidViewAnimations

Page 83: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

83

Bunların haricinde SecretTextView https://github.com/matthewrkula/SecretTextView, Android Working with XML

Animations http://www.androidhive.info/2013/06/android-working-with-xml-animations/ , Android Floating Action

Button https://github.com/Clans/FloatingActionButton

3.d. Splash ekranı ekleme ve geçişler arası bilgi aktarma (Bundle, Statik ve Receiver) Android Splash Screen

Page 84: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

84

Splash screen uygulama her açıldığında bir kaç saniye görünen ve çoğunlukla uygulama ikonu ve başlığını içeren

ekranlardır.

Örnek kodlar: SplashScreen.java ve activity_splashscreen.xml incelenmelidir.

Page 85: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

85

https://github.com/bulentsiyah/Android_Activity_Yasam_Dongusu__Giris_ve_Kayit_islemleri__Animasyonlu_Giris_i

slemleri

Activityler arası bilgi aktarma

Bilgi aktarma tamamıyla kullanım amacına göre değişmektedir. Örneğin sadece basit bir seçim sırası bilgisi

aktarılacaksa bir statik değişken setlenip, diğer arayüzde bu setlenmiş değer üzerinden işlem yapılabilir. Bunun

dışında eğer activityler arası bağ varsa bu aktarımlar Bundle ile de yapılabilir. Bahsedilen iki yöntemde algoritmanıza

göre karar vereceğiniz aktarım biçimleridir.

Eğer iki activity arasında yakın geçiş yok ise ama bilgi aktarılması gerekiyorsa o zaman Receiverlar kullanılmalıdır.

Örneğin tablar halinde bir birinden ayrılmış ekranlar mevcut, ve bu aktif ekranda ekstra dialoglar mevcut ve yapılan

bir seçimle aslında tüm activityleri yakından ilgilendiren bir durum olduğunu düşünelim bu durumda Receiverlar ile

aktarılan bilgi sayesinde tüm ekranlarda görünümler yenilenebilir.

Page 86: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

86

Page 87: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

87

Örnek kodlar: BilgiAktarilmaEkrani ve BilgiAktarilmaEkrani2 ve ilgili layout lar incelenmelidir.

https://github.com/bulentsiyah/Android_Activity_Yasam_Dongusu__Giris_ve_Kayit_islemleri__Animasyonlu_Giris_i

slemleri

Page 88: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

88

4.Android Shared Preferences Kullanımı ve Ayarlar Arayüzü

Android uygulamanız içerisinde bir depolama biçimi olan SharedPreferences, uygulama önbellekleme kısmında

bulunur. Uygulama silinmediği yada önbelleğini temizlenmediği sürece uygulama hafızasında yer edinir.

SharedPreferences ile oluşturduğumuz veriler kullandığımız android cihazımızda xml dosyası olarak depolanmaktadır.

Veriler xml‘de tutulduğu için genel olarak bir boyut sınırı yok fakat xml boyutu 1Mb‘ti aşarsa bazı telefonlarda

uygulama çökme problemi oluşabiliyor. Bu yüzden büyük verileri depolamayı düşünüyorsanız sqlite kullanmanız

gerekmektedir. SharedPreferences sadece ayar veya kullanıcıya ait bazı bilgileri saklamak amacıyla kullanılabilir.

SharedPreferences kullanarak string,int,boolean,float,long tipinde veriler kaydedebiliriz.

Login bilgileri saklama örneği

Page 89: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

89

Örnek kodlar: MainActivity, PrefManager ve activity_main.xml incelenmelidir.

https://github.com/bulentsiyah/Android_Shared_Preferences_Kullanimi_ve_Ayarlar_Arayuzu__Welcome_Aktivity_

Ornegi

Diğer bir uygulamanın Shared Preferences verileri okuma

Page 90: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

90

Bir uygulama, kendi Shared Preferences dosyasının diğer uygulamalar tarafından okunması iznini vererek veri

paylaşımı yapabilir. Bu kullanım biçimi şöyle düşünülebilir, aynı kişi veya kuruma ait iki ayrı uygulama ortak giriş

bilgilerini veya ayar dosyasını kullanarak çalışması sağlamak için kullanılabilir.

Örnek kodlar: BaskaUygulamaninDosyasi ve activity_baska_uygulamanin_dosyasi.xml incelenmelidir.

https://github.com/bulentsiyah/Android_Shared_Preferences_Kullanimi_ve_Ayarlar_Arayuzu__Welcome_Aktivity_

Ornegi

Page 91: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

91

Ayarlar Örneği

Bu örnekte amaç uygulama ait tüm kullanım seçenekleri tek yerde toplamak. Ayarlar bölümü iç içe kategoriler

şeklinde yapılabilir, örneğin Android Studio içerisinde “settings” şablonu seçildiğinde önce ayar başlıkları ardından

her bir başlığa ait ayar işlemlerine erişiebilir. Bu örnkte ise başlıksız direkt ayar dosyası örneği eklenmiştir, detay

işlemler için “settings” şablonu seçilebilir.

Örnek kodlar: AyarlarActivity ve settings.xml incelenmelidir.

Page 92: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

92

https://github.com/bulentsiyah/Android_Shared_Preferences_Kullanimi_ve_Ayarlar_Arayuzu__Welcome_Aktivity_

Ornegi

5.“Welcome” Tanıtım Arayüzleri “Welcome” tanıtım arayüzleri, ilk yüklemede veya bir güncelleme yayınlandığında kullanım kolaylığı sağlayan veya

kısa bilgiler içeren arayüz geçişlerinden oluşur. Aşağıdaki örnek https://www.androidhive.info/2016/05/android-

build-intro-slider-app/ alınmıştır. Bu örnek dışında https://github.com/stephentuso/welcome-android projeside

incelenebilir.

Örnek kodlar: https://github.com/bulentsiyah/Android_Tanitim_Arayuzleri_Ornegi

Page 93: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

93

6.Progress, Alert Dialog ve Toast Arayüzlerinin Özelleştirilmesi

Örnek kodlar: https://github.com/bulentsiyah/Progress_AlertDialog_ve_Toast_Arayuzlerinin_Ozellestirilmesi

7.Basit ve Özelleştirilmiş ListView Kullanımı Basit ListView Örneği

Page 94: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

94

Örnek kodlar: BasitListViewActivity ve activity_basit_list_view.xml incelenmelidir.

https://github.com/bulentsiyah/Basit_ve_Ozellestirilmis_ListView_Kullanimi

Özelleştirilmiş ListView Kullanımı

Detaylı örnekler http://www.vogella.com/tutorials/AndroidListView/article.html

https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-201/listview-kullanimi

Adapter bir veri kaynağıyla, veriye ihtiyacı olan nesneyi birbirine bağlamaya yarayan yapılardır. ListView gibi bir dizi

veriyi içinde bulunduran yapılara, bu verileri ArrayAdapter aracılığıyla veririz. ArrayAdapter bir veri kaynağındaki

verileri (kısaca, veri modelini) görsel öğelerde kullanmaya uygun hale getirir. Bunun görsel anlatımı şu şekildedir:

Page 95: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

95

getCount(): int değer döner. ListView'da gösterilecek satır sayısını ifade eder. Verilerimizi barındıran ArrayList'in

boyutu (size()) burada bize yarayacak.

getItem(int position): Object değer döner. position ile belirtilen satıra denk düşen nesneyi döndürür. Bu nesne satır

olarak gösterilecek nesnedir. Bundan dolayı Object yerine doğrudan model sınıfınızdan oluştuğunuz nesneyi de

dönüş türü olarak belirleyebilirsiniz.

getItemId(int position): long değer döndürmelidir. Veri listesinde position ile sırası belirtilen satırın kimlik numarasını

(id) döndürür. Liste içeriğini veri tabanına kaydedecekseniz ya da orada eşlemeler yapacaksanız önem kazanır.

getView(int position, View convertView, ViewGroup parent): View değer döner. position ile sırası belirtilen satır için

bir View döndürür. Bu metot içindeyken her satır için XML'i okuyup View haline getirme işlemi (inflating) yaparız. Bu

hususta bize LayoutInflater servisi yardımcı olacaktır.

Page 96: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

96

Örnek kodlar: OzellestirilmisListViewActivity, activity_ozellestirilmis_list_view ve listview_item incelenmelidir.

https://github.com/bulentsiyah/Basit_ve_Ozellestirilmis_ListView_Kullanimi

8.Android Runtime Permission Kullanımı İşlem anında izin alma (Runtime Permission) Android 6.0 (versiyon 23) ile gelen özellikleriden biridir. Bu işlemle bazı

izinleri kullanırken sadece manifest dosyasına eklemek yeterli değil, işlem anında tekrar kullanıcıdan izin almak

gerekir. İşlem anında izin gerektiren aşağıda sıralanmıştır. Runtime Permission gerektiren bir izni kullanıdığında

Android Studio tarafından uyarılırsınız.

Page 97: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

97

Page 98: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

98

Örnek kodlar: OzellestirilmisListViewActivity, activity_ozellestirilmis_list_view ve listview_item incelenmelidir.

https://gist.github.com/bulentsiyah/d8e851b4e7ccd5e84a353024ced21bec

9.Broadcast Receiver Kullanımı Android sistemi üzerinde gerçekleşen bazı olayların uygulamalar tarafından algılanması için kurulmuş bir yapıdır.

Sistem üzerinde gerçekleşen bir event’dan uygulama uyarılmak isteyebilir ve buna göre uygulama tepki verebilir.

Örneğin; Sms alınması, Batarya seviyesi, Uçak modu algılanması yada kulaklık takılması/çıkarılması gibi gibi.

Yukarda örneğini verdiğim olaylar gerçekleştiğinde Android işletim sistemi bir broadcast(yayın) yayınlar.

Uygulamalar belirli olayları dinlemek için register olurlar. Bu şekilde register olunan event sistem üzerinde

gerçekleştiğinde uygulama bir broadcast ile uyarılır ve uygulamada buna göre bir tepki verir.

Broadcast’lar iki şekilde oluşturabilinir. Bunlar; Static broadcast ve dynamic broadcast receiver’dır.

Static Broadcast Receiver

Page 99: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

99

AndroidManifest.xml içerisinde <receiver> tag’ı içerisinde belirilir. Uygulamanın çalışıp çalışmaması static boradcast

receiver’ı etkilemez.

Dynamic Broadcast Receiver

Activity yada Service içerisinde tanımlanmış olan broadcast’lardır. Dynamic broadcast receiverlar uygulamanın

Context’i üzerinde tutulur. Activity sonlandığında receiver da sonlanmış olur.

Page 100: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

100

Page 101: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

101

Örnek kodlar: BroadcastReceiverOrnegi, MyReceiverBroadcastReceiver, YenidenBaslatmaBroadcastReceiver ve

AndroidManifest.xml incelenmelidir. https://github.com/bulentsiyah/Basit_ve_Ozellestirilmis_ListView_Kullanimi

10.Android Sqlite Veritabanı Kullanımı SQLiteOpenHelper içerisinde yer alan onCreate ve onUpgrade metotlarını oluşturmamız gerekecektir. Aynı zamanda

SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version) yapıcısını da

oluşturmamız gerekir.

onCreate metodu eğer uygulamayla ilgili SQLite veritabanı oluşturulmamışsa (örneğin uygulama ilk defa çalışıyorsa)

bir SQLite veritabanı yaratır ve üzerinde metot içerisinde yer alan sorguları çalıştırır. Biz burada daha önce

Page 102: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

102

anlattığımıza benzer şekilde bir CREATE sql ifadesiyle ülke bilgilerine dair bir tablo oluşturduk. execSQL komutu da

oluşturduğumuz SQL sorgusunu veritabanında çalıştırarak, ilgili tabloları yaratmamızda bize yardımcı oldu. Siz de

uygulamanızda bu şekilde veritabanı yapısını oluşturabilirsiniz.

onUpgrade metodu, uygulamanın veritabanı güncellendiyse (örneğin yeni bir sürüm geldiyse) harekete geçecektir.

SQLiteOpenHelper’ın yapıcısına dikkat edersek, son değerin veritabanı sürümü olduğunu görürüz. Veritabanında

tablo yapısında bir değişiklik varsa ve eski sürümlerde güncelleme gerekiyorsa, bu metot içerisinde ilgili sorgular

çalıştırılır. Hangi sürümler arasında geçiş olacağını oldVersion ve newVersion değişkenleriyle anlayabiliriz. Gerekli

kontrol yapıları ile veritabanı güncelleme işlemlerini bu metod altında yapmalıyız.

Sqlite ile ilgili detaylı döküman http://www.sqlite.org/docs.html adresinde bulunmaktadır.

Ekleme, Silme, Güncelleme ve Listeleme (Resim dosyası eklemeyi içerir)

Page 103: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

103

Örnek kodlar: MainActivity, DatabaseHandler, KisiResimli, Utility, activity_main.xml ve listview_item.xml

incelenmelidir. https://github.com/bulentsiyah/Android_Sqlite_Veritabani_Kullanimi

11. Timer, Servis ve AsyncTask ve Handler(UI Thread) Kullanımı Handler

Handler sınıfı threadler arası haberleşmede kullanılmaktadır. Bu sınıf android.os paketi içerisinde yer almaktadır.

Sınıfın default constructor'ı ile hangi thread içerisinde nesne yaratılmışsa başka bir thread bu nesneyi kullanarak bu

threadin mesaj kuyruğuna girebilmektedir.

Page 104: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

104

Handler sınıfının postXXX metotları bulunmaktadır. Bu metotlar ilgili threadin içerisinde başka bir threadin

çalıştırılması için kullanılmaktadır.

Handler sınıfının post metodu ile bir thread içerisinde diğer threadlerin kullanımı sağlanır.

Timer

Arkaplanda çalışan, belirli aralıklarla tekrarlanmasını istediğimiz olaylara yön vermemizi ve bunları yönetmemizi

sağlayan yapılardır.

AsyncTask

Bazı işlemleri yaparken ve bu işlemler uzun sürme ihtimalleri var ise bu işlemler normal akış içerisinde yapılmaması

gerekir. Bunun için ön yüzde devam eden işlemlerden bağımsız olarak arka tarafta bazı işlemleri yapmamızı sağlayan

yapıya “AsyncTask” denir.

Yeni bir sınıf içerisine “AsyncTask” sınıfını “extend” ederek kullanacağız. “Extend” ettikten sonra temel olarak bir

metodu “override” etmemizi isteyecek ancak biz burada kullanılabilme ihtimali olan 5 temel metottan bahsedelim.

onPreExecute : İşlemler öncesi çalıştırılan metottur.

doInBackground : Burada yapılacak işlem gerçekleşir.

onProgressUpdate : “doInBackground” metodu içerisinde “publishProgress” metodu ile yapılan işlemin ilerleme

durumu hakkında kullanıcıya bilgi verebiliriz.

onPostExecuted : İşlem tamamlandığı zaman bu metot çalışmaktadır.

onCancelled : Her hangi bir sebepten dolayı iptal edilirse bu metot çalışmaktadır.

Servisler

Servis, arka planda çalışan ve kullanıcıyla her hangi etkileşime girmeyen bir bileşendir. Bir servis kullanıcıya ara

yüzüne sahip olmadığı gibi bir activity’nin lifecycle’ına bağlı değildir.

Servisler veri kontrolu, internet indirmeleri, veri işleme, içerik sağlayıcıları güncelleme gibi uzun vadede çalışan

tekrarlı ve sürekli çalışmaya ihtiyaç duyan işlemler için kullanılır.

Servislerin görünmez halde olan ya da aktif halde olmayan activitylere nazaran önceliğe sahiptir.Bu sebeple Android

işletim sisteminin bu işlemleri sonlandırması daha az görülür.

Page 105: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

105

Ayrıca sistem kaynağı yetersizliğinde sonlandırılan bir servis tekrar başlatılması için yapılandırılabilir.

Bir servise arka planda çalışan bir activity ile aynı önceliği atamak da mümkündür. Bu gibi durumda, ilgili servis için

görünür bir notification gereklidir. Bu durum da müzik player gibi uygulamalarda sık sık kullanılır.

onStartCommand() metodu çağrıldığında bir integer değer döndürür. Bu değer Android platformu bu servisi

sonlandırdığında kullanılacak değerdir. En çok kullanılan 3 tekrar başlatma seçeneği vardır bunlar;

Service.START_STICKY;

Eğer servis sonlandırılırsa tekrar başlatılır. Kendi durumunu yöneten servisler için kullanılır.

Service.START_NOT_STICKY;

Servis tekrar başlatılmaz. Zaten periyodik olarak tetiklemeli servislerde kullanılır.

Service.START_REDELIVER_INTEN;

Service.Start_sticky ile çok benzerdir fakat orjinal intent onStartCommand metoduna tekrar iletilir.

Servisin başlayıp başlamadığını Intent.getFlags() metodu ile kontrol edilebilir.

Bir servisi stopService() metodu çağrılarak durdurabilirsiniz. Servisi kaç kere startService(intent) ile çağırmış olursanız

olun, bir kere stopService() çağrıldığında servis durdurulur.

Bir servis stopSelf() metodu çağrılarak kendini durdurabilir. Genellikle bu servis işini bitirdiğinde kullanılır.

Page 106: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

106

Örnek kodlar: https://github.com/bulentsiyah/Android_Timer_Servis_AsyncTask_ve_HandlerUIThread_Kullanimi

Detay örnek: http://www.devexchanges.info/2015/12/android-basic-training-course-basic_15.html

12. Android Görüntü ve Video Alma

Page 107: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

107

Örnek kodlar: https://github.com/bulentsiyah/Android_Goruntu_Video_ve_Ses_Alma

13.Android Clipboard Manager, Ekran Görüntüsü Alma, Raw içerisndeki

PDF Dosyasını Açma, Picasso Kullanma Clipboard Kullanma

Page 108: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

108

Ekran Görüntüsü Alma

Page 109: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

109

Raw içerisndeki PDF Dosyasını Açma

Page 110: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

110

Picasso Kullanma Detaylı bilgi http://square.github.io/picasso/

Örnek kodlar:

https://github.com/bulentsiyah/Android_ClipboardManager_EkranGoruntusuAlma_PDFDosyasiniAcma

Page 111: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

111

14.Android Location Listener (Gps ve Network-Fused)

Örnek kodlar: https://github.com/bulentsiyah/Android_LocationListener_Gps_ve_Network_Fused_islemleri

15.Android Google Maps Örneği Harita kullanımı activity veya proje seçilirken maps şablonu seçilmesi durumunda Google Map Key ve gerekli izinler

projenize otomatik dahil olur.

Page 112: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

112

Otomatik oluşan altyapı doldurmak için google_map_api.xml bulunan yönergeleri takip edebilirsiniz.

Detaylı bilgi: https://developers.google.com/maps/documentation/android/start#get-key

Page 113: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

113

Yönergedeki proje seçinizi yaptıktan sonra dikkat etmeniz gereken kısmı, API Kitaplığında gerekli etkinleştirimelerin

yapıldığını kontrol etmek.

Page 114: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

114

Yukarıdaki izin haritanıza adres sorgulaması yapmanız için gereklidir. Detaylı bilgi

https://developers.google.com/places/android-api/autocomplete (compile 'com.google.android.gms:play-services-

places:11.4.2')

Bunun dışındaki diğer API’ler şöyle

Page 115: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

115

Page 116: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

116

Konuyla ilgili en yeni ve geniş kaynak http://googlemaps.github.io/android-maps-utils/

Marker Ekleme-Maps Ayarlarını Açma

Page 117: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

117

Maps Type Değiştirme

Page 118: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

118

Place Holder

Page 119: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

119

İki Marker Arasını Çizme

Page 120: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

120

Polygon Çizme

Page 121: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

121

Çember Çiz

Page 122: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

122

InfoWindow Kullanma

Page 123: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

123

Geocoder ile Adres Alma

Page 124: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

124

Google Maps Draw Route between two points using Google Directions in Google Map Android API V2

Referans: https://www.androidtutorialpoint.com/intermediate/google-maps-draw-path-two-points-using-google-

directions-google-map-android-api-v2/

Page 125: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

125

Örnek kodlar: https://github.com/bulentsiyah/Android-Google-Harita-Tum-Islemler

16. Android Web Servis (Rest, WCF veya ASMX) Web Servisler, temelde HTTP protokolünü kullanarak, platformdan bağımsız metodlar ile ortak veri formatında veri

alış verişinin yapılmasını sağlayan yapılardır. REST ve SOAP; Web Servis teknolojilerinde günümüzde çok tercih edilen

veri iletişim protokolleri, yöntemleri arasında yer alır.

Teorik olarak SOAP bir protokol, REST ise bir kurallar dizisidir. Bu iki terimi doğrudan kıyaslamak biraz yanlış olsa da,

SOAP ile geliştirilen bir uygulama ile REST ile geliştirilen bir uygulamayı kıyaslamanın REST’in daha iyi anlaşılmasını

sağlamak için uygun bir yol olacaktır..

Page 126: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

126

SOAP servisleri RPC(Remote Process Call yani uzaktaki bir prosedürün çağrılması) çalışma yöntemini kullanır, WS-*

gibi güvenlik protokollerini içerisinde barındırır, state bilgisini request ve response’larda saklar. Ancak REST’te bu

durum daha farklıdır. REST servisler doğrudan bir URL çağrılarak çalışır, arada ek bir bileşen, yöntem veya protokol

kullanılmaz.

SOAP bir servisi uygulamanıza dahil edebilmeniz için servisin WSDL’ına ihtiyaç duyarsınız, proxy sınıfları oluşturmanız

gerekir, uzaktaki metotları tetikleyecek bileşenlere ihtiyaç vardır. DISCO, UDDI vs. derken aslında işin arka planında

bayağı detay olduğunu görürsünüz. Yani özet olarak istemci, SOAP bir servisle ilgili herşeyi bilmek zorundadır, belirli

standartları yerine getirilmeden SOAP bir servisi çağıramaz. Ancak REST ile yazılmış bir servisle çalışmak için

ihtiyacınız olan tek şey URL. Bir URL’yi çağırırsınız, URL size JSON veya XML döndürür, dönen cevabı parse edersiniz

ve servis entegrasyonunuz tamamlanır. Yani teorik olarak istemci uygulama REST bir servisin yapısını ve detaylarını

bilmek zorunda değildir. REST’in bu basit standartları dışında uyulması gereken bir kural yoktur, son derece esnek bir

yapı vardır.

Basit yapısı, kolay uygulanması, hızlı çalışması, esnek olması… bunlar RESTful servislerin artı yönleri. RESTful

servislerinin bazı eksi yönleri de var tabii ki. Güvenlik bunlardan biri. SOAP servislerde standart lar gereği birçok

güvenlik mekanizması otomatik olarak elinizin altındadır. Ancak RESTful servislerde güvenlik konuları geliştirilen

yazılımın bir parçasıdır. İletişim seviyesinde güvenlik(transport level security) genellikle token aracılığıyla yapılır.

İstemci kritik işlemleri çağırmadan önce bir login isteği gönderir. Bu istek sonucunda istemciye sessin token vb. bir

değer verilir ve bundan sonra yapacağı istekler bu token değeri ile yapılır.

Asmx SOAP ve Http kullanarak mesajlaşabilirken, WCF default olarak Http olmasıyla birlitke TCP/IP, MSMQ,

NamedPipes etc. gibi yapıları da kullanabilmektedir.

REST tabanlı web servislerde HTTP metodlarına özel anlamlar yüklenir ve böylece web servise bir HTTP isteği geldiği

anda metod çalıştırılmış olur.

GET: Adresi verilen nesneyi döndürmek için kullanılır.

PUT: Var olan bir nesneyi değiştirmek için veya eğer yoksa yeni bir tane oluşturmak için kullanılır.

POST: Yeni bir nesne oluşturmak için kullanılır. Her seferinde yeni bir nesne oluşturur.

DELETE: Adresi verilen nesneyi silmek için kullanılır.

REST Requesti Sonucu, Çoğunlukla Dönen HTTP Status Kodları:

200 OK: Genelde veri listeleme sonuçları 200 ile dönüş yapılır.

Page 127: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

127

201 CREATED: Veri eklendiği zaman verinin kendisi ile 201 dönülür.

204 NO CONTENT: Veri silindiği zaman 204 dönülür.

400 BAD REQUEST: Genel olarak kayıt ekleme ya da güncelleme isteklerinde gönderilen veri validasyondan

geçemediyse neden geçemediği hakkında bilgiyle beraber 400 HTTP Statusuyla dönülür.

403 Forbidden: Yetkiye dayalı bir işlem yapılıyorsa bu API uç noktasında işlem yapmaya çalışan kişinin bu işlemi

yapmaya yetkisi yoksa 403 status kodu döner.

401 Unauthorized: Api ucunuzda bu işlemi yapmak için login olmak zorunlu ise ve API’ye istek yapan kullanıcı login

değilse bu HTTP Status ile cevap verilir.

404 Not Found: Bu HTTP Status, kullanıcının istek yaptığı URL yok ise ya da URL deki veri geçersiz ise bu hatayı alırız.

405 Method Not Allowed: Bu HTTP Statusu istek yapılan API uç noktası gönderilen metodu implemente etmemiş ise

bu HTTP Statusunu alırız. Örneğin login olması için token verdiğimiz bir API ucumuz var ve bu uçta sadece POST

isteğini kabul ediyor. Kullanıcı bu API URL’ine GET isteği yaparsa 405 statusu döner.

429 Too Many Requests: Bu HTTP Statusunu, saatlik ya da dakikalık kısıtlanan sınırdan fazla istek yapıldığında alırız.

Gruplanmış Bakış Açısıyla HTTP Statusları;

Bilgilendirme – 1xx

Başarılı İşlem – 2xx

Yönlendirmek – 3xx

Kullanıcı Taraflı hata – 4xx

Server Taraflı hata – 5xx Şeklinde ifade edebiliriz.

Kaynaklar: http://yazilimgelistirmeyontemleri.blogspot.com.tr/2015/06/rest-nedir-soap-ile-arasndaki-farklar.html

http://devnot.com/2016/rest-mimarisi-ve-restful-servisler/

WCF (Windows Communication Foundation),

SOAP (Simple Obect Access Protocol),

REST (REpresentational State Transfer),

Page 128: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

128

JSON (JavaScript-Object-Notation),

Örnek kodlarda wcf veya restful web servislerden örnek veri sorgulama, listeleme ile resim upload ve kaydetme

methodları eklenmiştir.

Örnek kodlar: https://github.com/bulentsiyah/Android-WebServis--RestWCFveyaASMX

17.Android Local Notification Notification Manager, Mobil işletim sistemli cihazlarınızda System Toolbar menüsünde de görebileceğiniz, uygulama

bildirimleridir.

NotificationManager, bildirimlerde başlık, açıklama metni, ilgi çekici renkli açıklama metni, emojiler, uygulamaya ait

bildirim icon'u ve bildirime ait resim içerebileceği gibi, kısayol butonları (hemen ara, aramayı yanıtla, iptal et gibi),

Page 129: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

129

sesli veya titreşimli bildirimler ile de zenginleştirilebilmektedir. Notificationlar ayrıca; Titreşim, sesli bildirim(ses

dosyası) içerebilirler.

Notification değer olarak Notification methodları için aşağıdaki tipleri alır ve kullanım şekilleri aşağıdaki gibidir;

.setContentTitle - Bir bildirimin başlık metnini kapsar

.setContentText - Bir bildirimin içerik yazısını kapsar

.setSmallIcon Bildirimi gönderen uygulamanın, simge halindeki görselinin res > drawable klasörü içerisindeki ismini

işaret eder. 24px ve katları olarak oluşturmanız önerilir.

.setContentIntent(pIntent) - Bildirime tıklandığında açılacak olan activity sayfasını işaret eder.

.build(); - Notification methodlarının tamamlanmış ve notification değişkeninin kullanıma hazır hale gelmesini sağlar.

.setAutoCancel(true) - Bildirime tıklanınca, bildirimin kapanmasını sağlar.

.setTicker Bildirim çubuğunda kısa süreli hızlı kapanan bir ileti gösterir.

Bu bölüm için kaynaklar:

https://developer.android.com/guide/topics/ui/notifiers/notifications.html

http://serifgungor.com/blogs/85-android-ile-notification-manager-kullanimi

http://www.theappguruz.com/blog/easy-way-to-send-local-notification-to-user-in-android

Page 130: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

130

Konuyla ilgili Standart , Genişletilebilir, Action Buttonlu, Kombine Grup ve Alt Yazı ve Özelleştirilmiş Bildirim

bulunmaktadır.

Örnek kodlar: https://github.com/bulentsiyah/Android-Local-Notification

18.Android Firebase Push Notification Tüm adımların başladığı link

https://firebase.google.com/docs/cloud-messaging/android/client

Buna benzer işlemler her zaman değişebileceği için yerindeki yönergeleri izleyerek nasıl yapmalıyız.

Yukarıdaki linke göre :

Android projenize Firebase ekleyin.

Page 131: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

131

https://console.firebase.google.com/

Page 132: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

132

Page 133: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

133

Page 134: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

134

Page 135: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

135

Page 136: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

136

Eksik kod bloğu allprojects {

repositories {

google()

jcenter()

}

repositories {

// ...

maven {

url "https://maven.google.com" // Google's Maven repository

}

}

}

Firebase ve FCM SDK'sını kurun (gradle içine yazarak)

Uygulama manifest dosyanızı düzenleyin

Page 137: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

137

Servisleri projenize ekleyin

Web arayüzden mesajlarınızı iletin

https://console.firebase.google.com/

Page 138: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

138

Örnek kodlar: https://github.com/bulentsiyah/Android-Firebase-PushNotification--Analytics

19.Android Firebase Analytics ile istatistik Toplama Buna benzer işlemler her zaman değişebileceği için yerindeki yönergeleri izleyerek nasıl yapmalıyız.

Yukarıdaki linke göre :

Android projenize Firebase ekleyin.

https://firebase.google.com/docs/analytics/android/start/

Page 139: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

139

Firebase Analytics için content tipler mevcut yani uygulama açılışı veya kullanıcı seçimleriyle ilgili alanları loglayarak

tüm istatistikleri görebilirsiniz. Örnek kodlar:

private FirebaseAnalytics mFirebaseAnalytics;

mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

try {

Bundle bundle = new Bundle();

bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "MainActivity");

bundle.putString(FirebaseAnalytics.Param.ITEM_NAME, "MainActivity");

bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "İlk Açılış");

mFirebaseAnalytics.logEvent(logEventType_APP_OPEN, bundle);

} catch (Exception exp) {

exp.toString();

}

Bundle bundle = new Bundle();

bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "Bildirim");

bundle.putString(FirebaseAnalytics.Param.ITEM_ID,

"btnMainSendSimpleNotification");

bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,

"btnMainSendSimpleNotification");

mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);

Page 140: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

140

Bu veriler anlık olarak firebase düşmez ama sonuçları gözlemlemek adına debug view ekranı kullanılabilir. Bunun için

https://firebase.google.com/docs/analytics/debugview

Android studio terminali açıp

burada hata alanlar

Page 141: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

141

Page 142: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

142

Android studio yeniden başlatabilirler

Örnek kodlar: https://github.com/bulentsiyah/Android-Firebase-PushNotification--Analytics

Page 143: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

143

20. Android Cihaz Bilgilerini Okuma, Bilgileri şifreleme (saklama ve

gönderme durumlarında)

Örnek kodlar: https://github.com/bulentsiyah/Android-Cihaz-Bilgilerini-Okuma--Sifreleme--Loglama-ve-

InternetBaglantisiKontrolu

Page 144: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

144

21. Android Loglama Örneği, İnternet Bağlantısı Kontrolü

Örnek kodlar: https://github.com/bulentsiyah/Android-Cihaz-Bilgilerini-Okuma--Sifreleme--Loglama-ve-

InternetBaglantisiKontrolu

22. Android Alarm Kullanımı (Alarm uyandırma servisi değil) Alarm Manager , Android cihazlar da alarm servisine erişebilmemiz için oluşturulan bir sınıftır. İki tip uyarı sistemi

vardır, geçirilen zamana göre uyarı ve gerçek zamana göre uyarıdır.

ELAPSED_REALTIME_WAKEUP : Geçen zamana göre Intent’i çalıştırmak için cihazı uyandırır.

RTC_WAKEUP ve RTC : Belirlediğiniz bir zamanda, sıra bekleyen Intent’i çalıştırmak için cihazı uyandırır. Sonunda

WAKEUP olan cihaz uyku(tasarruf) modunda ise bile uyarıyı alırsınız diğer türlü askıya alınır. WAKEUP için

manifest.xml ayarlamayı unutmayınız.

Page 145: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

145

Alarmları oluştuğunda dinlemek (yakalamak) için BroadcastReceiver ihtiyacımız vardır.

Page 146: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

146

Page 147: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

147

Örnek kodlar: https://github.com/bulentsiyah/Android-Alarm-ve-Badge-Notification-Kullanimi

23. Android Badge Notification Kullanımı

Uygulamaya ait bildirim veya uyarıların sayısını belirten ve ikonun hemen üzerinde duran bildirim baloncuğudur.

Kaynak : https://github.com/leolin310148/ShortcutBadger

Page 148: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

148

Örnek kodlar: https://github.com/bulentsiyah/Android-Alarm-ve-Badge-Notification-Kullanimi

24. Wifi Üzerinden Debug Etme

Referens:https://developer.android.com/studio/command-line/adb.html#wireless

Cihazınızı wifi üzerinden usb kablosunu bağlamadan debug edebilirsiniz. Bu işlem için bir defa cihazı tanıtmak ve

bilgisayarın güvenilir olduğunu doğrulamanız gerekmektedir. İşlem adımları sırayla

Android SDK yüklü olduğu yerdeki platform tools klasöründeyken komut işlemcisiniz çalıştırın.

adb server garanti olsun diye kill leyip ardından resimdeki gibi başlatın

Page 149: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

149

Artık usb kablosunuz çıkartıp debug işlemlerinizi wifi üzerinden yapabilirsiniz, bağlantı kopmadığı sürece bu adımı

tekrarlamak zorunda kalmadan tekrar bağlanabilirsiniz.

Son bağlantı kodunu yazdığımda zaten bağlıysa aşağıdaki gibi bilgilendirme olacaktır.

Not: Bir cihazı ilk defa bağlayacaksanız tabi ki geliştirici seçeneklerini açıp, usb debup modu aktif hale getirip ve

güvenlik bölümünde bilinmeyen cihazlara izin vermelisiniz (Bir cihaz usb ile nasıl hazır hale getirilecekse önce tüm

adımları hazırlamalısınız)

25. Apk sı Şifrelenmemiş Bir Uygulamayı Geri Çözme

Bu bölümün amacı başka bir uygulamanın nasıl yazıldığı ve açıkda kod detaylarını görmek (açıksa bakmamız için

bırakılmıştır diye düşünebiliriz). Eğer kodlar proguard ile kilitlenmiş ise kodlar anlamlı olmayacağı için

çözülemeyecektir.

Page 150: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

150

Örnek bir uygulama play stordan indirip bir dosya yöneticisi yardımıyla apk haline toparlayıp bilgisayarınıza alınız.

apkyı http://www.javadecompilers.com/apk vb online olarak çözen web sitelerine yükleyiniz. Bunu yapan

programlarda mevcut ama aynı şekilde çözdüklerinden fark etmeyecektir.

Çözme işlerimin ardından kodları indirip detaylı inceleyebilirsiniz

26.Android Barcode Okuma (QR, UPC, EAN, Code) ve Mobil Cihazda

Oluşturma

Page 151: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

151

Örnek kodlar: https://github.com/bulentsiyah/Android--Barcode--Okuma--ve--Mobil--Cihazda--Olusturma

27.Android Servis içerisinden(Activity Değil) Alert Dialog Gösterme

Servisler arayüz işlemlerini gösteremezler ama olası bir işlem için servis içerisinden uyarı tetiklemek isteyebilirsiniz.

Bunun için activity oluşturmadan Diğer uygulamalarda çizime izin ver ile bu işlemi yapabilirsiniz. Kritik derecede

önemli işlemler için kullanılmaktadır.

Aşağıda gerekli izinler alınmadan çağırılan bir servis içerisinden uyarı kutucuğu dönen hata görülmektedir.

Page 152: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

152

Page 153: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

153

Örnek kodlar: https://github.com/bulentsiyah/Android-Servis-icerisinden-Alert-Dialog-Gosterme

28.Android Türkiye’de ki Son Depremler Uygulaması

Page 154: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

154

Uygulama ile Türkiye meydana gelen son depremleri listesini alınabilmektedir. Gelen veriler deprem büyüklüğüne

göre farklı uyarı simgeleri bulunan basit bir liste ekranından oluşmaktadır. Bu uygulama ile AsyncTask ile web servise

bağlanma (HTTP) gelen veriyi çözme ve veriyi özelleştirilmiş bir listview a doldurma işlemleri yapılabilir.

Bunun dışında basit veritabanı işlemleri yapılarak her arayüz açıldığında sqllite veritabanında kayıtlı olmayan yeni

depremleri veritabanına ekleme işlemleri de vardır. Bunların haricinde yine özelleştirilmiş progress dialog ve toast

kod bloklarını bulunmaktadır.

Deprem verileri Kandilli Rasathanesinin son 24 saat deprem web servisinden alınmaktadır.

http://www.koeri.boun.edu.tr/sismo/zeqmap/xmlt/son24saat.xml

Page 155: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

155

Örnek kodlar: https://github.com/bulentsiyah/Android--Turkiyedeki--Son--Depremler--Uygulamasi

29.Android Webview, Offline Web Sayfası (Html) Oluşturma ve Girilen

Değerleri Okuma

Page 156: Matech Bilişim Teknolojileri · Emülatör seçimlerinde dikkat edilecek tek konu sürümün en az 6.0 olmasıdır. Çünkü 6.0 sürümünden sonra çalışma anında izin kontrolü

156

Örnek kodlar: https://github.com/bulentsiyah/Android-Webview-Offline-Web-Sayfasi-ve-Degerleri-Okuma

30.Android Orientation (Ekran Döndürme) Sabitleme, Klavye Gizleme

Android orientation özelliğini kullanarak, tamamen yatay veya dikey olarak konumlandırabiliriz. Bu işlem her activity

ayrı bir reaksiyon gerektirdiği için manifest dosyasına tek tek eklenebilir. Bu işlem sadece manifest dosyasındadeğil

kod bölümünde de düzenlebilir. Örneğin tüm uygulama dikey çalışmakta ama form ekranında kullanıcın kolay işlem

yapması için yatay olmasını istediniz, bu activity oncreate bölümünde aşağıdaki örnek kodlar bölümünde olduğu gibi

uygulama yönünü setleyebilirsiniz.

Özellikle login gibi klavye ve giriş işlemleri beklenilen arayüzler için mevcut Editextlere fokuslayıp klavyeyi açık veya

her zaman kapalı tutabilirsiniz. yukarı olduğu gibi bu işlem için manifest veya kod içerinden gerçekleştirebilirsiniz.

Örnek kodlar: https://github.com/bulentsiyah/Android-Webview-Offline-Web-Sayfasi-ve-Degerleri-Okuma