Android 8.0 Özellikleri ve API'leri

Android 8.0 (API düzeyi 26), kullanıcılar ve geliştiriciler için çok sayıda yeni özellik ve olanak sunmaktadır. Bu dokümanda, geliştiriciler için yenilikler vurgulanmaktadır.

Platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek 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, bu özelliği diğer Android cihazlarda da kullanılabilir.

PIP modundayken bir etkinlik duraklatılmış durumda olur, ancak içerik göstermeye devam eder. Bu nedenle, uygulamanızın onPause() işleyicisinde oynatmayı duraklatmadığından emin olmalısınız. Bunun yerine, videoyu onStop() uygulamasında duraklatıp onStart() uygulamasında devam ettirmeniz gerekir. 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 android:supportsPictureInPicture öğesini manifest'te 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), yeni bir nesneyi (PictureInPictureParams) kullanıma 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. Buna ek olarak 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 belirtilir. args bölümündeki herhangi bir alan boşsa sistem, Activity.setPictureInPictureParams() öğesini 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 bulunan ö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österir. 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. Etkinliğin en boy oranı değiştiğinde bu yararlı olur. 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 düzeyi 26), bildirim davranışını ve ayarlarını yönetmek için daha kolay ve tutarlı bir yol sağlamak amacıyla bildirimleri yeniden tasarladık. Söz konusu değişiklikler şunlardır:

    Android 8.0'da (API seviyesi 26) bildirim için 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, uygulama başlatıcı simgelerinde noktaların veya rozetlerin görüntülenmesi desteğini kullanıma sundu. 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; bu durumda bildirimler, tekrar görünmeden önce bir süreliğine kaybolabilir. Bildirimler, ilk göründükleri önem düzeyinde tekrar görünürler. Uygulamalar, ertelenmiş bir bildirimi kaldırabilir veya güncelleyebilir. Ancak, ertelenmiş bir bildirimin güncellenmesi, söz konusu bildirimin yeniden görünmesine neden olmaz.
  • Bildirim zaman aşımları: setTimeoutAfter() işlevini 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 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 ekstraları sağlayabilir: EXTRA_CHANNEL_ID, NOTIFICATION_TAG ve NOTIFICATION_ID.
  • Bildirimleri kapatma: Kullanıcılar bildirimleri kendileri kapatabilir ve uygulamalar bunları programatik olarak kaldırabilir. NotificationListenerService sınıfından onNotificationRemoved() yöntemini uygulayarak bir bildirimin ne zaman ve neden kapatıldığını belirleyebilirsiniz.
  • Arka plan renkleri: Bir bildirim için arka plan rengi ayarlayabilir ve etkinleştirebilirsiniz. Bu özelliği bildirimlerde yalnızca kullanıcının tek bakışta görmesi için kritik öneme sahip olan 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. Böylece setColorized() kullanarak bir bildirimde arka plan rengin kullanımını etkinleştirebilirsiniz.
  • 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 sunmak 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 hatalara açıktır. 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 doldurmayı 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 atabilirsiniz. Daha fazla bilgi için Otomatik Doldurma Çerçevesine Genel Bakış bölümünü inceleyin.

İndirilebilir yazı tipleri

Android 8.0 (API düzeyi 26) ve Android Destek Kitaplığı 26, yazı tiplerini APK'ya paketlemek veya APK'nın yazı tiplerini indirmesine izin vermek yerine bir sağlayıcı uygulamasından yazı tipi istemenize olanak tanır. 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 sunuyor. Bu, yazı tiplerini öğe olarak gruplandırmaya gerek olmadığı anlamına gelir. Yazı tipleri R dosyasında derlenir ve sistemde otomatik olarak kaynak şeklinde kullanılabilir. Ardından, yeni bir kaynak türünün (font) yardımıyla bu yazı tiplerine erişebilirsiniz.

