Android P ve Yeni Özellikler

Merhaba değerli dostlar

Android Programlama ve Uygulama Rehberi isimli ilk kitabımın ikinci baskısına eklediğim son bölümü sizlerle paylaşmak istiyorum. İlk baskıda “Android N ve Yeni Özellikler” şeklinde olan başlığı yeni baskıda “Android P ve Yeni Özellikler” olarak güncelledik. Bakalım Android P ile gelen yeni özellikler nelerdir hep beraber göz atalım.

Android P, hem kullanıcı için hem de geliştirici için yeni özellikler ile tanıtıldı. Bu özelliklerden bazılarını sizlere aktarmaya çalışacağım.

Android P User-Side (Kullanıcı Tarafı)

Android işletim sistemi 10 yıldan fazla bir zaman önce ilk kez T-Mobile G1 akıllı telefonu ile kullanıma sunuldu ve temel amacı herkes için ücretsiz ve herkese açık bir mobil işletim sistemi geliştirmeyi sağlamaktı. Geçen on yıldan sonra Android şu anda dünyada en çok kullanılan mobil işletim sistemi olmayı başardı.

Android P, Android’in en son sürümü olup bu satırları yazarken beta sürümü yayınlanmıştı. Bu sürüm API 28 ile kullanılmakta olup temel amacı daha akıllı ve kullanımı daha kolay bir işletim sistemi olmaktır. Android P ile birlikte Google firması bu işletim sistemine makine öğrenimi özelliklerini kazandırmayı başarmıştır.

Bu son sürüm, akıllı telefonunuzu daha akıllı hale getirir, öğrenmenize ve size uyum sağlamasına yardımcı olur. Cihaza kazandırdığı ilk yeniliklerden bir tanesi, Adaptive Battery’dir. Bataryadan en iyi şekilde yararlanmanıza yardımcı olmak için pil gücünü yalnızca en çok kullandığınız uygulamalar ve servisler için harcamanıza imkan tanıyan bu özellik DeepMind ile ortaklaşa geliştirilmiştir. Yine ekran parlaklığını ayarlamak için geliştirilen Adaptive Brightness için makine öğrenimi kullanıldı.

Android P, gün içinde daha iyi bir şekilde gezinmenize yardımcı olacak ve bir sonraki işleminizi otomatik olarak en iyi şekilde yapmak için ne yapmak istediğinize dayalı akıllı öneriler sunarak size yardımcı olacaktır. Bu son sürümde sadelik ön plana çıkmakta ve ilk etkisini sistem navigasyonunda göstermektedir. Ana ekranda daha rahat gezinmek için yeni dokunma hareketleri eklenmiştir. Telefonu tek elle kullanmak zorunda kaldığınız zamanlarda bu yeni dokunma hareketleri telefona daha hakim olmanızı sağlar.

Overview yani Genel Bakış ekranına gelen yeniliklerden bir tanesi Smart Text Selection (Akıllı Metin Seçimi)’dır. Genel bakışta çalışan bu yeni özellik ile istediğiniz işlemi yapabilirsiniz.

Teknolojinin hayata yardımcı olması ve bunu kullanıcıdan almaması gerektiği düşüncesiyle oluşturulan bu işletim sistemi, telefonu nasıl kullandığınıza odaklanmaktadır. Bu amaçla Android P ile birlikte yeni bir Dashboard bizlere sunulmaktadır. Dashboard ile şunlar hakkında bilgi sahibi olabiliriz:

  • Uygulamalarda harcadığımız süreyi.
  • Telefon kilidini kaç kez açtığımızı.
  • Alınan toplam bildirim sayısını.
  • Cihazınızda zaman geçirme şeklinizi.

App Timer yani Uygulama Zamanlayıcısı ise uygulamalarda zaman sınırları belirlemenize olanak tanır ve sınırınıza yaklaştığınızda sizi uyaracak ve ardından size hedefinize hatırlatmak için simgeyi gri hale getirecektir.

