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.
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
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
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)
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
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ü
7
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
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
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/
11
https://www.computerhope.com/
https://material.io/guidelines/style/color.html#color-color-palette
● Welcome ekranları olmalı
● Splash screen olmalı
12
● Firebase Analytics istatistik eklenmeli
● Apk şifrelenmeli
● Tanıtım videosu Play Store da eklenmiş olmalı, animasyon veya kullanım videosu
13
https://www.youtube.com/watch?v=EJL9OP7MRZ0
● Tanıtım resimleri geniş ekran ve yazılı slogan başlıklar bulunmalı
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
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ı
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.
17
Yükleme sonrası emülatörün görüntüsü:
18
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.
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.
21
22
23
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.
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.
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.
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.
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>
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
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'
31
32
2.e. Empty, Login, Maps, Tabbed Page ve Navigation Drawer proje kalıbı seçimi
33
34
35
Basic Activity
36
Bottom Navigation Activity
37
Full Screen Activity
38
Google AdMob Ads Activity
39
40
Google Maps Activity
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.
42
Login Activity
43
Master/Details Flow Activity
44
45
Navigation Drawer Activity
46
Settings Activity
47
Tabbed Activity
48
49
50
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.
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.
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
54
Progress, Alert Dialog, SnackBar ve Toast işlemleri Örnek kodlar: https://gist.github.com/bulentsiyah/c6fb358635ad0f7f8a94b707578f9cdf
55
Menü örnekleri (İkon veya Yazı, alt menü, Popup menü) Örnek kodlar: https://gist.github.com/bulentsiyah/ef7848fdd6975c06d0538ba7244ce39e
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>
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);
58
2.g. Google Play Store yayın aşamaları
İmzalı ve imzasız “apk” üretme
59
60
61
62
63
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.
65
66
67
68
69
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.
71
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.
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.
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.
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.
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ı.
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
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
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.
80
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
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
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
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.
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.
86
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
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
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
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
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.
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
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
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:
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.
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.
97
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
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.
100
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
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)
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.
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.
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.
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
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
108
Ekran Görüntüsü Alma
109
Raw içerisndeki PDF Dosyasını Açma
110
Picasso Kullanma Detaylı bilgi http://square.github.io/picasso/
Örnek kodlar:
https://github.com/bulentsiyah/Android_ClipboardManager_EkranGoruntusuAlma_PDFDosyasiniAcma
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.
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
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.
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
115
116
Konuyla ilgili en yeni ve geniş kaynak http://googlemaps.github.io/android-maps-utils/
Marker Ekleme-Maps Ayarlarını Açma
117
Maps Type Değiştirme
118
Place Holder
119
İki Marker Arasını Çizme
120
Polygon Çizme
121
Çember Çiz
122
InfoWindow Kullanma
123
Geocoder ile Adres Alma
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/
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..
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.
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),
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),
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
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.
132
133
134
135
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
137
Servisleri projenize ekleyin
Web arayüzden mesajlarınızı iletin
https://console.firebase.google.com/
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/
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);
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
141
142
Android studio yeniden başlatabilirler
Örnek kodlar: https://github.com/bulentsiyah/Android-Firebase-PushNotification--Analytics
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
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.
145
Alarmları oluştuğunda dinlemek (yakalamak) için BroadcastReceiver ihtiyacımız vardır.
146
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
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
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.
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
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.
152
153
Örnek kodlar: https://github.com/bulentsiyah/Android-Servis-icerisinden-Alert-Dialog-Gosterme
28.Android Türkiye’de ki Son Depremler Uygulaması
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
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
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