Destek Kitaplığı 26, API sürümü 14 ve üstünü ç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 Metin Görünümü'nün boyutuna göre otomatik olarak genişletilecek veya daraltılacak şekilde ayarlamanıza olanak tanır. Bu da farklı ekranlarda veya dinamik içeriklerde metin boyutunu 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 Metin Görünümü'nü Otomatik Boyutlandırma konusuna 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ının 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şareti 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österen 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 iyileştiren bu API'ler aşağıdakileri içerir:

  • Sürüm API'si
  • Google Güvenli Tarama API'sı
  • Sonlandırma İşleyici API'si
  • Oluşturucu Önem API'si

Bu API'leri nasıl kullanacağınız hakkında daha fazla bilgi edinmek için Web Görünümlerini Yönetme bölümünü inceleyin.

WebView sınıfı artık web'e göz atma güvenliğini geliştirmek için Safe Navigation API'yi içerir. Daha fazla bilgi için Google Safe Navigation API konusuna 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 olacak şekilde sabitlenmiş kısayollar ve widget'lar oluşturabilirsiniz.

Daha fazla bilgi için Kısayolları ve Widget'ları Sabitleme özelliğiyle ilgili kılavuza bakın.

Maksimum ekran en boy oranı

Android 8.0 (API düzeyi 26), uygulamaların maksimum en boy oranının nasıl yapılandırılacağıyla ilgili değişiklikler getiriyor.

Android 8.0 ilk olarak, uygulamanızın maksimum en boy oranını ayarlamak için kullanabileceğiniz maxAspectRatio özelliğini sunar. 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 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 (API düzeyi 26) sürümünden itibaren, platform birden fazla ekran için gelişmiş destek sunmaktadır. 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 etkinliği başlattığında, 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. Uygulamanızın ç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 tek bir etkinlik devam ettirilmiş durumda olabilir. Odaklanılan etkinlik devam ettirilmiş durumda; diğer tüm görünür etkinlikler duraklatılmış ancak durdurulmamış. 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 işleyebilir veya sistemin, etkinliğinizi içeren işlemi kaldırmasına ve bunu 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şıt taraflarının aynı kenar boşluğunu 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ü dahil olmak üzere farklı dilleri ve kültürleri destekleyecek şekilde özelleştirirseniz 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. Android 8.0'da (API düzeyi 26) yeni bir özellik olan işaretçi yakalama, tüm fare etkinliklerini uygulamanızda odaklanmış bir görünüme göndererek denetim sağlar.

Android 8.0'dan itibaren, 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 modda fare işaretçisi gizlenir. Görünüm, artık fare bilgilerine ihtiyacı olmadığında işaretçi yakalamayı serbest bırakabilir. Sistem, görüntü odağını kaybettiğinde (örneğin, kullanıcı başka bir uygulama açtığında) işaretçi yakalama özelliğini de serbest bırakabilir.

Bu özelliği uygulamanızda nasıl kullanacağınız hakkında bilgi edinmek için İşaretçi yakalama bölümüne bakın.

Uygulama kategorileri