Android P ile gelen Wind Down ile karanlık olduğu zaman gece ışığını ve rahatsız etmeyin özelliklerinin açılması sağlanacak. Belirlediğiniz uyku saati geldiğinde uyumayı hatırlatacak ve bu andan itibaren ekranda gri tonların ağrılıkta olduğu görünecektir.

Android P yeni bir sürüm olup olup beta versiyonu 8 Mayıs 2018 tarihinde Google Pixel için kullanıma sunuldu. Android P, sizden öğrenen, size uyum sağlayan ve günlük işlerde size yardımcı olan bir işletim sistemi ile makine öğrenimini herkese getirmek için önemli bir adımdır.

 

Android P Developer-Side (Geliştirici Tarafı)

Android P ile gelen ve geliştiricileri ilgilendiren yeniliklerden bazılarını sizler için derledik. Bunları tek tek açıklamakta yarar var.

Wi-Fi RTT ile Kapalı Konumlandırma

Android P, uygulamalarda kapalı konumlandırmanın avantajlarından yararlanmanızı sağlamak için IEEE 802.11mc Wi-Fi protokolü için platform desteği ile gelmektedir. Bu protokol, Wi-Fi Round-Trip-Time (RTT) olarak bilinir. Kapalı konumlandırma özelliğini kullanabilmek için aşağıdaki şartların sağlanması gerekiyor:

  • Android P işletim sisteminin yüklü olduğu cihazın ilgili donanımlara sahip olması.
  • Access Point yani erişim noktalarının RTT özelliğine sahip olması.
  • Cihaz konum özelliğinin açık olması.
  • Wi-Fi tarama özelliğinin açık olması.
  • Uygulamanın ACCESS_FINE_LOCATION iznine sahip olması gerekiyor.

Erişim noktaları ile kapalı konumlandırma yaparken, gizliliği korumak için mesafe bilgisi erişim noktası veya noktalarından gizli tutulur. Yani erişim noktaları hiçbir şekilde cihaz mesafe bilgilerine erişemez. Kapalı konumlandırmanın ne olduğunu anlamak için bu özellik ile neler yapılabilir buna bakmak gerekiyor. Bu yeni özelliği kullanarak aşağıda verilen uygulamaları geliştirebilirsiniz:

  • Bina içi gezinme tabanlı uygulamalar. Eğer sahip olduğunuz bina oldukça büyük ve onlarca kat ve birimden meydana geliyorsa, ziyaretçilerinizin kolaylıkla ilgilendiği birime ulaşmasını isterseniz, kapalı konumlandırma işlerinizi oldukça kolaylaştırmaktadır.
  • Konum tabanlı ve ses kontrolüne dayanan eylemleri yapan uygulamalar. Diyelim bir odaya girdiniz ve odada bulunan lamba veya lambaları ses kontrolü ile açmayı veya kapatmayı çalışıyorsunuz.
  • Konum tabanlı bilgiler veren uygulamalar. Örneğin, bir mağazaya girdiniz ve ilgilendiğiniz ürünlerle ilgili teklifler olup olmadığını öğrenmek istiyorsunuz. Bu ve diğer tüm uygulamalarda kapalı konumlandırma işlerinizi oldukça kolaylaştırmaktadır.

Kapalı konumlandırma kullanan uygulamalarda doğruluk oranı 1 veya 2 metredir.

 

Çoklu Kamera Desteği

Android P çalıştıran cihazlarda iki veya daha fazla fiziksel kameradan alınan görüntü akışlarına aynı anda erişim sağlanabilir. Böylece, çift yönlü veya çift arka kameralı cihazlarda, kusursuz zoom ve stereo görüş (3D) gibi tek kamerayla mümkün olmayan yenilikçi özellikleri kullanabilirsiniz.

 

ImageDecoder

ImageDecoder sınıfı drawable ve bitmap resimler ile çalışmayı sağlayan ve ilk kez Android P ile gelen yeni bir sınıftır. Herhangi bir byte verisi, dosya veya URI bilgisini kullanarak bu sınıftan Drawable ve Bitmap görüntüler oluşturabiliriz.

