Android 8.0 (API düzeyi 26), kullanıcılar ve geliştiriciler için çeşitli yeni özellikler ve olanaklar sunar. Bu dokümanda, geliştiriciler için yenilikler vurgulanmaktadır.
Platform değişikliklerinin uygulamalarınızı etkileyebileceği alanları öğrenmek için Android 8.0 Davranış Değişiklikleri'ne de göz atmayı unutmayın.
Kullanıcı Deneyimi
Pencere İçinde Pencere modu
Android 8.0'da pencere içinde pencere.
Android 8.0 (API düzeyi 26), etkinliklerin pencere içinde pencere (PIP) modunda başlatılabilmesini sağlar. PIP, çoğunlukla video oynatma için kullanılan özel bir çoklu pencere modu türüdür. PIP modu başlangıçta yalnızca Android TV'de kullanılabiliyordu. Android 8.0'da bu özellik diğer Android cihazlarda da kullanılabilir.
Bir etkinlik PIP modundayken duraklatılmış durumda olur, ancak içeriğini göstermeye devam etmesi gerekir. Bu nedenle, uygulamanızın onPause()
işleyicisinde oynatmayı duraklatmadığından emin olmalısınız. Bunun yerine, videoyu onStop()
uygulamasında duraklatmalı ve onStart()
içinde oynatmaya devam etmelisiniz. Daha fazla bilgi için Çoklu Pencere Yaşam Döngüsü bölümüne bakın.
Etkinliğinizin PIP modunu kullanabileceğini belirtmek için manifest dosyasında android:supportsPictureInPicture
değerini true olarak ayarlayın.
(Android 8.0'dan itibaren PIP, android:resizeableActivity
manifest özelliğini gerektirmez.
Ancak, etkinliğiniz diğer çoklu pencere modlarını destekliyorsa android:resizeableActivity
değerini "true" olarak ayarlamanız gerekir.)
Android 8.0 (API düzeyi 26), PictureInPictureParams
adlı yeni bir nesneyi sunar. Bu nesne, PIP modundayken bir etkinliğin nasıl davranması gerektiğini belirtmek için PIP yöntemlerine geçirirsiniz. Bu nesne, etkinliğin tercih edilen en boy oranı gibi özellikleri belirtir.
Pencere içinde pencere ekleme bölümünde açıklanan mevcut PIP yöntemleri artık yalnızca Android TV'de değil, tüm Android cihazlarda kullanılabilir. Ayrıca Android 8.0, PIP modunu desteklemek için aşağıdaki yöntemleri sunar:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Etkinliği pencere içinde pencere moduna yerleştirir. Etkinliğin en boy oranı ve diğer yapılandırma ayarları args tarafından belirlenir. args içindeki herhangi bir alan boşsa sistem,Activity.setPictureInPictureParams()
değerini en son çağırdığınızda ayarlanan değerleri kullanır.Belirtilen etkinlik ekranın bir köşesine yerleştirilir; ekranın geri kalanı, ekranda olan önceki etkinlikle doldurulur. PIP moduna giren etkinlik duraklatılmış duruma geçer ancak başlatılmış olarak kalır. Kullanıcı PIP etkinliğine dokunursa sistem, kullanıcının etkileşimde bulunabileceği bir menü görüntüler; dokunma etkinlikleri PIP durumundayken etkinliğe ulaşmaz.
-
Activity.setPictureInPictureParams()
: Bir etkinliğin PIP yapılandırma ayarlarını günceller. Etkinlik şu anda PIP modundaysa ayarlar güncellenir. Bu, etkinliğin en boy oranı değiştiğinde faydalıdır. Etkinlik PIP modunda değilse bu yapılandırma ayarları, çağırdığınızenterPictureInPictureMode()
yönteminden bağımsız olarak kullanılır.
Bildirimler
Android 8.0'da (API seviyesi 26), bildirim davranışını ve ayarlarını yönetmenin daha kolay ve tutarlı bir yolunu sağlamak için bildirimleri yeniden tasarladık. Söz konusu değişiklikler şunlardır:
- Bildirim kanalları: Android 8.0'da, görüntülemek istediğiniz her bildirim türü için kullanıcı tarafından özelleştirilebilir bir kanal oluşturmanıza olanak tanıyan bildirim kanalları kullanıma sunuldu. Kullanıcı arayüzünde bildirim kanalları bildirim kategorileri olarak adlandırılır. Bildirim kanallarının nasıl uygulanacağını öğrenmek için Bildirim kanallarını yönetme konusuna bakın.
- Bildirim noktaları: Android 8.0'da, uygulama başlatıcı simgelerinde noktaların veya rozetlerin görüntülenmesi desteği eklendi. Bildirim noktaları, kullanıcının henüz kapatmadığı veya işlem yapmadığı bildirimlerin varlığını yansıtır. Bildirim noktalarıyla nasıl çalışılacağını öğrenmek için Bildirim rozetleri konusuna bakın.
- Erteleme: Kullanıcılar bildirimleri erteleyebilir ve bu durum, bildirimlerin tekrar görünmeden önce bir süre için yok olmasına neden olur. Bildirimler, ilk gösterildikleri önem düzeyinde yeniden görünür. Uygulamalar, ertelenen bir bildirimi kaldırabilir veya güncelleyebilir, ancak, ertelenmiş bir bildirimin güncellenmesi yeniden görünmesine neden olmaz.
- Bildirim zaman aşımları:
setTimeoutAfter()
öğesini kullanarak bildirim oluştururken zaman aşımı ayarlayabilirsiniz. Bir bildirimin iptal edilmesi gereken süreyi belirtmek için bu yöntemi kullanabilirsiniz. Gerekirse belirtilen zaman aşımı süresi sona ermeden önce bir bildirimi iptal edebilirsiniz. - Bildirim ayarları:
Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
amacını kullanarak bir bildirimden uygulamanızın bildirim ayarlarına bağlantı oluşturduğunuzda gösterilecek metni ayarlamak içinsetSettingsText()
yöntemini çağırabilirsiniz. Sistem, uygulamanızın kullanıcılara göstermesi gereken ayarları filtrelemek amacıyla şu ekstra özellikleri sağlayabilir:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
veNOTIFICATION_ID
. - Bildirim kapatma: Kullanıcılar bildirimleri kendileri kapatabilir ve uygulamalar bunları programatik olarak kaldırabilir.
NotificationListenerService
sınıfındakionNotificationRemoved()
yöntemini uygulayarak bir bildirimin ne zaman ve neden kapatıldığını belirleyebilirsiniz. - Arka plan renkleri: Bir bildirim için arka plan rengi ayarlayıp etkinleştirebilirsiniz. Bu özelliği bildirimlerde yalnızca kullanıcının bir bakışta görmesi için kritik öneme sahip devam eden görevler için kullanmalısınız. Örneğin, arabayla yol tarifleri veya devam eden bir telefon aramasıyla ilgili bildirimler için bir arka plan rengi ayarlayabilirsiniz.
setColor()
kullanarak istediğiniz arka plan rengini de ayarlayabilirsiniz. Bu sayede bir bildirim için arka plan rengi kullanımını etkinleştirmek üzeresetColorized()
kullanabilirsiniz. - Mesajlaşma stili: Android 8.0'da,
MessagingStyle
sınıfını kullanan bildirimler daha fazla içeriği daraltılmış biçimde görüntüler. Mesajlaşmayla ilgili bildirimler içinMessagingStyle
sınıfını kullanmalısınız. Mesajlaşmayla ilgili bildirimlere geçmiş mesajlar ekleyerek bir görüşmeyle ilgili bağlam sağlamak içinaddHistoricMessage()
yöntemini de kullanabilirsiniz.
![Android 8.0'da (API düzeyi 26) bir bildirim uzun basma menüsü.](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=5&hl=tr)
Kullanıcılar, Android 8.0'da bildirimleri görüntülemek için uygulama başlatıcı simgelerine uzun basabilirler.
Otomatik doldurma çerçevesi
Hesap oluşturma, giriş yapma ve kredi kartı işlemleri zaman alır ve hatalar içerebilir. Kullanıcılar bu tür tekrarlanan görevler gerektiren uygulamalardan kolayca sıkılabilir.
Android 8.0 (API düzeyi 26), Otomatik Doldurma Çerçevesi'nin kullanıma sunulmasıyla giriş ve kredi kartı formları gibi formların doldurulmasını kolaylaştırır. Kullanıcı otomatik doldurma özelliğini etkinleştirdikten sonra mevcut ve yeni uygulamalar Otomatik Doldurma Çerçevesi ile çalışır.
Uygulamanızın çerçeveyle çalışma şeklini optimize etmek için bazı adımlar uygulayabilirsiniz. Daha fazla bilgi için Autofill Framework'e Genel Bakış bölümüne bakın.
İndirilebilir yazı tipleri
Android 8.0 (API düzeyi 26) ve Android Destek Kitaplığı 26, yazı tiplerini APK'da paket haline getirmek veya APK'nın yazı tiplerini indirmesine izin vermek yerine bir sağlayıcı uygulamasından yazı tipi istemenize olanak sağlar. Bu özellik APK'nızın boyutunu küçültür, uygulama yükleme başarı oranını artırır ve birden fazla uygulamanın aynı yazı tipini paylaşmasına olanak tanır.
Yazı tiplerini indirme hakkında daha fazla bilgi için İndirilebilir Yazı Tipleri konusuna bakın.
XML'deki yazı tipleri
Android 8.0 (API düzeyi 26), yazı tiplerini kaynak olarak kullanmanıza olanak tanıyan XML'deki Yazı Tipleri adlı yeni bir özelliği kullanıma sunar. Yani, yazı tiplerini öğe olarak gruplandırmaya gerek yoktur. Yazı tipleri R
dosyasında derlenir ve sistemde otomatik olarak kaynak şeklinde kullanılabilir. Ardından, bu yazı tiplerine yeni bir kaynak türünün (font
) yardımıyla erişebilirsiniz.
Destek Kitaplığı 26, API 14 ve sonraki sürümlerini çalıştıran cihazlarda bu özellik için tam destek sağlar.
Yazı tiplerini kaynak olarak kullanma ve sistem yazı tiplerini alma hakkında daha fazla bilgi için XML'deki yazı tipleri bölümüne bakın.
TextView'u otomatik boyutlandırma
Android 8.0 (API düzeyi 26), metninizin boyutunu TextView boyutuna göre otomatik olarak genişletme veya daraltma ayarını yapmanıza olanak tanır. Bu da metin boyutunu farklı ekranlarda veya dinamik içerikle optimize etmenin çok daha kolay olduğu anlamına gelir. Android 8.0'da TextView'u otomatik boyutlandırma hakkında daha fazla bilgi için TextView'u Otomatik Boyutlandırma bölümüne bakın.
Uyarlanabilir simgeler
Android 8.0 (API düzeyi 26) uyarlanabilir başlatıcı simgelerini kullanıma sunuyor. Uyarlanabilir simgeler, görsel efektleri destekler ve farklı cihaz modellerinde çeşitli şekiller gösterebilir. Uyarlanabilir simgeleri nasıl oluşturacağınızı öğrenmek için Uyarlanabilir Simgeler kılavuzuna bakın.
Renk yönetimi
Görüntüleme uygulamaları geliştiren Android geliştiricileri artık, geniş renk gamına sahip bir ekrana sahip yeni cihazlardan yararlanabilir. Geniş gamlı görüntüleri görüntülemek için uygulamaların manifest dosyalarında bir işaret etkinleştirmesi (etkinlik başına) ve bit eşlemleri yerleşik geniş renk profiliyle (AdobeRGB, Pro Photo RGB, DCI-P3 vb.) yüklemesi gerekir.
WebView API'leri
Android 8.0, uygulamanızda web içeriğini görüntüleyen WebView
nesnelerini yönetmenize yardımcı olmak için çeşitli API'ler sağlar. Uygulamanızın kararlılığını ve güvenliğini geliştiren bu API'ler aşağıdakileri içerir:
- Sürüm API'si
- Google Güvenli Tarama API'sı
- Fesih Ayarı API'sı
- Oluşturucu Önem API'si
Bu API'lerin nasıl kullanılacağı hakkında daha fazla bilgi edinmek için Web Görünümlerini Yönetme bölümüne bakın.
WebView
sınıfı, artık web'de gezinmenin güvenliğini artırmak için Güvenli Tarama API'si içeriyor. Daha fazla bilgi için Google Safe Browsing API'ye bakın.
Kısayolları ve widget'ları sabitleme
Android 8.0 (API düzeyi 26), kısayolları ve widget'ları uygulama içinde sabitleme olanağı sunar. Uygulamanızda, desteklenen başlatıcılar için kullanıcı iznine tabi olarak sabitlenmiş kısayollar ve widget'lar oluşturabilirsiniz.
Daha fazla bilgi için Kısayolları ve Widget'ları Sabitleme özellik kılavuzuna bakın.
Maksimum ekran en boy oranı
Android 8.0 (API düzeyi 26), uygulamaların maksimum en boy oranının yapılandırılmasına ilişkin değişiklikler getirir.
İlk olarak Android 8.0'da, uygulamanızın maksimum en boy oranını ayarlamak için kullanabileceğiniz maxAspectRatio özelliği sunulur. Buna ek olarak, Android 8.0 ve sonraki sürümlerde, bir uygulamanın varsayılan maksimum en boy oranı, uygulamanın çalıştığı cihazın yerel en boy oranıdır.
Maksimum en boy oranı belirtme hakkında daha fazla bilgi için Birden Fazla Ekranı Destekleme bölümüne bakın.
Çoklu ekran desteği
Android 8.0'dan (API seviyesi 26) başlayarak platform, birden fazla ekran için gelişmiş destek sunuyor. Bir etkinlik çoklu pencere modunu destekliyorsa ve birden fazla ekranı olan bir cihazda çalışıyorsa kullanıcılar etkinliği bir ekrandan diğerine taşıyabilir. Bir uygulama bir etkinlik başlattığında, uygulama etkinliğin hangi ekranda çalışması gerektiğini belirtebilir.
Not: Bir etkinlik, çoklu pencere modunu destekliyorsa Android 8.0 bu etkinlik için çoklu ekran desteğini otomatik olarak etkinleştirir. Çoklu ekran ortamında düzgün bir şekilde çalıştığından emin olmak için uygulamanızı test etmelisiniz.
Uygulamanın birden fazla ekranı olsa bile, bir defada yalnızca bir etkinlik devam ettirilmiş durumda olabilir. Odaklanılan etkinlik devam ettirilmiş durumda; diğer tüm görünür etkinlikler duraklatılır ancak durdurulmaz. Birkaç etkinliğin görünür olduğu etkinlik yaşam döngüsü hakkında daha fazla bilgi için Çoklu Pencere Yaşam Döngüsü bölümüne bakın.
Kullanıcı bir etkinliği bir ekrandan diğerine taşıdığında sistem, etkinliği yeniden boyutlandırır ve gerektiğinde çalışma zamanı değişiklikleri yapar. Etkinliğiniz, yapılandırma değişikliğini yönetebilir veya sistemin, etkinliğinizi içeren işlemi kaldırıp yeni boyutlarla yeniden oluşturmasına izin verebilir. Daha fazla bilgi için Yapılandırma Değişikliklerini İşleme bölümüne bakın.
ActivityOptions
, birden fazla ekranı desteklemek için iki yeni yöntem sunar:
setLaunchDisplayId()
- Başlatıldığında etkinliğin hangi ekranda gösterileceğini belirtir.
getLaunchDisplayId()
- Etkinliğin mevcut başlatma ekranını döndürür.
Adb kabuğu, birden fazla ekranı destekleyecek şekilde genişletilmiştir.
shell start
komutu artık bir etkinliği başlatmak ve etkinliğin hedef görüntüsünü belirtmek için kullanılabilir:
adb shell start <activity_name> --display <display_id>
Birleştirilmiş düzen kenar boşlukları ve dolgu
Android 8.0 (API düzeyi 26), bir View
öğesinin karşı taraflarının aynı kenar boşluğu veya dolguyu kullandığı durumları belirtmenizi kolaylaştırır.
Özellikle, artık düzen XML dosyalarınızda aşağıdaki özellikleri kullanabilirsiniz:
-
layout_marginTop
velayout_marginBottom
özelliklerini aynı anda tanımlayanlayout_marginVertical
. -
layout_marginLeft
velayout_marginRight
özelliklerini aynı anda tanımlayanlayout_marginHorizontal
. -
paddingTop
vepaddingBottom
özelliklerini aynı anda tanımlayanpaddingVertical
. -
paddingLeft
vepaddingRight
özelliklerini aynı anda tanımlayanpaddingHorizontal
.
Not: Uygulamanızın mantığını, metin yönü de dahil olmak üzere farklı dilleri ve kültürleri destekleyecek şekilde özelleştiriyorsanız bu özelliklerin
layout_marginStart
,
layout_marginEnd
,
paddingStart
veya
paddingEnd
değerlerini etkilemeyeceğini unutmayın. Metnin yönüne bağlı bir düzen davranışı oluşturmak için yeni dikey ve yatay düzen özelliklerine ek olarak bu değerleri kendiniz de ayarlayabilirsiniz.
İşaretçi yakalama
Oyunlar, uzaktan masaüstü ve sanallaştırma istemcileri gibi bazı uygulamalar fare işaretçisi üzerinde kontrol sahibi olmaktan büyük yarar sağlar. İşaretçi yakalama, Android 8.0'da (API seviyesi 26) yeni bir özelliktir. Bu özellik, tüm fare etkinliklerini uygulamanızda odaklanmış bir görünümde yayınlayarak bu tür bir denetim sağlar.
Android 8.0'dan başlayarak, uygulamanızdaki bir View
işaretçi yakalama isteğinde bulunabilir ve yakalanan işaretçi etkinliklerini işlemek için bir işleyici tanımlayabilir. Bu moddayken fare işaretçisi gizlenir. Görünüm, artık fare bilgilerine ihtiyaç
olmadığında işaretçi yakalamayı serbest bırakabilir. Sistem, görüntü odağı kaybolduğunda (örneğin, kullanıcı başka bir uygulama açtığında) işaretçi yakalamayı da serbest bırakabilir.
Bu özelliği uygulamanızda nasıl kullanacağınızla ilgili bilgi edinmek için İşaretçi yakalama konusuna bakın.
Uygulama kategorileri
Android 8.0 (API düzeyi 26), her uygulamanın uygun olduğu bir kategoriyi bildirmesine olanak tanır. Bu kategoriler; Veri Kullanımı, Pil Kullanımı veya Depolama Alanı Kullanımı gibi benzer amaca veya işlevlere sahip uygulamaları kullanıcılara sunarken bir araya getirmek için kullanılır. <application>
manifest etiketinizdeki android:appCategory
özelliğini ayarlayarak uygulamanız için bir kategori tanımlayabilirsiniz.
Android TV başlatıcı
Android 8.0 (API düzeyi 26), Android 8.0 için Android TV emülatörü ve Nexus Player cihaz görüntüsüyle kullanılabilen içerik merkezli yeni bir Android TV ana ekran deneyimi içerir. Yeni ana ekran, video içeriğini kanallara karşılık gelen satırlarda düzenler. Bu satırların her biri, sistemdeki bir uygulama tarafından programlarla doldurulur. Uygulamalar birden çok kanal yayınlayabilir ve kullanıcılar, ana ekranda görmek istedikleri kanalları yapılandırabilir. Android TV ana ekranında, kullanıcının izleme alışkanlıklarına göre uygulamalardaki programlarla doldurulan Sonrakini İzle satırı da bulunur. Uygulamalar, kullanıcı bir programa odaklandığında otomatik olarak oynatılan video önizlemeleri de sağlayabilir. Kanal ve program doldurma API'ları, Android 8.0 ile bir Android Destek Kitaplığı modülü olarak dağıtılan TvProvider API'lerinin bir parçasıdır.
Animatör Seti
AnimatorSet
API, Android 8.0 (API düzeyi 26) sürümünden başlayarak artık ters çevirme ve oynamayı desteklemektedir. Arama özelliği, animasyonun konumunu belirli bir noktaya ayarlamanızı sağlar. Uygulamanızda geri alınabilen işlemlerle ilgili animasyonlar varsa tersten oynatma yararlıdır. İki ayrı animasyon grubu tanımlamak yerine, aynı animasyon grubunu tersten oynatabilirsiniz.
Giriş ve gezinme
Klavyeyle gezinme kümeleri
Uygulamanızdaki bir etkinlik Şekil 2'deki gibi karmaşık bir görünüm hiyerarşisi kullanıyorsa kullanıcı arayüzü öğesi gruplarını, klavyeyle gezinmeyi kolaylaştırmak için kümeler halinde organize etmeyi düşünün. Kullanıcılar Chromebook cihazlarında Meta+Sekme veya Arama+Sekme tuşlarına basarak bir kümeden diğerine gidebilir. Kümelere örnek olarak şunlar verilebilir: yan paneller, gezinme çubukları, ana içerik alanları ve birçok alt öğe içerebilecek öğeler.
![Kullanıcının klavye gezinme kümesi kısayolunu kullanarak gezinebileceği beş gezinme kümesini içeren örnek etkinlik. Kümeler şu düzende görünür: üst panel, sol yan panel, ana içerik alanı, alt panel ve kayan işlem düğmesi.](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=5&hl=tr)
Bir View
veya ViewGroup
öğesini küme haline getirmek için öğenin düzen XML dosyasında
android:keyboardNavigationCluster
özelliğini true
olarak ayarlayın veya uygulamanızın kullanıcı arayüzü mantığında true
öğesini setKeyboardNavigationCluster()
öğesine iletin.
Not: Kümeler iç içe yerleştirilemez ancak iç içe yerleştirilmiş olmayan kümeler, hiyerarşinin farklı düzeylerinde görünebilir. Kümeleri iç içe yerleştirmeye çalışırsanız çerçeve yalnızca en üstteki ViewGroup
öğesini küme olarak değerlendirir.
Dokunmatik ekranı olan cihazlarda, kümeye özel ViewGroup
nesnesinin android:touchscreenBlocksFocus
öğesini true
olarak ayarlayarak ilgili kümeye ve kümeden yalnızca küme gezinmesine izin verebilirsiniz. Bu yapılandırmayı bir kümeye uygularsanız kullanıcılar kümeye veya kümeden çıkmak için Sekme tuşunu ya da ok tuşlarını kullanamaz. Bunun yerine küme gezinme klavyesi kombinasyonuna basmaları gerekir.
Varsayılan odağı göster
Android 8.0'da (API düzeyi 26), (yeniden) oluşturulan bir etkinlik devam ettirildikten ve kullanıcı sekme tuşu gibi bir klavye gezinme tuşuna bastıktan sonra odağı alması gereken View
öğesini atayabilirsiniz. Bu "varsayılan olarak odaklanmış" ayarını uygulamak için kullanıcı arayüzü öğesini içeren düzen XML dosyasında bir View
öğesinin
android:focusedByDefault
özelliğini true
olarak ayarlayın veya uygulamanızın kullanıcı arayüzü mantığında true
öğesini setFocusedByDefault()
öğesine iletin.
Konuşma çıkışı
Etkinlikler ve hizmetler, içeriği dikte etmek ve telaffuz etmek için TextToSpeech
örneklerini kullanabilir. Android 8.0 (API düzeyi 26) sürümünden itibaren uygulamanız, bir metin okuma motorunun sentezlenmiş kelimeleri tek tek söylemeye başlamasıyla ilgili daha kesin zamanlama bilgileri elde edebilmektedir (motor bu bilgileri sağladığı sürece). Metin okuma motoru bu kelimeleri söylerken belirli kelimelere dikkat çekmek için bu işlevi kullanabilirsiniz.
Uygulamanızda bu metin okuma motoru iyileştirmelerini kullanmak için bir UtteranceProgressListener
örneğini kaydedin. Kayıt sürecinin bir parçası olarak, onRangeStart()
yöntemi için bir işleyici ekleyin.
Metin okuma motoru, belirli bir metin aralığının ses çalmasının başlayacağı anı kaydetmek için rangeStart()
çağırır. Söz konusu metin aralığına ait ses çalınmaya başladığında uygulamanızın onRangeStart()
yöntemi yürütülür. Ardından uygulamanız bu geri çağırmaya yanıt verebilir. Örneğin, bu ifadeyle ilişkili metin aralığını vurgulayabilir.
Metin okuma motorunun oynatma ilerleme durumunu izleme hakkında daha fazla bilgi için UtteranceProgressListener
sınıfı referansına bakın.
Sistem
Yeni StrictMode algılayıcıları
Android 8.0 (API düzeyi 26), uygulamanızdaki olası hataları belirlemenize yardımcı olmak için üç yeni StrictMode algılayıcısı ekler:
detectUnbufferedIo()
, uygulamanızın arabelleğe almadan veri okuduğunu veya yazdığını algılar. Bu durum, performansı büyük ölçüde etkileyebilir.detectContentUriWithoutPermission()
, uygulamanızın dışında bir Etkinlik başlatırken uygulamanızın yanlışlıkla başka bir uygulamaya izin vermeyi unuttuğunda bunu algılar.detectUntaggedSockets()
, uygulamanızın, trafiğinizi hata ayıklama amacıyla etiketlemek içinsetThreadStatsTag(int)
kullanmadan ağ trafiği gerçekleştirdiğini algılar.
Önbelleğe alınan veriler
Android 8.0 (API düzeyi 26), önbelleğe alınan verilerle ilgili daha iyi rehberlik ve davranışlar sağlar. Artık her uygulamaya, önbelleğe alınan veriler için getCacheQuotaBytes(UUID)
tarafından döndürülen şekilde bir disk alanı kotası verilir.
Sistemin diskte yer açması gerektiğinde, tahsis edilen kotasını en çok aşan uygulamalardan önbelleğe alınan dosyaları silerek başlar. Bu nedenle, önbelleğe alınan verilerinizi size ayrılan kotanızın altında tutarsanız önbelleğe alınan dosyalarınız, sistemde gerektiğinde en son temizlenecek dosyalar olur. Sistem, uygulamanızın içinde önbelleğe alınan hangi dosyaların silineceğine karar verirken öncelikle en eski dosyaları dikkate alır (değiştirme zamanına göre belirlenir).
Ayrıca sistemin önbelleğe alınan verilerinizi nasıl serbest bırakacağını kontrol etmek için dizin bazında etkinleştirebileceğiniz iki yeni davranış da vardır:
StorageManager.setCacheBehaviorAtomic()
, bir dizinin ve tüm içeriğinin tek bir atom birimi olarak silinmesi gerektiğini belirtmek için kullanılabilir.- Dizin içindeki dosyaların silinmesi yerine, uzunluklarının 0 bayt olacak şekilde kısaltılması ve boş dosyanın dokunulmadan bırakılması gerektiğini belirtmek için
setCacheBehaviorTombstone(File, boolean)
kullanılabilir.
Son olarak, büyük dosyalar için disk alanı ayırmanız gerektiğinde yeni allocateBytes(FileDescriptor, long)
API'yi kullanabilirsiniz. Bu API, isteğinizi karşılamak için diğer uygulamalara ait önbelleğe alınmış dosyaları otomatik olarak temizler (gerektiğinde). Cihazda yeni verilerinizi saklamaya yetecek kadar disk alanı olup olmadığına karar verirken getUsableSpace()
kullanmak yerine getAllocatableBytes(UUID)
yöntemini çağırın. Çünkü sistem, sistemin sizin adınıza temizlemek istediği önbelleğe alınmış tüm verileri dikkate alır.
İçerik sağlayıcı sayfası oluşturma
İçerik sağlayıcıları, büyük bir veri kümesini tek seferde bir sayfa yükleme desteği içerecek şekilde güncelledik. Örneğin, binlerce görsel içeren bir fotoğraf uygulaması, bir sayfada sunulacak verilerin bir alt kümesini sorgulayabilir. Bir içerik sağlayıcı tarafından döndürülen her sonuç sayfası tek bir İmleç nesnesiyle temsil edilir. Bu özellikten yararlanmak için hem istemcinin hem de sağlayıcının sayfalama işlemi uygulaması gerekir.
İçerik sağlayıcılarda yapılan değişiklikler hakkında ayrıntılı bilgi için bkz. ContentProvider
ve ContentProviderClient
.
İçerik yenileme istekleri
Artık ContentProvider
ve ContentResolver
sınıflarının her birinde refresh()
yöntemi bulunuyor. Böylece müşteriler, istedikleri bilgilerin güncel olup olmadığını kolayca anlayabiliyor.
ContentProvider
öğesini genişleterek özel içerik yenileme mantığı ekleyebilirsiniz. Sağlayıcınızın istemcilerine verileri kendiniz yenilemeyi denediğinizi belirterek true
değerini döndürmek için refresh()
yöntemini geçersiz kıldığınızdan emin olun.
İstemci uygulamanız, refresh()
olarak da adlandırılan farklı bir yöntemi çağırarak yenilenmiş içeriği açıkça isteyebilir. Bu yöntemi çağırırken yenilenecek verilerin URI'sini iletin.
Not: Bir ağ üzerinden veri isteğinde bulunuyor olabileceğiniz için refresh()
'yi yalnızca içeriğin eski olduğuna dair güçlü bir gösterge olduğunda istemci tarafından çağırmanız gerekir.
Bu tür içerik yenilemenin en yaygın nedeni, mevcut kullanıcı arayüzünün güncel içeriği görüntülemesini açıkça isteyen bir kaydırarak yenileme hareketine yanıt vermektir.
JobScheduler iyileştirmeleri
Android 8.0 (API düzeyi 26), JobScheduler
ile ilgili çok sayıda iyileştirme sunmaktadır. Şu anda kısıtlanmış olan arka plan hizmetlerini veya örtülü yayın alıcılarını değiştirmek için genellikle planlanmış işleri kullanabildiğinizden, bu iyileştirmeler uygulamanızın yeni arka planda yürütme sınırlarına uymasını kolaylaştırır.
JobScheduler
güncellemeleri:
-
Artık bir iş sırasını planlanmış bir işle ilişkilendirebilirsiniz. Bir işin sırasına çalışma öğesi eklemek için
JobScheduler.enqueue()
çağrısı yapın. İş çalışırken, beklemedeki işleri sıradan çıkarabilir ve işleyebilir. Bu işlev, daha önce bir arka plan hizmetinin başlatılması için gerekli olan kullanım alanlarının, özellikle deIntentService
uygulamasının kullanıldığı hizmetlerin birçoğunu yerine getirir. -
Android Destek Kitaplığı 26.0.0,
IntentService
ile aynı işlevi sağlayan ancak Android 8.0 (API düzeyi 26) veya sonraki sürümlerde çalışırken hizmetler yerine işler kullanan yeni birJobIntentService
sınıfını kullanıma sunuyor. -
ClipData
numarasını bir işle ilişkilendirmek için artıkJobInfo.Builder.setClipData()
numaralı telefonu arayabilirsiniz. Bu seçenek, URI izin izinlerini bir işle ilişkilendirebilmenizi sağlar. Bu, söz konusu izinlerinContext.startService()
için yayılmasına benzer. URI izin izinlerini, iş sıralarında amaçlar için de kullanabilirsiniz. -
Planlanmış işler artık birkaç yeni kısıtlamayı destekliyor:
JobInfo.isRequireStorageNotLow()
- Cihazın kullanılabilir depolama alanı azsa iş çalışmaz.
JobInfo.isRequireBatteryNotLow()
- Pil seviyesi, kritik eşiğin altında veya altındaysa iş çalışmaz. Bu, cihazda Düşük pil uyarısı sistem iletişim kutusunun gösterildiği düzeydir.
NETWORK_TYPE_METERED
- İş için çoğu hücresel veri planında olduğu gibi sayaçlı bir ağ bağlantısı gerekir.
Özel veri deposu
Android 8.0 (API düzeyi 26), tercihlerinize özel bir veri deposu sağlamanıza olanak tanır. Bu, uygulamanız tercihleri bir bulutta veya yerel veritabanında depoluyorsa ya da tercihler cihaza özgüyse yararlı olabilir. Veri deposunu uygulama hakkında daha fazla bilgi için Özel Veri Deposu bölümüne bakın.
Medya geliştirmeleri
Ses Şekillendirici
Yeni bir VolumeShaper
sınıfı var. Şeffaflaşma, kararma ve kararma gibi kısa otomatik ses geçişleri gerçekleştirmek için bu API'yi kullanın.
Daha fazla bilgi edinmek için VolumeShaper ile Genliği Kontrol Etme konusuna bakın.
Ses odağı geliştirmeleri
Ses uygulamaları, ses odağı için istekte bulunup bu ayarı terk ederek bir cihazdaki ses çıkışını paylaşır.
Bir uygulama, oynatma işlemini başlatarak veya durdurarak ya da ses düzeyini azaltarak odaktaki değişiklikleri ele alır.
Yeni bir AudioFocusRequest
sınıfı var. Bu sınıfı requestAudioFocus()
parametresi olarak kullanan uygulamalar, ses odağındaki değişiklikleri işlerken yeni özelliklere sahip olur: otomatik sesi kısma ve gecikmeli odaklanma kazancı.
Medya metrikleri
Yeni bir getMetrics()
yöntemi, özellikler ve değerlerin eşlemesi olarak ifade edilen, yapılandırma ve performans bilgilerini içeren bir PersistableBundle
nesnesi döndürür.
getMetrics()
yöntemi, şu medya sınıfları için tanımlanmıştır:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Metrikler her örnek için ayrı olarak toplanır ve örneğin kullanım ömrü boyunca devam eder. Kullanılabilir metrik yoksa yöntem boş sonucunu döndürür. Döndürülen gerçek metrikler sınıfa bağlıdır.
Medya Oynatıcı
Android 8.0'dan (API düzeyi 26) itibaren MediaPlayer, DRM korumalı materyali ve HLS örnek düzeyinde şifrelenmiş medyayı oynatabilir.
Android 8.0'da, bir kareyi ararken çok ayrıntılı kontrol sağlayan yeni bir aşırı yüklenmiş seekTo()
komutu kullanıma sunuluyor. Bu parametre, arama modunu belirten ikinci bir parametre içerir:
SEEK_PREVIOUS_SYNC
, medya konumunu, belirtilen zamanda veya öncesinde bulunan bir veri kaynağıyla ilişkilendirilmiş senkronizasyon (veya anahtar) çerçevesine taşır.SEEK_NEXT_SYNC
, medya konumunu, belirtilen zamandan hemen sonra veya belirtilen zamanda bulunan bir veri kaynağıyla ilişkilendirilmiş senkronizasyon (veya anahtar) çerçevesine taşır.SEEK_CLOSEST_SYNC
, medya konumunu, belirtilen zamana en yakın veya belirtilen zamandaki bir veri kaynağıyla ilişkilendirilmiş senkronizasyon (veya anahtar) çerçevesine taşır.SEEK_CLOSEST
, medya konumunu belirtilen zamana en yakın veya belirtilen zamandaki bir veri kaynağıyla ilişkilendirilmiş kareye (senkronizasyon veya animasyon karesi olması zorunlu değildir) taşır.
Kesintisiz oynatma yapılırken uygulamalar SEEK_CLOSEST
yerine daha yavaş çalışan ancak daha hassas olabilen SEEK_
modlarından herhangi birini kullanmalıdır.
Medya Kaydedici
- MediaRecorder artık akış için yararlı olan MPEG2_TS biçimini destekliyor:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
, artık dilediğiniz sayıda ses ve video akışını işleyebilir. Artık bir ses ve/veya video parçasıyla sınırlı değilsiniz. İstediğiniz kadar parçayı karıştırmak içinaddTrack()
özelliğini kullanın.MediaMuxer
, her çerçeve için kullanıcı tanımlı bilgiler içeren bir veya daha fazla meta veri kanalı da ekleyebilir. Meta verinin biçimi uygulamanız tarafından tanımlanır. Meta veri parçası yalnızca MP4 kapsayıcıları için desteklenir.
Meta veriler, çevrimdışı işleme için yararlı olabilir. Örneğin, video sabitleme işlemi için sensörden gelen jiroskop sinyalleri kullanılabilir.
Bir meta veri parçası eklerken, parçanın mime biçimi "application/" ön ekiyle başlamalıdır. Meta veri yazmak, video/ses verisi yazmakla aynıdır, tek fark verilerin bir MediaCodec
öğesinden gelmemesidir. Bunun yerine, uygulama writeSampleData()
yöntemine ilişkilendirilmiş bir zaman damgasıyla birlikte bir ByteBuffer
iletir.
Zaman damgası, video ve ses parçalarıyla aynı zaman tabanında olmalıdır.
Oluşturulan MP4 dosyasında, meta verinin MIME biçimini işaret etmek için ISOBMFF'nin 12.3.3.2 bölümünde tanımlanan TextMetaDataSampleEntry
kullanılır. Meta veri parçası içeren dosyayı çıkarmak için MediaExtractor
kullanıldığında meta verilerin MIME biçimi MediaFormat
öğesine çıkarılır.
İyileştirilmiş medya dosyası erişimi
Depolama Erişim Çerçevesi (SAF) uygulamaların, bir veri kaynağındaki dosyalara diğer uygulamaların erişebilmesini sağlayan özel bir DocumentsProvider
göstermesini sağlar. Hatta bir belge sağlayıcı, ağ depolamada bulunan veya Medya Aktarım Protokolü (MTP) gibi bir protokol kullanan dosyalara erişim bile sağlayabilir.
Ancak, uzak bir veri kaynağından büyük medya dosyalarına erişmek bazı zorlukları beraberinde getirir:
- Medya oynatıcılar, bir dosya sağlayıcıdan dosyaya aranabilir erişim gerektirir. Büyük bir medya dosyasının uzak bir veri kaynağında bulunduğu durumlarda belge sağlayıcısı, tüm verileri önceden getirmeli ve bir anlık görüntü dosyası tanımlayıcısı oluşturmalıdır. Medya oynatıcı, dosya tanımlayıcısı olmadan dosyayı oynatamaz. Bu nedenle, doküman sağlayıcı dosyayı indirmeyi bitirene kadar oynatma başlatılamaz.
- Fotoğraf uygulamaları gibi medya koleksiyonu yöneticilerinin, kapsamlı klasörler aracılığıyla harici bir SD kartta depolanan medyaya erişmek için bir dizi erişim URI'sini incelemesi gerekir. Bu erişim kalıbı, medya üzerindeki taşıma, kopyalama ve silme gibi toplu işlemleri oldukça yavaşlatır.
- Medya koleksiyonu yöneticileri, URI'si verilen bir dokümanın konumunu belirleyemez. Bu durum, bu tür uygulamaların, kullanıcıların bir medya dosyasının nereye kaydedileceğini seçmesine izin vermesini zorlaştırır.
Android 8.0, Depolama Erişim Çerçevesi'ni iyileştirerek bu zorlukların her birini ele alır.
Özel belge sağlayıcıları
Depolama Erişim Çerçevesi, Android 8.0'dan başlayarak özel belge sağlayıcıların uzak bir veri kaynağında bulunan dosyalar için aranabilir dosya tanımlayıcıları oluşturmasına olanak tanır. SAF, aranabilen yerel bir dosya açıklayıcısı almak için dosyayı açabilir. Daha sonra SAF, ayrı bayt isteklerini belge sağlayıcıya iletir. Bu özellik, belge sağlayıcının tüm dosyayı önceden önbelleğe almak yerine medya oynatıcı uygulamasının istediği bayt aralığını döndürmesini sağlar.
Bu özelliği kullanmak için yeni StorageManager.openProxyFileDescriptor()
yöntemini çağırmanız gerekir. openProxyFileDescriptor()
yöntemi, ProxyFileDescriptorCallback
nesnesini geri çağırma olarak kabul eder. Bir istemci uygulaması, belge sağlayıcıdan döndürülen dosya açıklayıcıda dosya işlemleri gerçekleştirdiğinde SAF geri çağırmayı çağırır.
Doğrudan doküman erişimi
Android 8.0 (API düzeyi 26) sürümünden itibaren, belirtilen mediaUri
ile aynı dokümana referans veren bir URI almak için getDocumentUri()
yöntemini kullanabilirsiniz.
Bununla birlikte, döndürülen URI bir DocumentsProvider
tarafından desteklendiğinden medya koleksiyonu yöneticileri, kapsama dahil olan dizinlerin ağaçlarını incelemek zorunda kalmadan belgeye doğrudan erişebilir.
Sonuç olarak, medya yöneticileri belge üzerinde dosya işlemlerini önemli ölçüde daha hızlı gerçekleştirebilir.
Dikkat: getDocumentUri()
yöntemi yalnızca medya dosyalarını bulur; uygulamalara bu dosyalara erişim izni vermez. Medya dosyalarına erişim izninin nasıl alınacağı hakkında daha fazla bilgi için referans belgelere bakın.
Dokümanlara giden yollar
Android 8.0'da (API düzeyi 26) Depolama Erişim Çerçevesi'ni kullanırken bir belgenin kimliğine sahip dosya sisteminin kökünden yolu belirlemek için hem DocumentsContract
hem de DocumentsProvider
sınıflarında bulunan findDocumentPath()
yöntemini kullanabilirsiniz. Yöntem, bu yolu bir DocumentsContract.Path
nesnesinde döndürür. Bir dosya sisteminde aynı dokümana giden birden fazla tanımlanmış yol olduğunda yöntem, belirtilen kimlikle dokümana ulaşmak için en sık kullanılan yolu döndürür.
Bu işlev özellikle aşağıdaki senaryolarda yararlıdır:
- Uygulamanız, belirli bir dokümanın konumunu görüntüleyen "farklı kaydet" iletişim kutusu kullanıyor.
- Uygulamanız, klasörleri arama sonuçları görünümünde gösterir ve kullanıcı bu klasörü seçerse belirli bir klasördeki alt dokümanları yüklemelidir.
Not: Uygulamanızın yoldaki yalnızca bazı dokümanlara erişim izni varsa findDocumentPath()
döndürülen değeri yalnızca uygulamanızın erişebildiği klasörleri ve dokümanları içerir.
Ses çalma izleniyor
AudioManager
sistem hizmeti, etkin AudioPlaybackConfiguration
nesnelerinin bir listesini tutar. Bu nesnelerin her biri, belirli bir ses çalma oturumuyla ilgili bilgiler içerir. Uygulamanız, şu anda etkin olan yapılandırma grubunu getActivePlaybackConfigurations()
çağrısı yaparak alabilir.
Android 8.0 (API düzeyi 26) sürümünden itibaren, bir veya daha fazla AudioPlaybackConfiguration
nesnesi değiştiğinde uygulamanızı bildiren bir geri çağırma kaydedebilirsiniz. Bunu yapmak için AudioManager.AudioPlaybackCallback
örneğini ileterek registerAudioPlaybackCallback()
çağrısı yapın. AudioManager.AudioPlaybackCallback
sınıfı, ses oynatma yapılandırması değiştiğinde sistemin çağırdığı onPlaybackConfigChanged()
yöntemini içerir.
Bağlantı
Kablosuz Uyumlu
Android 8.0 (API düzeyi 26), Komşu Bilinirlik Ağı (NAN) spesifikasyonunu temel alan Wi-Fi Aware için destek sunar. Uygun Wi-Fi duyarlı donanıma sahip cihazlarda uygulamalar ve yakındaki cihazlar, bir internet erişim noktası olmadan kablosuz bağlantıyı keşfedip iletişim kurabilir. Cihazlara mümkün olan en kısa sürede Wi-Fi duyarlılığı sağlamak için donanım iş ortaklarımızla birlikte çalışıyoruz. Wi-Fi Aware'i uygulamanıza nasıl entegre edeceğiniz hakkında bilgi edinmek için Wi-Fi Aware sayfasına göz atın.
Bluetooth
Android 8.0 (API düzeyi 26), aşağıdaki özellikleri ekleyerek platformun Bluetooth desteğini zenginleştirir:
- Şarkı kitaplığına göz atmayı sağlayan AVRCP 1.4 standardı için destek.
- Bluetooth Düşük Enerji (BDE) 5.0 standardı için destek.
- Sony LDAC codec'inin Bluetooth yığınıyla entegrasyonu.
Tamamlayıcı cihaz eşleme
Android 8.0 (API düzeyi 26), Bluetooth, BDE ve kablosuz ağ üzerinden tamamlayıcı cihazlarla eşlemeye çalışırken eşleme isteği iletişim kutusunu özelleştirmenize olanak tanıyan API'ler sunar. Daha fazla bilgi için Tamamlayıcı Cihaz Eşleme bölümüne bakın.
Android'de Bluetooth'u kullanma hakkında daha fazla bilgi için Bluetooth kılavuzuna bakın. Android 8.0'a (API düzeyi 26) özgü Bluetooth değişiklikleri için Android 8.0 Davranış Değişiklikleri sayfasının Bluetooth bölümüne bakın.
Paylaşılıyor
Akıllı paylaşım
Android 8.0 (API düzeyi 26), kullanıcıların kişiselleştirilmiş paylaşım tercihlerini öğrenir ve paylaşım için doğru uygulamalar olan her içerik türünü daha iyi anlar. Örneğin, kullanıcı bir makbuzun fotoğrafını çekerse Android 8.0 bir harcama izleme uygulaması önerebilir; kullanıcı selfie çekerse bu resmi daha iyi işleyebilen bir sosyal medya uygulamasıdır. Android 8.0 tüm bu kalıpları, kullanıcıların kişiselleştirilmiş tercihlerine göre otomatik olarak öğrenir.
Akıllı paylaşım, image
dışındaki içerik türlerinde (ör. audio
, video
, text
, URL
) kullanılabilir.
Akıllı paylaşımı etkinleştirmek için içeriği paylaşan amaca üç dizeye kadar ek açıklamadan oluşan bir ArrayList
ekleyin. Ek açıklamalarda içeriğin ana bileşenleri veya konuları açıklanmalıdır. Aşağıdaki kod örneğinde amaca ek açıklamaların nasıl ekleneceği gösterilmektedir:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
Akıllı paylaşım ek açıklamaları hakkında ayrıntılı bilgi için EXTRA_CONTENT_ANNOTATIONS
sayfasını inceleyin.
Metin sınıflandırıcı
Uyumlu cihazlarda uygulamalar, bir dizenin bilinen bir sınıflandırıcı varlık türüyle eşleşip eşleşmediğini kontrol etmek ve önerilen seçim alternatiflerini almak için yeni bir Metin Sınıflandırıcı kullanabilir. Sistem tarafından tanınan varlıklar arasında adresler, URL'ler, telefon numaraları ve e-posta adresleri bulunur. Daha fazla bilgi için TextClassifier
bölümünü inceleyin.
Erişilebilirlik
Android 8.0 (API düzeyi 26), kendi erişilebilirlik hizmetlerini oluşturan geliştiriciler için birkaç yeni erişilebilirlik özelliğini destekler:
- Erişilebilirlik ses düzeyini ayarlamak için yeni bir birim kategorisi.
- Giriş mekanizması olarak parmak izi hareketleri kullanılır.
- Çok dilli metin okuma özellikleri.
- Tercih edilen erişilebilirlik hizmetine hızlı bir şekilde erişmek için donanım tabanlı erişilebilirlik kısayolu.
- Devam eden hareketler veya programatik vuruş sıraları için destek.
- Etkinleştirilmiş çeşitli erişilebilirlik özelliklerinden birini çağırmak için bir erişilebilirlik düğmesi (yalnızca yazılımla oluşturulan gezinme alanı kullanan cihazlarda kullanılabilir).
- Standartlaştırılmış tek taraflı aralık değerleri.
- İpucu metni ve ekrandaki metin karakterlerinin konumları dahil olmak üzere metnin daha kolay işlenmesi için çeşitli özellikler.
Güvenlik ve Gizlilik
İzinler
Android 8.0 (API düzeyi 26), telefon ile ilgili birtakım yeni izinler sunmaktadır:
-
ANSWER_PHONE_CALLS
izni, uygulamanızın gelen telefon aramalarını programatik olarak yanıtlamasına olanak tanır. Uygulamanızda gelen telefon aramalarını işlemek içinacceptRingingCall()
yöntemini kullanabilirsiniz. -
READ_PHONE_NUMBERS
izni, uygulamanızın bir cihazda depolanan telefon numaralarına okuma erişimi verir.
Bu izinlerin her ikisi de
tehlikeli
olarak sınıflandırılır ve
PHONE
izin grubuna dahildir.
Yeni hesap erişimi ve keşif API'leri
Android 8.0 (API düzeyi 26), uygulamaların kullanıcı hesaplarına erişme şekliyle ilgili çeşitli iyileştirmeler sunmuştur. Kimlik doğrulayıcılar, yönettikleri hesaplardaki hesapların bir uygulamada gizlenip gizlenmeyeceğini veya bir uygulamanın kullanıcılara gösterilip gösterilmeyeceğini belirlemek için kendi politikalarını kullanabilir. Android sistemi, belirli bir hesaba erişebilen uygulamaları izler.
Android'in önceki sürümlerinde, kullanıcı hesaplarının listesini izlemek isteyen uygulamaların, ilişkili olmayan türlere sahip hesaplar da dahil olmak üzere tüm hesaplarla ilgili güncellemeleri alması
zorundaydı. Android 8.0'da, uygulamaların hesap değişikliklerinin alınması gereken hesap türleri listesini belirtmesine olanak tanıyan addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
yöntemini ekler.
API değişiklikleri
Hesap Yöneticisi, kimlik doğrulayıcıların bir hesabı görebilecek uygulamaları yönetmesine yardımcı olmak için altı yeni yöntem sunar:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Belirli bir kullanıcı hesabı ve paket kombinasyonu için görünürlük düzeyini ayarlar.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Belirli bir kullanıcı hesabı ve paket kombinasyonu için görünürlük düzeyini alır. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Kimlik doğrulayıcıların, belirli bir paketle ilgili hesapları ve görünürlük düzeylerini almasına olanak tanır. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Kimlik doğrulayıcıların, belirli bir hesap için kayıtlı görünürlük değerlerini almasına olanak tanır. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Kimlik doğrulayıcıların, bir hesabın görünürlük değerlerini başlatmasına olanak tanır. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
:AccountManager
nesnesine birOnAccountsUpdateListener
işleyicisi ekler. Cihazdaki hesap listesi her değiştiğinde sistem bu dinleyiciyi çağırır.
Android 8.0 (API düzeyi 26), setAccountVisibility(android.accounts.Account, java.lang.String, int)
yöntemi kullanılarak ayarlanmayan uygulamaların görünürlük düzeylerini belirtmek için iki özel Paket Adı değeri sunar. PACKAGE_NAME_KEY_LEGACY_VISIBLE
Görünürlük değeri, GET_ACCOUNTS
izne sahip olan ve Android 8.0'dan önceki Android sürümlerini hedefleyen ya da imzaları
herhangi bir Android sürümünü hedefleyen kimlik doğrulayıcıyla eşleşen
uygulamalara uygulanır.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
, daha önce ayarlanmamış olan ve PACKAGE_NAME_KEY_LEGACY_VISIBLE
özelliğinin geçerli olmadığı uygulamalar için varsayılan bir görünürlük değeri sağlar.
Yeni hesap erişimi ve keşif API'leri hakkında daha fazla bilgi için AccountManager
ve OnAccountsUpdateListener
referansına bakın.
Test etme
Araç testi
Android 8.0 (API düzeyi 26), uygulamanızın araç testleri için aşağıdaki ek destek parçalarını sağlar.
Varsayılan olmayan uygulama işlemlerinde çalıştır
Artık belirli bir araç testinin, uygulamanızın varsayılan işleminin dışındaki bir işlemde çalışması gerektiğini belirtebilirsiniz. Bu yapılandırma, uygulamanız farklı süreçlerde çalışan birden fazla etkinlik içeriyorsa yararlıdır.
Varsayılan olmayan işlem araçlarını tanımlamak için manifest dosyanıza ve ardından istediğiniz
<instrumentation>
öğesine gidin. android:targetProcess
özelliğini ekleyin ve değerini aşağıdakilerden birine ayarlayın:
- Belirli bir işlemin adı.
- İşlem adlarının virgülle ayrılmış listesi.
- Araçların,
android:targetPackage
özelliğinde belirtilen paketteki kodu yürüten başlatılan herhangi bir süreçte çalıştırılmasına olanak tanıyan joker karakter ("*"
).
Araç testiniz yürütüldüğü sırada getProcessName()
yöntemini çağırarak hangi sürecin test edildiğini kontrol edebilirsiniz.
Test sırasında sonuçları bildirme
Artık sonuçları, araç testiniz yürütüldüğü sırada değil, addResults()
yöntemini çağırarak raporlayabilirsiniz.
Testler için örnek amaçlar
Android 8.0 (API düzeyi 26), uygulamanızın etkinlikleri için izole, bağımsız kullanıcı arayüzü testleri oluşturmayı kolaylaştırmak amacıyla onStartActivity()
yöntemini kullanıma sunmuştur. Test sınıfınızın çağırdığı belirli bir amacı işlemek için Instrumentation.ActivityMonitor
sınıfının özel bir alt sınıfında bu yöntemi geçersiz kılarsınız.
Test sınıfınız niyeti çağırdığında yöntem, amacın kendisini yürütmek yerine bir saplama Instrumentation.ActivityResult
nesnesi döndürür. Testlerinizde bu örnek intent mantığını kullanarak etkinliğinizin farklı bir etkinliğe veya tamamen farklı bir uygulamaya geçirdiğiniz niyeti nasıl hazırlayıp ele aldığına odaklanabilirsiniz.
Çalışma Zamanı ve Araçlar
Platform optimizasyonları
Android 8.0 (API düzeyi 26), çalışma zamanı ile diğer optimizasyonları platforma getirerek çeşitli performans iyileştirmeleri sağlar. Bu optimizasyonlar arasında eşzamanlı olarak sıkıştırmalı çöp toplama, bellekin daha verimli kullanımı ve kod yerelliği yer alır.
Bu optimizasyonlar hem işletim sisteminde hem de uygulamalarda daha iyi performansın yanı sıra başlatma sürelerini de kısaltır.
Java dili desteği güncellendi
Android 8.0 (API düzeyi 26), çeşitli ek OpenJDK Java API'leri için destek sağlar:
- OpenJDK 8'den
java.time
. - OpenJDK 7'den
java.nio.file
vejava.lang.invoke
.
Yeni eklenen bu paketlerdeki sınıflar ve yöntemler hakkında daha fazla bilgi edinmek için API referans belgelerine bakın.
Android Studio'da Java 8 dili özelliklerini kullanmak istiyorsanız en son önizleme sürümünü indirmeniz gerekir.
Güncellenmiş ICU4J Android Framework API'leri
Android 8.0 (API düzeyi 26), uygulama geliştiricilerin android.icu
paketi kapsamında kullanabileceği şekilde ICU4J API'lerinin bir alt kümesi olan ICU4J Android Framework API'lerini genişletir. Bu API'ler, cihazda bulunan yerelleştirme verilerini kullanır. Böylece APK'nızdaki ICU4J kitaplıklarını derlemeyerek APK'nızın ayak izinizi azaltabilirsiniz.
Tablo 1. Android'de kullanılan ICU, CLDR ve Unicode sürümleri.
Android API düzeyi | ICU sürümü | CLDR sürümü | Unicode sürümü |
---|---|---|---|
Android 7.0 (API düzeyi 24), Android 7.1 (API düzeyi 25) | 56 | 28 | 8.0 |
Android 8.0 (API düzeyi 26) | 58,2 | 30.0.3 | 9.0 |
ICU4J desteği de dahil olmak üzere Android'de uluslararasılaştırma hakkında daha fazla bilgi için Android'de Uluslararasılaştırma bölümüne bakın.
Android Enterprise
Android 8.0 (API düzeyi 26) çalıştıran cihazlar için yeni kurumsal özellikler ve API'ler sunulmuştur. Bu sürümün öne çıkan özellikleri şunlardır:
- Tümüyle yönetilen cihazlardaki iş profilleri, kuruluşların işleri kişisel verilerden ayırırken ikisini de yönetmesini sağlar.
- API yetkisi, cihaz sahiplerinin ve profil sahiplerinin diğer uygulamalara uygulama yönetimi atamasına olanak tanır.
- Temel hazırlık akışındaki kullanıcı deneyimi iyileştirmeleri (yeni özelleştirme seçenekleri dahil) kurulum süresini kısaltır.
- Bluetooth, kablosuz ağ, yedekleme ve güvenlik üzerindeki yeni denetimler, kuruluşların cihazı daha fazla yönetmesine olanak tanır. Ağ etkinliği günlük kaydı, kuruluşların sorunları takip etmesine yardımcı olur.
Bunlar ve diğer yeni Android Enterprise API'leri ile özellikleri hakkında daha fazla bilgi edinmek için Enterprise'da Android sayfasına göz atın.