Android 8.0 (API düzeyi 26), her uygulamanın uygun olduğu bir kategoriyi beyan etmesine olanak tanır. Bu kategoriler; Veri Kullanımı, Pil Kullanımı veya Depolama Alanı Kullanımı gibi, kullanıcılara sunulurken benzer amaca veya işleve sahip uygulamaları bir araya getirmek için kullanılır. <application> manifest etiketinizde 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 resmiyle 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 dayalı olarak uygulamalardan alınan programlarla doldurulan "Sonrakini İzle" satırı da bulunur. Uygulamalar, video önizlemeleri de sağlayabilir. Video önizlemeleri kullanıcı bir programa odaklandığında otomatik olarak oynatılır. Kanal ve program doldurma API'leri, Android 8.0 ile 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 oynatma işlemlerini desteklemektedir. Arama, animasyonun konumunu zaman içindeki belirli bir noktaya ayarlamanızı sağlar. Uygulamanız geri alınabilecek işlemlere ilişkin animasyonlar içeriyorsa tersten oynamanız yararlı olur. İ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ı kümeler halinde düzenleyerek bunlar arasında klavyeyle gezinmeyi kolaylaştırabilirsiniz. Kullanıcılar Chromebook cihazlarında Meta+Sekme veya Arama+Sekme tuşlarına basarak bir kümeden diğerine gidebilir. Yan paneller, gezinme çubukları, ana içerik alanları ve birçok alt öğe içerebilecek öğeler kümelere iyi örnek olarak verilebilir.

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 belirli bir kümeye giriş ve kümeden çıkış yapma olanağı sağlayabilirsiniz. Bu yapılandırmayı bir kümeye uygularsanız kullanıcılar kümeye girmek veya kümeden çıkmak için Sekme tuşunu veya 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 geçirin.

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, motor bu bilgiyi sağladığı sürece, bir metin okuma motorunun sentezlenmiş kelimeleri tek tek söylemeye başlamasıyla ilgili daha kesin zamanlama bilgileri elde edebilmektedir. Bu işlevi, metin okuma motoru onları okuyan belirli kelimelere dikkat çekmek için 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ığı sesin çalmaya başlayacağı zamanı kaydetmek için rangeStart() komutunu ç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, söylemle 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ın belirlenmesine 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 da 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 bir disk alanı kotası verilir.

Sistemin diskte yer açması gerektiğinde, tahsis edilen kotasını en fazla aşan uygulamalardan önbelleğe alınan dosyaları silerek başlar. Bu nedenle, önbelleğe alınan verilerinizi size tahsis edilen kotanızın altında tutarsanız önbelleğe alınan dosyalarınız, gerektiğinde sistemde temizlenecek son dosyalardan bazılarıdır. Sistem, uygulamanızda hangi önbelleğe alınmış dosyaların silineceğine karar verirken önce en eski dosyaları (değiştirme zamanına göre) dikkate alır.

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çeriklerinin tek bir atom birimi olarak silinmesi gerektiğini belirtmek için kullanılabilir.
  • setCacheBehaviorTombstone(File, boolean), dosyaların bir dizindeki dosyaları silmek yerine, uzunluğu 0 bayt olacak şekilde kısaltılarak boş dosyanın dokunulmayacağını belirtmek için kullanılabilir.

Son olarak, büyük dosyalara 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). Cihazın yeni verilerinizi saklamaya yetecek kadar disk alanına sahip olup olmadığına karar verirken getUsableSpace() kullanmak yerine getAllocatableBytes(UUID) yöntemini çağırın. Çünkü sistem, sizin adınıza temizlemek istediği önbelleğe alınmış tüm verileri dikkate alır.

İçerik sağlayıcı sayfası

İç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ının döndürdüğü her sonuç sayfası tek bir İmleç nesnesiyle temsil edilir. Bu özellikten yararlanmak için hem istemcinin hem de sağlayıcının sayfalama uygulaması gerekir.

İçerik sağlayıcılarda yapılan değişiklikler hakkında ayrıntılı bilgi için ContentProvider ve ContentProviderClient sayfalarına bakın.

İçerik yenileme istekleri

Artık ContentProvider ve ContentResolver sınıflarının her biri de bir refresh() yöntemi içeriyor. Bu sayede istemciler, istedikleri bilgilerin güncel olup olmadığını daha kolay anlayabilir.

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: Ağ üzerinden veri istiyor olabileceğinizden refresh() öğesini 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östermesini açıkça isteyen bir kaydırarak yenileme hareketine yanıt vermektir.

JobScheduler iyileştirmeleri

Android 8.0 (API düzeyi 26) JobScheduler ürününde çeşitli iyileştirmeler sunuyor. Şu anda kısıtlanmış olan arka plan hizmetlerinin veya dolaylı yayın alıcılarının yerine genellikle planlanmış işleri kullanabildiğinizden, bu iyileştirmeler uygulamanızın yeni arka plan yürütme sınırlarına uymasını kolaylaştırır.