Örneğin aşağıda verilen kod yardımıyla Drawable bir görüntü elde edebiliriz.

File file = new File(...);
ImageDecoder.Source source = ImageDecoder.createSource(file);
Drawable drawable = ImageDecoder.decodeDrawable(source);

Eğer Bitmap formatında bir resim oluşturmak isterseniz bu durumda decodeDrawable() yerine decodeBitmap() metodunu kullanmanız gerekmektedir.

 

Animation

Android P ile GIF benzeri hareketli resimler oluşturabilirsiniz. Bunun için AnimatedImageDrawable sınıfı geliştirilmiştir. Bu sınıf ilk kez Android P ile duyuruldu. API 21 ile duyurulan AnimatedVectorDrawable sınıfı gibi çalışan bu sınıf işlemlerini yapmak için Render Thread’i kullanır. İsmi geçen sınıf bu thread’i API 25 ile birlikte kullanmaya başladı. Bu sınıf uygulamanızın güncellemelerini yönetmeden veya uygulamanızın kullanıcı arayüzü iş parçacığına (Main Thread) müdahale etmeden animasyonlu bir resme sahip olmasını sağlar.

AnimagedImageDrawable, Android P ile gelen ImageDecoder ile çözülebilir. Aşağıdaki kod parçacığı, AnimatedImageDrawable’ınızı çözmek için ImageDecoder’ın nasıl kullanılacağını gösterir:

Drawable d = ImageDecoder.decodeDrawable(...);
if (d instanceof AnimatedImageDrawable) {
((AnimatedImageDrawable) d).start();
}

 

Neural Networks API 1.1

Neural Networks API ilk kez Android 8.1 yani API 27 ile tanıtıldı. Android cihazlarda makine öğrenimini sağlamak için geliştirilen bir API’dir. Android P, bu API’yi geliştiren yeni desteklerle birlikte gelmektedir. Android P makine öğrenimine imkan tanıyan ve bunların ilk meyvesini bizlere sunan en yenilikçi Android sürümlerinden bir tanesidir. İlerleyen zamanlarda makine öğrenimi etkisini oldukça hissettirecektir.

Bu API’nin çalışma mantığını aşağıdaki grafik bizlere göstermektedir.

 

Text (Metin) Özellikleri

Android P ile gelen bir dizi Text özelliği şöyledir.

PrecomputedText: API 28 yani Android P ile ilk kez duyurulan bu sınıf, gerekli bilgileri önceden hesaplamanıza ve önbelleğe almanıza olanak tanıyarak metin oluşturma performansını geliştirir. Android Developer birimi, yaptığı incelemeler sonucunda UI Thread yani uygulamanızın ana iş parçacığının zamanının %90’nını metinleri düzenlemek için harcadığını ortaya koymuştur. Aşağıdaki resimde metni ölçmek ve düzenlemek için harcanan zaman, yüzdelik olarak gösterilmektedir.

Böylesi bir oran uygulamanızın yavaşlamasına neden olmaktadır. Bunun önüne geçmek için PrecomputedText sınıfı geliştirildi. Bir uygulamanın metin ile ilgili işlemlerini ayrı bir thread içinde yapmayı sağlayan bu sınıf UI Thread için oldukça avantajlıdır.

Örnek bir kod aşağıdaki gibidir.

// UI thread

val params: PrecomputedText.Params = textView.getTextMetricsParams()

val ref = WeakReference(textView)

    executor.execute {

      // background thread

      val text = PrecomputedText.create("Hello", params)

      val textView = ref.get()

      textView?.post {

          // UI thread

          val textViewRef = ref.get()

          textViewRef?.text = text

      }

}

Yukarıda verilen kodların Kotlin dilinde yazıldığına dikkat ediniz.

Magnifier: Akıllı Metin Seçimi gibi özelliklerle bile, metni tam olarak seçmek zor olabilir. Android P, metin seçiminde kullanıcı deneyimini iyileştirmek için Magnifier yani büyüteci bizlere sunmaktadır. Magnifier, kullanıcıların metin üzerinde sürüklenebilecek bir bölmeden, büyütülmüş metni görüntüleyerek imleci veya metin seçim tutamaçlarını tam olarak konumlandırmaya yardımcı olur.

 

 

