Android 8.0 Özellikleri ve API'leri

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ız enterPictureInPictureMode() 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:

    Android 8.0'da (API düzeyi 26) bir bildirim uzun basma menüsü.

    Kullanıcılar, Android 8.0'da bildirimleri görüntülemek için uygulama başlatıcı simgelerine uzun basabilirler.

  • 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çin setSettingsText() 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 ve NOTIFICATION_ID.
  • Bildirim kapatma: Kullanıcılar bildirimleri kendileri kapatabilir ve uygulamalar bunları programatik olarak kaldırabilir. NotificationListenerService sınıfındaki onNotificationRemoved() 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 üzere setColorized() 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çin MessagingStyle 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çin addHistoricMessage() yöntemini de kullanabilirsiniz.

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:

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.
Şekil 2. 5 gezinme kümesi içeren etkinlik

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çin setThreadStatsTag(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 de IntentService 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 bir JobIntentService sınıfını kullanıma sunuyor.
  • ClipData numarasını bir işle ilişkilendirmek için artık JobInfo.Builder.setClipData() numaralı telefonu arayabilirsiniz. Bu seçenek, URI izin izinlerini bir işle ilişkilendirebilmenizi sağlar. Bu, söz konusu izinlerin Context.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:

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);
    

    bkz. MediaRecorder.OutputFormat

  • 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çin addTrack() ö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:

Uygulamanızı nasıl daha erişilebilir hale getirebileceğiniz hakkında daha fazla bilgi edinmek için Erişilebilirlik konusuna bakın.

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çin acceptRingingCall() 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:

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:

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.