JobScheduler ile ilgili güncellemeler:

  • Artık bir iş sırasını planlanmış bir işle ilişkilendirebilirsiniz. İş sırasına bir iş öğesi eklemek için JobScheduler.enqueue() numaralı telefonu arayın. İş çalışırken beklemedeki çalışmaları sıradan çıkarabilir ve işleyebilir. Bu işlev, daha önce bir arka plan hizmetinin başlatılması için çağrılan kullanım alanlarının, özellikle de IntentService uygulamasının uygulandığı hizmetlerin birçoğunu yerine getirir.
  • Android Destek Kitaplığı 26.0.0, IntentService ile aynı işlevi sunan ancak Android 8.0 (API düzeyi 26) veya sonraki sürümleri üzerinde çalışırken hizmetler yerine işleri 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şkilendirmenize olanak tanır. Bu, söz konusu izinlerin Context.startService() için yayılmasına benzer. URI izin izinlerini iş sıralarındaki amaçlar için de kullanabilirsiniz.
  • Planlanmış işler artık birkaç yeni kısıtlamayı desteklemektedir:
    JobInfo.isRequireStorageNotLow()
    Cihazın kullanılabilir depolama alanı azsa iş çalışmaz.
    JobInfo.isRequireBatteryNotLow()
    Pil seviyesi kritik eşikte veya altında olduğunda iş çalışmaz. Bu düzey, cihazın Düşük pil uyarısı sistem iletişim kutusunu gösterdiği seviyedir.
    NETWORK_TYPE_METERED
    İş, çoğu hücresel veri planında olduğu gibi sayaçlı bir ağ bağlantısı gerektirir.

Özel veri deposu

Android 8.0 (API düzeyi 26), tercihleriniz için özel bir veri deposu sağlamanıza olanak tanır. Bu, uygulamanız tercihleri bir bulut veritabanında veya yerel veritabanında depoluyorsa ya da tercihler cihaza özelse yararlı olabilir. Veri deposunu uygulama hakkında daha fazla bilgi için Özel Veri Deposu bölümüne bakın.

Medya geliştirmeleri

Hacim Şekillendirici

Yeni bir VolumeShaper sınıfı var. Şeffaflaşma, kararma ve çapraz şeffaflaşma gibi kısa otomatik ses geçişleri yapmak için bu konsolu kullanın. Daha fazla bilgi edinmek için VolumeShaper ile Genliği Kontrol Etme bölümüne bakın.

Ses odağı geliştirmeleri

Ses uygulamaları, ses odağı isteğinde bulunup ses odağını devre dışı bırakarak bir cihazdaki ses çıkışını paylaşır. Bir uygulama, oynatmayı başlatarak veya durdurarak ya da ses düzeyini azaltarak odaktaki değişiklikleri yapar. 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 kısma ve gecikmeli odak 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ımlanır:

Metrikler her örnek için ayrı ayrı toplanır ve örneğin ömrü boyunca devam eder. Herhangi bir metrik yoksa yöntem null değerini 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 kareye gitmek istediğinizde 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 veri kaynağıyla ilişkili bir senkronizasyon (veya anahtar) çerçevesine taşır.
  • SEEK_NEXT_SYNC, medya konumunu belirtilen zamanda veya hemen sonrasında bulunan bir veri kaynağıyla ilişkili senkronizasyon (veya anahtar) çerçevesine taşır.
  • SEEK_CLOSEST_SYNC, medya konumunu belirtilen zamanda en yakın konumda bulunan veri kaynağıyla ilişkili bir senkronizasyon (veya anahtar) çerçevesine taşır.
  • SEEK_CLOSEST, medya konumunu belirtilen zamanda veya en yakın zamanda bulunan bir veri kaynağıyla ilişkilendirilmiş kareye (senkronizasyon veya anahtar kare olması zorunlu değildir) taşır.