Android Developer birimi, ister özel widget’lerde ister özel metin oluşturma sırasında olsun, kullanıcıların tüm uygulamalarda aynı deneyime sahip olmasını istediği için böyle bir araç geliştirdi. Tabi bu aracı sadece metin için değil herhangi bir görünüm için de kullanabilirsiniz.

Magnifier için geliştirilen üç farklı metot bulunmaktadır: show, update ve dismiss. Bir görünüm için onTouchEvent ile işlem yaparken bu metotları kullanabilirsiniz. Aşağıda verdiğimiz kod ile Magnifier aracının ekran boyunca kullanıcı parmağını takip etmesini sağlarız.

fun onTouchEvent(event: MotionEvent): Boolean {</span>

    when (event.actionMasked) {

        MotionEvent.ACTION_DOWN -> magnifier.show(event.x, event.y)

        MotionEvent.ACTION_MOVE -> magnifier.show(event.x, event.y)

        MotionEvent.ACTION_UP -> magnifier.dismiss()

    }

}

Burada Kotlin kodlarını kullandık.

Smart Linkify: Bu özellik ile ekranda bulunan ve kullanıcının seçtiği metinlerin sınıflandırılması, anlamlandırılması ve olası işlemlerin yapılması hedeflenir. Ayrıca, metin içindeki varlıkları tanımak için makine öğrenme algoritmalarını ve modellerini kullanır. Android P, seçilen metni tanımlamak ve eylem önermek için makine öğrenimini temel alan TextClassifier sınıfını kullanır. Bu sınıf API 26 ile duyuruldu. Bu sınıfı kullanarak geliştirebileceğimiz örnek bir uygulama şöyledir: TextClassifier sınıfı ekranda bulunan ve kullanıcının seçtiği bir telefon numarasını tanırsa, kısa mesaj gönderme, arama yapma veya rehbere ekleme gibi işlemleri kullanıcıya önerebilir.

Aşağıda bazı örnek uygulamaları görebilirsiniz.

 

 

Yukarıdaki örnek uygulamada seçilen metnin bir yer ismi olduğu algılanmakta ve konum ile ilgili seçenekler önerilmektedir.

 

 

Yukarıdaki seçilen metnin bir URL olduğu algılanmakta ve tarayıcı seçenekleri önerilmektedir.

 

 

Bu son örnekte, seçilen metnin bir telefon numarası olduğu algılanmakta ve arama ile ilgili seçenekler önerilmektedir.

Smart Linkfiy, ile metinlerin güvenilirliği artar ve kullanıcının seçtiği varlık türüne bağlı olarak, kullanıcının gerçekleştirebileceği eylemler önerilir.

 

Google I/O 2018 ve Android’deki Yenilikler

Mayıs 2018’de yapılan Google I/O 2018 etkinliğinde Android ile ilgili birçok yenilik duyuruldu. Son olarak bunlardan bahsetmek istiyorum.

 

 

 

Android Jetpack

Uygulama geliştirmeyi hızlandırmak için tasarlanmış Android Jetpack 8 Mayıs 2018’de duyuruldu. Android Jetpack, Android bileşenlerinin gelecek neslidir ve destek kütüphanesinin avantajlarını bir araya getirerek, geriye dönük uyumluluk ve anlık güncellemeleri, daha geniş bir bileşenler kümesine getirerek, sağlam ve yüksek kaliteli uygulamalar oluşturmayı hızlı ve kolay hale getirmek için geliştirildi.  Android Jetpack, Android KTX yani Kotlin ile çalışmak için tasarlanmıştır. Özetle, Android Jetback, Kotlin dilinden yararlanarak geliştirilen birbirinden farklı ama birbiriyle çalışabilen bir kütüphaneler grubudur.

Android Jetpack ile gelen kütüphanelerin tamamı aşağıdaki gibidir.

Bu kütüphanelere erişmek ve daha fazla bilgi almak için lütfen aşağıdaki linki ziyaret ediniz.

