Android 11, geliştiriciler için harika yeni özellikler ve API'ler sunuyor. Aşağıdaki bölümler, uygulamalarınızın özelliklerini öğrenmenize ve ilgili API'leri kullanmaya başlamanıza yardımcı olur.
Yeni, değiştirilen ve kaldırılan API'lerin ayrıntılı listesi için API farklılıkları raporunu inceleyin. Yeni API'lerle ilgili ayrıntılar için Android API referansını ziyaret edin. Yeni API'ler görünürlük için vurgulanmıştır. Ayrıca, platform değişikliklerinin uygulamalarınızı etkileyebileceği alanlar hakkında bilgi edinmek için Android R'yi hedefleyen uygulamalarda ve tüm uygulamalarda Android 11 davranış değişikliklerini ve gizlilik değişikliklerini inceleyin.
Yeni deneyimler
Cihaz denetimleri
Android 11, bağlı harici cihazların kontrollerini göstermek için kullanabileceğiniz yeni bir ControlsProviderService API'si içerir. Bu kontroller, Android güç menüsündeki Cihaz kontrolleri bölümünde görünür. Daha fazla bilgi için Harici cihazları kontrol etme başlıklı makaleyi inceleyin.
Medya Denetimleri
Android 11, medya kontrollerinin gösterilme şeklini günceller. Medya kontrolleri, Hızlı Ayarlar'ın yanında görünür. Birden fazla uygulamadan gelen oturumlar, kaydırılabilir bir bantta düzenlenir. Bu bantta, telefonda yerel olarak oynatılan akışlar, harici cihazlarda algılananlar veya yayın oturumları gibi uzaktan akışlar ve önceki, devam ettirilebilir oturumlar son oynatıldıkları sıraya göre yer alır.
Kullanıcılar, uygulamayı başlatmak zorunda kalmadan önceki oturumları banttan yeniden başlatabilir. Oynatma başladığında kullanıcı, medya kontrolleriyle her zamanki gibi etkileşim kurar.
Daha fazla bilgi için medya kontrolleri bölümüne bakın.
Ekranlar
Şelale ekranlar için daha iyi destek
Android 11, cihazın kenarını saran ekranlar olan şelale ekranları desteklemek için çeşitli API'ler sunar. Bu ekranlar, ekran kesikli ekranların bir varyantı olarak kabul edilir. Mevcut DisplayCutout.getSafeInset…() yöntemleri artık kesiklerin yanı sıra şelale alanlarından kaçınmak için güvenli içe yerleştirmeyi döndürür.
Uygulama içeriğinizi şelale alanında oluşturmak için aşağıdakileri yapın:
Şelale içe yerleştirmenin tam boyutlarını almak için
DisplayCutout.getWaterfallInsets()yöntemini çağırın.Pencerenin ekranın tüm kenarlarındaki kesim ve şelale alanlarına genişlemesine izin vermek için pencere düzeni özelliğini
layoutInDisplayCutoutMode,LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYSolarak ayarlayın. Kesim veya şelale alanlarında önemli içerik bulunmadığından emin olmanız gerekir.
Menteşe açısı sensörü ve katlanabilir cihazlar
Android 11, menteşe tabanlı ekran yapılandırmalarına sahip cihazlarda çalışan uygulamaların, TYPE_HINGE_ANGLE ile yeni bir sensör ve menteşe açısını izleyip cihazın iki entegre parçası arasında derece cinsinden ölçüm sağlayan yeni bir SensorEvent sağlayarak menteşe açısını belirlemesini mümkün kılar. Kullanıcı cihazı kullanırken ayrıntılı animasyonlar gerçekleştirmek için bu ham ölçümleri kullanabilirsiniz.
Katlanabilir cihazlar bölümüne bakın.
Görüşmeler
Görüşme iyileştirmeleri
Android 11, görüşmelerin işlenme biçiminde bir dizi iyileştirme sunar. Görüşmeler, iki veya daha fazla kişi arasında gerçekleşen gerçek zamanlı, çift yönlü iletişimlerdir. Bu görüşmeler özel olarak öne çıkarılır ve kullanıcılar bu görüşmelerle etkileşim kurmak için birkaç yeni seçeneğe sahip olur.
Görüşmeler ve uygulamanızın bunları nasıl destekleyebileceği hakkında daha fazla bilgi için Kişiler ve görüşmeler başlıklı makaleyi inceleyin.
Sohbet Balonları
Baloncuklar artık geliştiricilerin sistem genelinde görüşmeleri göstermesine yardımcı olmak için kullanılabilir. Baloncuklar, Android 10'da bir geliştirici seçeneği aracılığıyla etkinleştirilen deneysel bir özellikti. Android 11'de artık buna gerek yoktur.
Bir uygulama Android 11 (API düzeyi 30) veya sonraki sürümleri hedefliyorsa yeni görüşme şartlarını karşılamadığı sürece bildirimleri baloncuk olarak gösterilmez. Özellikle, bildirimin bir kısayolla ilişkilendirilmesi gerekir.
Android 11'den önce, bir bildirimin baloncuk olarak gösterilmesini istiyorsanız bildirimin her zaman belge kullanıcı arayüzü modunda başlatılacak şekilde ayarlandığını açıkça belirtmeniz gerekiyordu. Android 11'den itibaren bu ayarı açıkça yapmanız gerekmez. Bildirim baloncukluysa platform, bildirimi otomatik olarak her zaman doküman kullanıcı arayüzü modunda başlatılacak şekilde ayarlar.
Baloncuk performansında çeşitli iyileştirmeler yapıldı ve kullanıcılar her uygulamadan baloncukları etkinleştirme ve devre dışı bırakma konusunda daha fazla esnekliğe sahip oldu. Deneysel destek uygulayan geliştiriciler için Android 11'deki API'lerde birkaç değişiklik yapıldı:
- Parametresiz
BubbleMetadata.Builder()oluşturucunun desteği sonlandırıldı. Bunun yerine, iki yeni kurucudan birini (BubbleMetadata.Builder(PendingIntent, Icon)veyaBubbleMetadata.Builder(String)) kullanın. BubbleMetadata.Builder(String)yöntemini çağırarak kısayol kimliğindenBubbleMetadataoluşturun. İletilen dize,Notification.Builderöğesine sağlanan kısayol kimliğiyle eşleşmelidir.Icon.createWithContentUri()ile veya yeni yöntem olancreateWithAdaptiveBitmapContentUri()ile baloncuk simgeleri oluşturun.
5G görsel göstergeleri
Kullanıcıların cihazlarında 5G göstergelerini görüntüleme hakkında bilgi için Kullanıcılarınıza 5G'de olduklarını bildirme başlıklı makaleyi inceleyin.
Gizlilik
Android 11, kullanıcı gizliliğini iyileştirmek için çok sayıda değişiklik ve kısıtlama getirir. Daha fazla bilgi için Gizlilik sayfasını inceleyin.
Güvenlik
Biyometrik kimlik doğrulama güncellemeleri
Android 11, uygulamanızın verilerinin güvenlik düzeyini kontrol etmenize yardımcı olmak için biyometrik kimlik doğrulamada çeşitli iyileştirmeler sunar. Bu değişiklikler Jetpack Biometric kitaplığında da görünür.
Kimlik doğrulama türleri
Android 11, BiometricManager.Authenticators arayüzünü sunar. Bu arayüzü, uygulamanızın desteklediği kimlik doğrulama türlerini bildirmek için kullanabilirsiniz.
Hangi kimlik doğrulama türünün kullanıldığını belirleme
Kullanıcı kimliğini doğruladıktan sonra, getAuthenticationType() yöntemini çağırarak kullanıcının kimlik doğrulama için cihaz kimlik bilgisi mi yoksa biyometrik kimlik bilgisi mi kullandığını kontrol edebilirsiniz.
Kullanım başına kimlik doğrulama anahtarları için ek destek
Android 11, kullanım başına kimlik doğrulama anahtarlarıyla kimlik doğrulama için daha fazla destek sağlar.
Kullanımdan kaldırılan yöntemler
Android 11'de aşağıdaki yöntemlerin desteği sonlandırılmıştır:
setDeviceCredentialAllowed()yöntemi.setUserAuthenticationValidityDurationSeconds()yöntemi.canAuthenticate()yönteminin bağımsız değişken almayan aşırı yüklenmiş sürümü.
Büyük veri kümelerinin güvenli paylaşımı
Makine öğrenimi veya medya oynatma gibi bazı durumlarda uygulamanız, başka bir uygulamayla aynı büyük veri kümesini kullanmak isteyebilir. Android'in önceki sürümlerinde, uygulamanızın ve diğer uygulamanın aynı veri kümesinin ayrı bir kopyasını indirmesi gerekiyordu.
Android 11, hem ağda hem de diskte veri fazlalığını azaltmaya yardımcı olmak için bu büyük veri kümelerinin paylaşılan veri blob'ları kullanılarak cihazda önbelleğe alınmasına olanak tanır. Veri kümelerini paylaşma hakkında daha fazla bilgi edinmek için büyük veri kümelerini paylaşmayla ilgili ayrıntılı kılavuzu inceleyin.
Kullanıcı kimlik bilgileri olmadan OTA yeniden başlatma işleminden sonra dosya tabanlı şifreleme gerçekleştirme
Cihaz bir OTA güncellemesini tamamlayıp yeniden başlatıldıktan sonra, kimlik bilgileriyle korunan depolama alanına yerleştirilen Kimlik Bilgileriyle Şifrelenmiş anahtarlar (CE), Dosya Tabanlı Şifreleme (FBE) işlemleri için hemen kullanılabilir. Bu sayede, OTA güncellemesinden sonra uygulamanız, kullanıcı PIN'ini, desenini veya şifresini girmeden önce CE anahtarlarını gerektiren işlemlere devam edebilir.
Performans ve kalite
Kablosuz hata ayıklama
Android 11, uygulamanızı Android Debug Bridge (adb) aracılığıyla iş istasyonunuzdan kablosuz olarak dağıtmayı ve hata ayıklamayı destekler. Örneğin, hata ayıklanabilir uygulamanızı cihazınızı USB üzerinden fiziksel olarak bağlamadan ve sürücü yükleme gibi yaygın USB bağlantısı sorunlarıyla uğraşmadan birden fazla uzak cihaza dağıtabilirsiniz. Daha fazla bilgi için Uygulamaları donanım cihazında çalıştırma başlıklı makaleyi inceleyin.
ADB Artımlı APK yükleme
Bir uygulamada yalnızca küçük bir değişiklik yapılmış olsa bile büyük (2 GB+) APK'ları bir cihaza yüklemek uzun sürebilir. ADB (Android Debug Bridge) Artımlı APK yükleme, APK'nın uygulamayı başlatmaya yetecek kadarını yükleyip kalan verileri arka planda aktararak bu süreci hızlandırır. Cihaz tarafından destekleniyorsa ve en yeni SDK Platform Araçları'nı yüklediyseniz adb install bu özelliği otomatik olarak kullanır. Desteklenmiyorsa varsayılan yükleme yöntemi sessizce kullanılır.
Özelliği kullanmak için aşağıdaki adb komutunu kullanın. Cihaz, artımlı yüklemeyi desteklemiyorsa komut başarısız olur ve ayrıntılı bir açıklama yazdırır.
adb install --incremental
ADB artımlı APK yüklemesi çalıştırmadan önce APK'nızı imzalamanız ve bir APK İmza Şeması v4 dosyası oluşturmanız gerekir. Bu özelliğin çalışması için v4 imza dosyasının APK'nın yanına yerleştirilmesi gerekir.
Yerel bellek ayırıcıyı kullanarak hata tespiti
GWP-ASan, boşaltıldıktan sonra kullanım ve yığın arabellek taşması hatalarını bulmaya yardımcı olan yerel bir bellek ayırıcı özelliğidir. Bu özelliği genel olarak veya uygulamanızın belirli alt işlemleri için etkinleştirebilirsiniz. Daha fazla bilgi edinmek için GWP-Asan kılavuzuna bakın.
Neural Networks API 1.3
Android 11, Neural Networks API'yi (NNAPI) genişletir ve iyileştirir.
Yeni işlemler
NNAPI 1.3, TensorFlow Lite'ın yeni niceleme şemasını desteklemek için yeni bir işlenen türü olan TENSOR_QUANT8_ASYMM_SIGNED'yi kullanıma sunar.
Ayrıca NNAPI 1.3, aşağıdaki yeni işlemleri sunar:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
Yeni ML kontrolleri
NNAPI 1.3, makine öğreniminin sorunsuz çalışmasına yardımcı olacak yeni kontroller sunar:
QoS API: Yeni Hizmet Kalitesi API'si, aşağıdaki yeni işlevlerle NNAPI'de önceliklendirme ve görev son tarihleri için destek içerir:
Bellek alanı girişi/çıkışı: NNAPI 1.3, yürütme için giriş ve çıkış olarak bellek alanları desteği içerir. Bu sayede, farklı sistem bileşenleri arasında aynı verilerin gereksiz kopyaları kaldırılır ve Android nöral ağlarının çalışma zamanı performansı artırılır. Bu özellik,
ANeuralNetworksMemoryDescveANeuralNetworkMemorynesneleriyle kullanılacak bir dizi yeni NDK API'si ekler. Bu API'ler aşağıdaki işlevleri içerir:ANeuralNetworksMemoryDesc_create()ANeuralNetworksMemoryDesc_free()ANeuralNetworksMemoryDesc_addInputRole()ANeuralNetworksMemoryDesc_addOutputRole()ANeuralNetworksMemoryDesc_setDimensions()ANeuralNetworksMemoryDesc_finish()ANeuralNetworksMemory_createFromDesc()ANeuralNetworksMemory_copy()
Daha fazla bilgi için nöral ağ bellek alanı örneğine bakın.
Bağımlılık API'si ve senkronizasyon engeli desteği: NNAPI 1.3, bağımlılıklarla eşzamansız hesaplama desteği içerir. Bu sayede, küçük zincirleme modeller çağrılırken ek yük önemli ölçüde azaltılır. Bu özellik aşağıdaki yeni işlevleri ekler:
Kontrol akışı: NNAPI 1.3, yeni
ANEURALNETWORKS_MODELişlenen türünü kullanarak diğer modelleri bağımsız değişken olarak kabul eden yeni grafik işlemleriANEURALNETWORKS_IFveANEURALNETWORKS_WHILEile genel kontrol akışı desteği içerir. Ayrıca bu özellik, aşağıdaki yeni işlevleri ekler:
NDK Thermal API
Cihazlar çok ısındığında CPU ve/veya GPU'yu kısıtlayabilir. Bu durum, uygulamaları beklenmedik şekillerde etkileyebilir. Karmaşık grafikler, yoğun hesaplama veya sürekli ağ etkinliği içeren uygulamalar ya da oyunlarda sorunlarla karşılaşma olasılığı daha yüksektir.
Cihazdaki sıcaklık değişikliklerini izlemek için Android 11'de NDK Thermal API'yi kullanın, ardından daha düşük güç kullanımı ve daha düşük cihaz sıcaklığı sağlamak için harekete geçin. Bu API, Java Thermal API'ye benzer. Termal durum değişiklikleriyle ilgili bildirim almak veya mevcut durumu doğrudan sorgulamak için bu API'yi kullanabilirsiniz.
Metin ve giriş
İyileştirilmiş IME geçişleri
Android 11, dokunmatik klavyeler gibi giriş yöntemi düzenleyiciler (IME'ler) için geçişleri iyileştiren yeni API'ler sunar. Bu API'ler, uygulamanızın içeriğini IME'nin görünümü ve kaybolmasıyla, ayrıca durum ve gezinme çubukları gibi diğer öğelerle senkronize olacak şekilde ayarlamanızı kolaylaştırır.
Herhangi bir EditText odaklanmış durumdayken IME göstermek için view.getInsetsController().show(Type.ime()) yöntemini çağırın.
(Bu yöntemi, odaklanılan EditText ile aynı hiyerarşideki herhangi bir görünümde çağırabilirsiniz. Özellikle EditText üzerinde çağırmanız gerekmez.) IME'yi gizlemek için view.getInsetsController().hide(Type.ime()) yöntemini çağırın.
view.getRootWindowInsets().isVisible(Type.ime()) yöntemini çağırarak bir IME'nin şu anda görünür olup olmadığını kontrol edebilirsiniz.
Uygulamanızın görünümlerini IME'nin görünmesi ve kaybolmasıyla senkronize etmek için View.setWindowInsetsAnimationCallback() yöntemine WindowInsetsAnimation.Callback sağlayarak bir görünümde dinleyici ayarlayın.
(Bu dinleyiciyi herhangi bir görünümde ayarlayabilirsiniz, EditText olması gerekmez.)
IME, dinleyicinizin onPrepare() yöntemini, ardından geçişin başında onStart() yöntemini çağırır. Ardından, geçişteki her ilerlemede onProgress() yöntemini çağırır. Geçiş tamamlandığında IME, onEnd() yöntemini çağırır.
Geçişin herhangi bir noktasında, WindowInsetsAnimation.getFraction() yöntemini çağırarak geçişin ne kadar ilerlediğini öğrenebilirsiniz.
Bu API'lerin nasıl kullanılacağına dair bir örnek için yeni WindowInsetsAnimation kod örneğine bakın.
IME animasyonunu kontrol etme
IME animasyonunu veya gezinme çubuğu gibi başka bir sistem çubuğunun animasyonunu da kontrol edebilirsiniz. Bunun için önce setOnApplyWindowInsetsListener() yöntemini çağırarak pencere iç boşluğu değişiklikleri için yeni bir dinleyici ayarlayın:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
IME'yi veya diğer sistem çubuğunu taşımak için denetleyicinin controlWindowInsetsAnimation() yöntemini çağırın:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
ICU kitaplıklarında yapılan güncellemeler
Android 11, android.icu paketini ICU kitaplığının 66 sürümünü kullanacak şekilde günceller. Android 10'da bu sürüm 63'tür. Yeni kitaplık sürümü, güncellenmiş CLDR yerel verilerini ve Android'deki uluslararasılaştırma desteğinde yapılan çeşitli iyileştirmeleri içerir.
Yeni kitaplık sürümlerindeki önemli değişiklikler şunlardır:
- Birçok biçimlendirme API'si artık
FormattedValue'yi genişleten yeni bir döndürme nesnesi türünü destekliyor. LocaleMatcherAPI'si bir oluşturucu sınıfı,java.util.Localetürü desteği ve eşleşmeyle ilgili ek veriler içeren bir sonuç sınıfıyla geliştirildi.- Unicode 13 artık destekleniyor.
Medya
MediaCodec arabellekleri tahsis etme
Android 11, giriş ve çıkış arabelleklerini ayırırken uygulamalara daha fazla kontrol sağlayan yeni MediaCodec API'leri içerir. Bu sayede uygulamanız, belleği daha verimli bir şekilde yönetebilir.
Yeni sınıflar:
Yeni yöntemler:
MediaCodec.getQueueRequest()MediaCodec.getOutputFrame()MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
Ayrıca MediaCodec.Callback() içindeki iki yöntemin davranışı değişti:
onInputBufferAvailable()- Uygulamalar, Block Model API'yi kullanacak şekilde yapılandırılmışsa dizinle birlikte
MediaCodec.getInputBuffer()veMediaCodec.queueInputBuffer()yöntemlerini çağırmak yerine dizinle birlikteMediaCodec.getQueueRequestyöntemini kullanmalı ve yuvaya bir LinearBlock/HardwareBuffer eklemelidir. onOutputBufferAvailable()- Uygulamalar, dizinle
MediaCodec.getOutputBuffer()yöntemini çağırmak yerine, daha fazla bilgi ve LinearBlock/HardwareBuffer arabellekleri içerenOutputFramenesnesini almak için dizinleMediaCodec.getOutputFrame()yöntemini kullanabilir.
MediaCodec'te düşük gecikmeli kod çözme
Android 11, oyunlar ve diğer gerçek zamanlı uygulamalar için düşük gecikmeli kod çözmeyi desteklemek üzere MediaCodec özelliğini geliştirir. MediaCodecInfo.CodecCapabilities.isFeatureSupported() yöntemine FEATURE_LowLatency parametresini ileterek bir codec'in düşük gecikmeli kod çözmeyi destekleyip desteklemediğini kontrol edebilirsiniz.
Düşük gecikmeli kod çözmeyi etkinleştirmek veya devre dışı bırakmak için aşağıdakilerden birini yapın:
MediaCodec.configure()kullanarak yeni anahtarıKEY_LOW_LATENCY0 veya 1 olarak ayarlayın.MediaCodec.setParameters()kullanarak yeni parametre anahtarınıPARAMETER_KEY_LOW_LATENCY0 veya 1 olarak ayarlayın.
Yeni AAudio işlevi AAudioStream_release()
AAudioStream_close() işlevi, ses akışını aynı anda serbest bırakır ve kapatır. Bu işlem tehlikeli olabilir. Başka bir işlem, kapatıldıktan sonra akışa erişmeye çalışırsa işlem kilitlenir.
Yeni işlev
AAudioStream_release()
akışı serbest bırakır ancak kapatmaz. Bu işlem, kaynakları serbest bırakır ve akışı bilinen bir durumda bırakır. Nesne, siz AAudioStream_close() yöntemini çağırana kadar kalır.
MediaParser API
MediaParser, medya ayıklama için yeni bir alt düzey API'dir. MediaExtractor'dan daha esnektir ve medya ayıklama işlevi üzerinde ek kontrol sağlar.
USB cihazdan ses kaydetme
RECORD_AUDIO izni olmayan bir uygulama, ses yakalama özelliğine sahip bir USB ses cihazına (ör. USB kulaklık) doğrudan erişim istemek için UsbManager kullandığında, kullanıcıdan cihazı kullanma iznini onaylamasını isteyen yeni bir uyarı mesajı gösterilir. Sistem, "her zaman kullan" seçeneğini yok sayar. Bu nedenle, bir uygulama her erişim istediğinde kullanıcının uyarıyı onaylaması ve izin vermesi gerekir.
Bu davranışı önlemek için uygulamanızın RECORD_AUDIO iznini istemesi gerekir.
Eşzamanlı mikrofon erişimi
Android 11, AudioRecord, MediaRecorder ve AAudioStream API'lerine yeni yöntemler ekler. Bu yöntemler, seçilen kullanım alanından bağımsız olarak eşzamanlı yakalama özelliğini etkinleştirir ve devre dışı bırakır. Ses Girişini Paylaşma bölümüne bakın.
Çıkış değiştirici
Android 11, cast ve mediarouter API'lerini kullanan uygulamalar için yeni bir davranış uygular.
Yayınlama seçeneklerine bir uygulamadan erişmenin yanı sıra geçiş seçenekleri sistem medya oynatıcısında da görünür. Bu sayede kullanıcılar, izleme ve dinleme bağlamlarını değiştirirken (ör. mutfakta video izlemek yerine telefonda izlemek veya evde ya da arabada ses dinlemek) cihazlar arasında sorunsuz bir yolculuk yapabilir. Çıkış değiştiriciye bakın.
Bağlantı
Kablosuz Passpoint geliştirmeleri
Android 11'e eklenen Passpoint özellikleri hakkında bilgi edinmek için Passpoint başlıklı makaleyi inceleyin.
Wi-Fi Suggestion API genişletildi
Android 11, uygulamanızın ağ yönetimi özelliklerini artırmak için Wi-Fi Suggestion API'yi genişletir. Bu özellikler arasında şunlar yer alır:
- Bağlantı yönetimi uygulamaları, bağlantı kesme isteklerine izin vererek kendi ağlarını yönetebilir.
- Passpoint ağları, Suggestion API'ye entegre edilmiştir ve kullanıcıya önerilebilir.
- Analytics API'leri, ağlarınızın kalitesi hakkında bilgi edinmenizi sağlar.
CallScreeningService güncellemeleri
Android 11'den itibaren, CallScreeningService gelen aramalar için STIR/SHAKEN doğrulama durumu (verstat) hakkında bilgi isteyebilir. Bu bilgi, gelen aramalar için arama ayrıntıları kapsamında sağlanır.
Bir CallScreeningService, READ_CONTACTS iznine sahipse kullanıcının kişilerindeki bir numaradan gelen veya bu numaraya yapılan giden aramalar olduğunda uygulama bilgilendirilir.
Daha fazla bilgi için Arayan kimliği sahtekarlığını önleme başlıklı makaleyi inceleyin.
Open Mobile API güncellemeleri
Android 11 ve sonraki sürümlerde OMAPI desteği hakkında bilgi edinmek için Open Mobile API okuyucu desteği başlıklı makaleyi inceleyin.
Yüksek performanslı VPN'ler
API düzeyi 30 ve üstünü hedefleyen veya API düzeyi 29 ve üstüyle kullanıma sunulan cihazlarda çalışan uygulamalar, hem kullanıcı tarafından yapılandırılan hem de uygulama tabanlı VPN'ler için IKEv2/IPsec'i VPN'lere uygulayabilir.
VPN'ler işletim sisteminde yerel olarak çalışır. Bu sayede, bir uygulamada IKEv2/IPsec VPN bağlantıları oluşturmak için gereken kod basitleştirilir.
İşlem başına ağ erişim denetimi
Ağ erişimini işlem bazında etkinleştirme hakkında bilgi edinmek için Ağ kullanımını yönetme başlıklı makaleyi inceleyin.
Aynı FQDN'ye sahip birden fazla yüklü Passpoint yapılandırmasına izin ver
Android 11'den itibaren, bir PasspointConfiguration nesnesi için benzersiz tanımlayıcı almak üzere PasspointConfiguration.getUniqueId() kullanabilirsiniz. Bu sayede, uygulamanızın kullanıcıları aynı tam nitelikli alan adına (FQDN) sahip birden fazla profil yükleyebilir.
Bu işlev, bir operatör ağında birden fazla mobil ülke kodu (MCC) ve mobil ağ kodu (MNC) kombinasyonu dağıttığında ancak yalnızca tek bir FQDN'ye sahip olduğunda kullanışlıdır. Android 11 ve sonraki sürümlerde, kullanıcı MCC veya MNC içeren bir SIM taktığında ağla ana sağlayıcı olarak eşleşecek aynı FQDN'ye sahip birden fazla profil yüklemek mümkündür.
GNSS anten desteği
Android 11, uygulamanızın Küresel Uydu Navigasyon Sistemi'nin (GNSS) sağlayabileceği santimetre hassasiyetinde konumlandırmadan daha fazla yararlanmasını sağlayan GnssAntennaInfo sınıfını sunar.
Anten kalibrasyon bilgileri kılavuzundan daha fazla bilgi edinebilirsiniz.
Grafik
NDK resim kod çözücüsü
NDK ImageDecoder API, Android C/C++ uygulamalarının görüntülerin kodunu doğrudan çözmesi için standart bir API sağlar. Uygulama geliştiricilerin artık çerçeve API'lerini (JNI aracılığıyla) kullanması veya üçüncü taraf resim kod çözme kitaplıklarını paketlemesi gerekmez. Daha fazla bilgi için Resim kod çözücü geliştirici kılavuzuna bakın.
Kare hızı API'si
Android 11, uygulamaların amaçlanan kare hızını sisteme bildirmesini sağlayan bir API sunar. Bu API, birden fazla yenileme hızını destekleyen cihazlarda titremeyi azaltır. Bu API'nin nasıl kullanılacağı hakkında bilgi edinmek için Kare hızı kılavuzuna bakın.
Düşük gecikme desteği isteme ve kontrol etme
Bazı harici ekranlar ve TV'ler gibi belirli ekranlar, grafik son işleme gerçekleştirebilir. Bu işlem sonrası, grafikleri iyileştirir ancak gecikmeyi artırabilir. HDMI 2.1'i destekleyen yeni ekranlarda, bu son işlemeyi kapatarak gecikmeyi en aza indiren otomatik düşük gecikme modu (ALLM, oyun modu olarak da bilinir) bulunur. ALLM hakkında daha fazla bilgi için HDMI 2.1 spesifikasyonuna bakın.
Bir pencere, varsa otomatik düşük gecikme modunun kullanılmasını isteyebilir. ALLM, özellikle oyunlar ve video konferans gibi düşük gecikmenin mümkün olan en iyi grafiklere sahip olmaktan daha önemli olduğu uygulamalar için kullanışlıdır.
Minimum işlem sonrası özelliğini açmak veya kapatmak için Window.setPreferMinimalPostProcessing() yöntemini çağırın ya da pencerenin preferMinimalPostProcessing özelliğini true olarak ayarlayın. Tüm ekranlar minimum işlem sonrası desteği sunmaz. Belirli bir ekranın bu desteği sunup sunmadığını öğrenmek için yeni Display.isMinimalPostProcessingSupported() yöntemini çağırın.
Performanslı grafik hata ayıklama katmanı ekleme
Uygulamalar artık harici grafik katmanlarını (GLES, Vulkan) yerel uygulama koduna yükleyerek hata ayıklanabilir bir uygulamayla aynı işlevleri sunabilir ancak performans ek yükü oluşturmaz. Bu özellik, özellikle uygulamanızın profilini GAPID gibi araçlarla oluştururken önemlidir. Uygulamanızın profilini çıkarmak için uygulamayı hata ayıklanabilir hale getirmek yerine uygulama manifest dosyanıza aşağıdaki meta veri öğesini ekleyin:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Resimler ve kamera
Aktif çekim sırasında bildirim seslerini ve titreşimleri kapatma
Android 11'den itibaren, kamerayı aktif olarak kullanırken uygulamanız setCameraAudioRestriction() kullanarak yalnızca titreşimleri, hem sesleri hem de titreşimleri kapatabilir veya hiçbirini kapatmayabilir.
Android emülatöründe genişletilmiş kamera desteği
Android 11'den itibaren emülatörde kameralar için genişletilmiş destek hakkında bilgi edinmek için Kamera desteği başlıklı makaleyi inceleyin.
Birden fazla kameranın aynı anda kullanılmasına yönelik destek
Android 11, aynı anda birden fazla kamera (ön ve arka kamera dahil) kullanma desteğini sorgulamak için API'ler ekler.
Uygulamanızın çalıştığı cihazda destek olup olmadığını kontrol etmek için aşağıdaki yöntemleri kullanın:
getConcurrentCameraIds(), aynı uygulama işlemi tarafından yapılandırıldığında garantili akış kombinasyonlarıyla eşzamanlı olarak akış yapabilen kamera kimliklerinin kombinasyonlarını içeren birSetdöndürür.isConcurrentSessionConfigurationSupported(), kamera cihazlarının ilgili oturum yapılandırmalarını aynı anda destekleyip destekleyemeyeceğini sorgular.
Birden fazla kare içeren HEIF resimleri için daha iyi destek
Android 11'den itibaren, ImageDecoder.decodeDrawable() yöntemini çağırıp kare dizisi (ör. animasyon veya seri fotoğraf) içeren bir HEIF resmi iletirseniz yöntem, resim dizisinin tamamını içeren bir AnimatedImageDrawable döndürür. Android'in önceki sürümlerinde bu yöntem, yalnızca tek bir kare içeren BitmapDrawable döndürüyordu.
HEIF grafiği sıralı olmayan birden fazla kare içeriyorsa MediaMetadataRetriever.getImageAtIndex() yöntemini çağırarak tek bir kareyi alabilirsiniz.
Erişilebilirlik
Erişilebilirlik hizmeti geliştiricileri için güncellemeler
Özel bir erişilebilirlik hizmeti oluşturursanız Android 11'de aşağıdaki özellikleri kullanabilirsiniz:
- Erişilebilirlik hizmetinin kullanıcılara yönelik açıklamasında artık düz metnin yanı sıra HTML ve resimler de kullanılabilir. Bu esneklik, hizmetinizin ne işe yaradığını ve son kullanıcılara nasıl yardımcı olabileceğini açıklamayı kolaylaştırır.
- Kullanıcı arayüzü öğesinin durumunu
contentDescriptionyerine daha anlamlı bir şekilde açıklamak içingetStateDescription()yöntemini çağırın. - Dokunma etkinliklerinin sistemin dokunma keşfini atlamasını istemek için
setTouchExplorationPassthroughRegion()yöntemini çağırın. Benzer şekilde, hareketlerin sistemin hareket algılayıcısını atlamasını istemek içinsetGestureDetectionPassthroughRegion()yöntemini çağırın. - "Enter" ve "sonraki" gibi IME işlemlerinin yanı sıra
FLAG_SECUREişaretini etkinleştirmeyen pencerelerin ekran görüntülerini isteyebilirsiniz.
Ek özellikler
Uygulama işleminden çıkış nedenleri
Android 11, son işlem sonlandırmalarının nedenlerini bildiren ActivityManager.getHistoricalProcessExitReasons() yöntemini sunar. Uygulamalar, kilitlenme teşhis bilgilerini (ör. bir işlemin sonlandırılmasının ANR'lerden, bellek sorunlarından veya başka nedenlerden kaynaklanıp kaynaklanmadığı) toplamak için bu yöntemi kullanabilir.
Ayrıca, özel durum bilgilerini daha sonra analiz etmek üzere depolamak için yeni setProcessStateSummary() yöntemini kullanabilirsiniz.
getHistoricalProcessExitReasons() yöntemi, bir uygulama işleminin sonlandırılmasıyla ilgili bilgileri içeren ApplicationExitInfo sınıfının örneklerini döndürür. Bu sınıfın bir örneğinde getReason() yöntemini çağırarak uygulamanızın işleminin neden sonlandırıldığını belirleyebilirsiniz. Örneğin, REASON_CRASH dönüş değeri, uygulamanızda işlenmeyen bir istisna oluştuğunu gösterir. Uygulamanızın çıkış etkinlikleri için benzersizliği sağlaması gerekiyorsa getTimestamp() yöntemindeki zaman damgasına dayalı bir karma değeri gibi uygulamaya özel bir tanımlayıcı kullanabilir.
Ek kaynaklar
Daha fazla bilgi için Medium'da uygulamaları daha gizli ve kararlı hale getiren yeni Android 11 araçları hakkındaki makaleyi okuyun.
Kaynak yükleyiciler
Android 11, uygulamaların kaynakları arama ve yükleme şeklini dinamik olarak genişletmesine olanak tanıyan yeni bir API sunar. Yeni işlevleri sunmaktan öncelikli olarak yeni API sınıfları ResourcesLoader ve ResourcesProvider sorumludur. Birlikte, ek kaynak ve öğe sağlama veya mevcut kaynak ve öğelerin değerlerini değiştirme olanağı sunarlar.
ResourcesLoader nesneleri, bir uygulamanın Resources örneğine ResourcesProvider nesneleri sağlayan kapsayıcılardır. ResourcesProvider nesneleri de APK'lardan ve kaynak tablolarından kaynak verilerini yüklemek için yöntemler sağlar.
Bu API'nin birincil kullanım alanlarından biri, özel öğe yüklemedir. Dosya tabanlı kaynakların ve öğelerin çözümlenmesini yönlendiren bir ResourcesProvider oluşturmak için loadFromDirectory() kullanabilirsiniz. Bu sayede, uygulama APK'sı yerine belirli bir dizin aranır. APK'da paketlenen öğelerde olduğu gibi, bu öğelere de AssetManager API sınıfındaki open() yöntem ailesi aracılığıyla erişebilirsiniz.
APK imza şeması v4
Android 11, APK İmza Şeması v4 için destek ekler. Bu şema, ayrı bir dosyada (apk-name.apk.idsig) yeni bir imza türü oluşturur ancak diğer yönlerden v2 ve v3'e benzer. APK'da değişiklik yapılmaz. Bu şema, APK yükleme işlemini hızlandıran ADB artımlı APK yükleme özelliğini destekler.
Dinamik intent filtreleri
Bir uygulamanın intent'leri alabilmesi için derleme süresinde, uygulama manifestinde bir intent filtresi tanımlayarak hangi veri türlerini alabileceğini bildirmesi gerekir. Android 10 ve önceki sürümlerde uygulamalar, çalışma zamanında intent filtrelerini değiştiremez. Bu durum, sanallaştırma uygulamaları (ör. sanal makineler ve uzak masaüstleri) için sorun teşkil eder. Çünkü bu uygulamalar, kullanıcının içlerine tam olarak hangi yazılımı yükleyeceğini bilemez.
Android 11, bir uygulamanın intent filtresinde dinamik bir MIME türü grubu beyan etmesine ve çalışma zamanında bunu programatik olarak değiştirmesine olanak tanıyan yeni bir manifest öğesi olan MIME gruplarını kullanıma sunar. MIME grubu kullanmak için uygulama manifestinize yeni android:mimeGroup özelliğini içeren bir veri öğesi ekleyin:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
android:mimeGroup özelliğinin değeri, çalışma zamanında MIME grubunu tanımlayan rastgele bir dize kimliğidir. Bir MIME grubunun kimliğini PackageManager API sınıfındaki aşağıdaki yeni yöntemlere ileterek grubun içeriğine erişebilir ve içeriği güncelleyebilirsiniz:
Bir MIME grubuna programatik olarak MIME türü eklediğinizde bu tür, manifest dosyasında açıkça belirtilen statik MIME türüyle tamamen aynı şekilde çalışır.
Otomatik doldurma iyileştirmeleri
Android 11, otomatik doldurma hizmetlerinde iyileştirmeler sunar.
AssistStructure.ViewNode'daki ipucu tanımlayıcıları
Otomatik doldurma hizmetlerinin, görünümün özelliklerine göre görünüm için imza karması hesaplaması genellikle yararlıdır. Görünüm ipucu, imza karması hesaplanırken dahil edilmesi gereken özellikle iyi bir özelliktir ancak ipucu dizesi telefonun yerel ayarına göre değişebilir. Android 11, bu sorunu çözmek için AssistStructure.ViewNode sınıfını yeni bir getHintIdEntry() yöntemiyle genişletir. Bu yöntem, görünümün ipucu metni için kaynak tanımlayıcıyı döndürür. Bu yöntem, imza karmalarını hesaplamak için kullanabileceğiniz, yerel ayardan bağımsız bir değer sağlar.
Veri kümelerinin gösterildiği etkinlikler
Android 11, otomatik doldurma hizmetlerinin önerilerini iyileştirmesine yardımcı olmak için otomatik doldurma hizmetinin veri kümeleri sunduğu ancak kullanıcının bunlardan hiçbirini seçmediği durumları belirlemenin bir yolunu sunar. Android 11'de,
FillEventHistory
yeni bir
TYPE_DATASETS_SHOWN
etkinlik türü bildirir. Otomatik doldurma hizmeti, kullanıcıya bir veya daha fazla veri kümesi sunduğunda FillEventHistory bu tür bir etkinlik kaydeder. Otomatik doldurma hizmetleri, kullanıcının sunulan otomatik doldurma seçeneklerinden herhangi birini belirleyip belirlemediğini saptamak için bu etkinlikleri mevcut TYPE_DATASET_SELECTED etkinliğiyle birlikte kullanabilir.
IME entegrasyonu
Klavyeler ve diğer IME'ler artık otomatik doldurma önerilerini açılır menü yerine satır içinde, öneriler şeridinde veya benzer bir arayüzde gösterebilir. Şifreler ve kredi kartı numaraları gibi hassas bilgileri korumak için öneriler kullanıcıya gösterilir ancak kullanıcı birini seçene kadar IME tarafından bilinmez. IME'lerin ve şifre yöneticilerinin bu özelliği nasıl destekleyebileceği hakkında bilgi edinmek için Otomatik doldurmayı klavyelerle entegre etme başlıklı makaleyi inceleyin.
İçerik yakalama hizmetiyle veri paylaşımı
Android 11'den itibaren uygulamanız, cihazın içerik yakalama hizmetiyle veri paylaşabilir. Bu özellik, cihazın bağlama dayalı zeka sunmasını kolaylaştırır. Örneğin, kullanıcının ortamında çalan bir şarkının adını gösterebilir.
Uygulamanızdaki verileri içerik yakalama hizmetinin kullanımına sunmak için bir ContentCaptureManager örneğinde shareData() yöntemini çağırın. Sistem, veri paylaşımı isteğini kabul ederse uygulamanız, içerik yakalama hizmetiyle paylaşmak için salt yazma dosya tanımlayıcısı alır.