Sürekli olarak sarma yapıldığında uygulamalar SEEK_CLOSEST yerine SEEK_ modlarından herhangi birini kullanmalıdır. Bu mod nispeten daha yavaş çalışır ancak daha hassas olabilir.

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

    MediaRecorder.OutputFormat sayfasını inceleyin

  • MediaMuxer artık istediği sayıda ses ve video akışını işleyebilir. Artık bir ses parçası ve/veya bir video parçasıyla sınırlı olmazsınız. İstediğiniz kadar parçayı mikslemek için addTrack() özelliğini kullanın.
  • MediaMuxer, her kare 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ş zaman damgasıyla bir ByteBuffer aktarır. Zaman damgası, video ve ses parçalarıyla aynı zaman tabanında olmalıdır.

Oluşturulan MP4 dosyası, meta verilerin MIME biçimini belirtmek için ISOBMFF'nin 12.3.3.2 bölümünde tanımlanan TextMetaDataSampleEntry kullanır. Meta veri parçası içeren dosyayı çıkarmak için MediaExtractor kullanılırken meta verilerin MIME biçimi MediaFormat içine çıkarılır.

İyileştirilmiş medya dosyası erişimi

Depolama Erişim Çerçevesi (SAF) uygulamaların, bir veri kaynağındaki dosyalara diğer uygulamalara erişim sağlayabilen özel bir DocumentsProvider göstermesini sağlar. Hatta bir belge sağlayıcısı, ağ depolama alanında bulunan veya Medya Aktarım Protokolü (MTP) gibi bir protokolü kullanan dosyalara bile erişim sağlayabilir.

Ancak, büyük medya dosyalarına uzak bir veri kaynağından 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ı 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öneticileri, kapsamlı klasörler aracılığıyla harici bir SD kartta depolanan medyaya erişmek için bir dizi erişim URI'sinden bilgi aktarmalıdır. Bu erişim kalıbı medya üzerindeki taşıma, kopyalama ve silme gibi toplu işlemleri oldukça yavaş hale getirir.
  • Medya toplama yöneticileri, URI'si nedeniyle 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çmelerine izin vermesini zorlaştırır.

Android 8.0, Depolama Alanı Erişim Çerçevesi'ni iyileştirerek bu zorlukların her birini ele alır.

Özel belge sağlayıcıları

Android 8.0'dan başlayarak Depolama Erişim Çerçevesi, özel doküman 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, yerel aranabilir dosya tanımlayıcısı almak için bir dosya 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ı tam olarak döndürmesine olanak tanır.

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. SAF, bir istemci uygulamasının belge sağlayıcıdan döndürülen dosya tanımlayıcıda dosya işlemleri yaptığı her durumda 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 başvuran bir URI almak için getDocumentUri() yöntemini kullanabilirsiniz. Bununla birlikte, döndürülen URI bir DocumentsProvider tarafından desteklendiği için medya toplama yöneticileri, kapsamlı dizinlerin ağaçlarını incelemek zorunda kalmadan dokümana 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; uygulamaların bu dosyalara erişmesine izin vermez. Medya dosyalarına erişim izni alma hakkında daha fazla bilgi edinmek için referans belgelere bakın.

Belgelerin 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ı belge için 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 kutusunu 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 dokümanların yalnızca bazılarına erişim izni varsa findDocumentPath() değerinin döndürülen değeri, yalnızca uygulamanızın erişebildiği klasörleri ve dokümanları içerir.

Ses çalmayı izleme

AudioManager sistem hizmeti, etkin AudioPlaybackConfiguration nesnelerinin bir listesini tutar. Bu nesnelerin her biri, belirli bir ses çalma oturumuyla ilgili bilgileri içerir. Uygulamanız, şu anda etkin durumda 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ı

Wi-Fi Duyarlı

Android 8.0 (API düzeyi 26), Komşu Bilinirlik Ağı (NAN) spesifikasyonunu temel alan Wi-Fi Aware için destek sunar. Uygulamalar ve yakındaki cihazlar, uygun Wi-Fi Aware donanımına sahip cihazlarda internet erişim noktası olmadan kablosuz ağ üzerinden keşfedip iletişim kurabilir. Wi-Fi Aware teknolojisini en kısa sürede cihazlara taşımak 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ı desteği.
  • Bluetooth Düşük Enerji (BDE) 5.0 standardı için destek.
  • Sony LDAC codec'in Bluetooth yığınına 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 sağlar. 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 bir 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 bir sosyal medya uygulaması bu resmi daha iyi işleyebilir. 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 vb.) kullanılabilir.