https://developer.android.com/jetpack/

 

Kotlin

17 Mayıs 2018’de Google firmasının yaptığı bir çıkışla Kotlin programlama dili Android için resmi programlama dili olarak kabul edildi. O günden beri geliştiricilerin %95’i Kotlin için olumlu görüşlerde bulundu. Yine, Kotlin dili ile geliştirilen uygulamaların sayısı o günden beri 6 kat arttı.

Google, Kotlin dili için 5 Şubat 2018’de Android KTX isimli bir dizi uzantıdan oluşan bir kütüphane geliştirdi. Bu kütüphane Kotlin dilinden daha kısa kod yazarak uygulama geliştirmeyi hedeflemektedir.

Kotlin programlama dili hakkında bilgi edinmek için yayınladığım “Kotlin” kitabını almanızı tavsiye ediyorum.

Kotlin kitabı ülkemizin ilk ve tek Kotlin kitabı olmasıyla birlikte, Kotlin dilini geliştiren JetBrains ve Google firmasının Android Developer birimi tarafından referans kaynak olarak önerilmektedir. Aşağıda verdiğim linki ziyaret ederseniz kitabımın dünya genelinde önerilen kitaplardan bir tanesi olduğunu görebilirsiniz. Ayrıca Türkçe kaynak olarak önerilen ilk ve tek kitap olmayı başarmıştır.

https://kotlinlang.org/docs/books.html

 

Ayrıntılı bilgi için kişisel blog sayfamda yayınladığım aşağıdaki linki ziyaret edebilirsiniz.

https://memetalisicak.com/kotlin/jetbrains-firmasi-kotlin-kitabi-referans-kaynak-olarak-destekliyor.html

 

 

Android Things 1.0

Android Things, kısaca Internet of Things (IoT- Nesnelerin Interneti) kavramına hizmet eden ve temel amacı cihazların birbiriyle veya internetle bağlantı da olmasını sağlamak adına Google tarafından geliştirilen bir işletim sistemidir. Android işletim sistemi başlangıçta mobil cihazlar için üretildi. Ancak sistemin açık kaynaklı olması beraberinde esnekliği ve farklı teknoloji eğilimlerine uyum sağlamasını pozitif yönde etkiledi. Android Phone, Android Wear, Android TV, Android Auto ve son olarak Android Things bu esnekliğin en somut örnekleridir.

2005 yılında ismi ilk kez duyulan ve özellikle son zamanlarda açık kaynak donanımların yaygınlaşmasıyla tüm dünyada büyük bir değişimin habercisi olan IoT, teknolojide en umut verici eğilimlerin başında gelmektedir. Bu eğilim ile birlikte herkes kendi donanımını üretmekte ve bunları en kolay şekilde haberleştirmeye çalışmaktadır. Arduino ve Raspberry Pi gibi donanımların üretilmesi bu kavramın daha da yaygınlaşmasını sağladı. Google sürekli geleceğe odaklanan bir firma olduğu için biraz gecikse de bu eğilime kulak verdi ve Android Things işletim sistemini yayınladı. Ancak resmi destek 25 Ekim 2017 tarihinde Android Studio 3.0’ın yayınlanmasıyla birlikte gerçekleşti. Bu sürüm ile birlikte gelen en önemli iki destekten biri Kotlin, diğeri de Android Things oldu.

Google I/O 2018 etkinliğinde yapılan bir duyuru ile Android Things 1.0’ın yayınlanacağı yönündeydi. Bu satırları yazarken Android Things 1.0’ın yayınlandığını ve kullanıma sunulduğunu sizlere bildirmekten mutluluk duyuyorum.

Google I/O 2018’de bizlere duyurulan ve Android ile ilgili olan diğer gelişmeler şöyledir:

  • Android Studio 3.2 Canary
  • Android App Bundle
  • Google Play Console
  • Google Play Instant
  • Slices
  • App Actions

Android Programlama ve Uygulama Rehberi 17.Bölüm – Android P ve Yeni Özellikler (2.Baskı)