Akıllı paylaşımı etkinleştirmek için içeriği paylaşan amaca, en fazla üç dizeden oluşan 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 nasıl ek açıklama 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 inceleyin.

Metin sınıflandırıcı

Uyumlu cihazlarda uygulamalar yeni bir Metin Sınıflandırıcı kullanarak bir dizenin bilinen bir sınıflandırıcı varlık türüyle eşleşip eşleşmediğini kontrol edebilir ve önerilen seçim alternatiflerini alabilir. 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 inceleyin.

Erişilebilirlik

Android 8.0 (API düzeyi 26), kendi erişilebilirlik hizmetlerini oluşturan geliştiriciler için çeşitli yeni erişilebilirlik özelliklerini 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. Gelen bir telefon aramasını uygulamanızda 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 sunar. Kimlik doğrulayıcılar, yönettikleri hesaplardaki hesapların bir uygulamada gizlenip gizlenmeyeceğine veya uygulamanın hesaplarına gösterilip gösterilmeyeceğine karar vermek için kendi politikalarını kullanabilirler. 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, türleri alakasız hesaplar da dahil olmak üzere tüm hesaplarla ilgili güncelleme alması gerekiyordu. Android 8.0, uygulamaların hangi 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

AccountManager, 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 ayarlanmamış 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 iznine ve Android 8.0'dan önceki Android 8.0 sürümlerini hedefleyen ya da imzaları herhangi bir Android sürümünü hedefleyen kimlik doğrulayıcı ile eşleşen uygulamalara uygulanır. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE, daha önce ayarlanmamış 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ını inceleyin.

Test etme

Enstrümantasyon 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ı işlemlerde ç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 sürecin adı.
  • İşlem adlarının virgülle ayrılmış listesi.
  • Araçların, android:targetPackage özelliğinde belirtilen pakette kod yürüten herhangi bir başlatılan süreçte çalıştırılmasına olanak tanıyan joker karakter ("*").

Araç testiniz çalışırken, getProcessName() yöntemini çağırarak hangi sürecin test edildiğini kontrol edebilirsiniz.

Test sırasında sonuçları raporla

addResults() yöntemini çağırarak sonuçları daha sonra değil, araç testiniz yürütüldüğü sırada raporlayabilirsiniz.

Testler için örnek amaçlar

Android 8.0 (API düzeyi 26), uygulamanızın etkinlikleriyle ilgili izole, bağımsız kullanıcı arayüzü testleri oluşturmayı kolaylaştırmak amacıyla onStartActivity() yöntemini kullanıma sundu. Test sınıfınızın çağırdığı belirli bir amacı işlemek için bu yöntemi Instrumentation.ActivityMonitor sınıfının özel bir alt sınıfında geçersiz kılarsınız.

Test sınıfınız intent'i çağırdığında yöntem, niyetin 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 ilettiğiniz amacı nasıl hazırlayıp işlediğine 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ırılan çöp toplama, belleğin daha verimli kullanımı ve kod yerelliği bulunur.

Bu optimizasyonlar, hem işletim sisteminde hem de uygulamalarda daha iyi performansın yanı sıra başlatma sürelerinin daha kısa olmasını sağlar.

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'lerinin kapsamını 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 edinmek 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 kullanıma sunuldu. Bu özelliğin öne çıkan özellikleri şunlardır:

  • Tümüyle yönetilen cihazlardaki iş profilleri, kuruluşların iş verilerini kişisel verilerden ayırırken ikisini de yönetmesini sağlar.
  • API yetkisi, cihaz sahiplerinin ve profil sahiplerinin başka uygulamalara uygulama yönetimi ataması yapması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 kontroller sayesinde kuruluşlar, cihazların daha fazlasını yönetebilir. 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 Kurumsal Android sayfasına göz atın.