Android 4.3 API'leri

API Düzeyi: 18

Android 4.3 (JELLY_BEAN_MR2) kullanıcılar ve uygulama için yeni özellikler sunan Jelly Bean sürümünün güncellemesidir. birlikte çalışır. Bu belgede, Çevik’in en önemli yeni API'ler var.

Uygulama geliştirici olarak Android 4.3 sistem görüntüsünü indirmelisiniz. ve SDK platformu olarak SDK Manager'dan en kısa sürede değiştirmelisiniz. Android 4.3 çalıştıran bir cihazınız yoksa uygulamanızı test etme, Android 4.3 sistemini kullanma görselini kullanarak uygulamanızı Android emülatöründe test edebilirsiniz. Ardından API'lerden yararlanın.

Hedef API düzeyinizi güncelleyin

Uygulamanızı Android 4.3 çalıştıran cihazlar için daha iyi optimize etmek üzere targetSdkVersion özelliğini şu şekilde ayarlamalısınız: "18", Android 4.3 sistem görüntüsüne yükleyin, test edip bu değişikliği içeren bir güncelleme yayınlayın.

Android 4.3'te API'leri kullanırken eski sürümleri de destekleyebilirsiniz. Bunun için çalıştırmadan önce sistem API düzeyini kontrol eden kodunuza koşullar minSdkVersion cihazınızın desteklemediği API'ler. Geriye dönük uyumluluğun korunması hakkında daha fazla bilgi edinmek için Farklı Destekleri Destekleme Platform Sürümleri.

Ayrıca Android Destek Kitaplığı'nda bulunan ve yapmanıza olanak tanıyan çeşitli API'ler yeni özellikleri kullanıma sunduk.

API düzeylerinin işleyiş şekli hakkında daha fazla bilgi için API nedir? Düzey mi?

Önemli davranış değişiklikleri

Daha önce Android için bir uygulama yayınladıysanız uygulamanızın bu Android 4.3'teki değişikliklerden etkilenebilir.

Uygulamanız örtülü niyet kullanıyorsa

Uygulamanız kısıtlı profil ortamında hatalı davranabilir.

Kısıtlı profil ortamındaki kullanıcılar tüm standart Android uygulamalarını içeriyor. Örneğin, kısıtlı bir profil web tarayıcısı ve kamera uygulaması devre dışı bırakıldı. Yani uygulamanız, hangi uygulamaların hangi cihazlarda kullanılabilir, çünkü startActivity() hattını Intent için bir uygulamanın kullanılabilir olup olmadığını doğrularsa, uygulamanız kısıtlanmış bir profilde kilitlenebilir.

Dolaylı intent kullanırken resolveActivity() veya queryIntentActivities() yöntemini çağırarak uygulamanın amacı işleyebilecek nitelikte olduğunu her zaman doğrulamanız gerekir. Örnek:

Kotlin

val intent = Intent(Intent.ACTION_SEND)
...
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
} else {
    Toast.makeText(context, R.string.app_not_available, Toast.LENGTH_LONG).show()
}

Java

Intent intent = new Intent(Intent.ACTION_SEND);
...
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
} else {
    Toast.makeText(context, R.string.app_not_available, Toast.LENGTH_LONG).show();
}

Uygulamanız hesaplara dayalıysa:

Uygulamanız kısıtlı profil ortamında hatalı davranabilir.

Kısıtlı profil ortamındaki kullanıcılar varsayılan olarak kullanıcı hesaplarına erişemez. Uygulamanız bir Account cihazına bağlıysa uygulamanız kilitlenebilir veya davranabilir beklenmedik bir şekilde kullanılabilir.

Kısıtlanmış profillerin uygulamanızı kullanmasını tamamen engellemek istiyorsanız uygulaması, hassas hesap bilgilerine bağlı. Manifest'inizin <application> bölümünde android:requiredAccountType özelliğini belirtin. öğesine dokunun.

Kısıtlanmış profillerin uygulamanızı kullanamasalar bile kullanmaya devam etmesine izin vermek istiyorsanız varsa hesap gerektiren uygulama özelliklerinizi devre dışı bırakabilirsiniz. veya kısıtlı profillerin birincil kullanıcı tarafından oluşturulan hesaplara erişmesine izin verin. Daha fazla daha fazla bilgi için Kısıtlı profilde hesapları destekleme hakkında daha fazla bilgi edinin.

Uygulamanız VideoView kullanıyorsa...

Videonuz Android 4.3'te daha küçük görünebilir.

Android'in önceki sürümlerinde VideoView widget'ı yanlış layout_height ve layout_width için "wrap_content" değerini "match_parent" ile aynı olacak şekilde hesapladı. Yükseklik veya genişlik için "wrap_content" kullanılırken istediğiniz video düzeni daha önce sağlanmış olabilir Android 4.3 ve sonraki sürümlerde çok daha küçük bir video alabilirsiniz. Sorunu düzeltmek için "match_parent" ile "wrap_content" ve videonuzun şurada beklendiği gibi göründüğünü doğrulayın: Android 4.3 ve daha eski sürümler.

Kısıtlanmış Profiller

Android tabletlerde kullanıcılar artık birincil kullanıcıya göre kısıtlanmış profiller oluşturabilir. Kullanıcılar kısıtlı profil oluşturduklarında, hangi uygulamaların profil tarafından kullanılabilir. Android 4.3'teki yeni API seti, ayrıntılı ve ayrıntılı analizler kısıtlama ayarlarınızı kontrol edin. Örneğin, yeni API'leri kullanarak şunları yapabilirsiniz: Kullanıcıların, belirli bir kısıtlı profil ortamı.

Kullanıcıların oluşturduğunuz kısıtlamaları kontrol edebileceği kullanıcı arayüzü, sistemin Ayarlar uygulaması. Uygulamanızın kısıtlama ayarlarının kullanıcıya gösterilmesi için ACTION_GET_RESTRICTION_ENTRIES amacını alan bir BroadcastReceiver oluşturarak uygulamanızın sağladığı kısıtlamaları beyan etmeniz gerekir. Sistem, kullanıcının ne istediğini sorgulamak için tüm uygulamaları kullanılabilir kısıtlamalar için uygular, ardından kullanıcı arayüzünü birincil kullanıcının Her kısıtlanmış profilin kısıtlamalarını yönetme

onReceive() yönteminde BroadcastReceiver cihazınızda, uygulamanızın sağladığı her kısıtlama için bir RestrictionEntry oluşturmanız gerekir. Her RestrictionEntry bir kısıtlama başlığı, açıklaması ve şu veri türleri:

  • Geçerli kısıtlama için TYPE_BOOLEAN doğru veya yanlış olabilir.
  • Şu kısıtlama için TYPE_CHOICE: birbirlerini dışlayan çoklu seçimler (radyo düğmesi seçenekleri)
  • Geçerli olduğu kısıtlama için TYPE_MULTI_SELECT birbirine bağlı olmayan birden çok seçeneğe sahiptir (onay kutusu seçenekleri).

Daha sonra tüm RestrictionEntry nesnelerini bir ArrayList içine koyuyor ve EXTRA_RESTRICTIONS_LIST ekstra.

Sistem, Ayarlar uygulamasında uygulamanızın kısıtlamaları için kullanıcı arayüzünü oluşturur ve her birini kaydeder. Her RestrictionEntry için sağladığınız benzersiz anahtarla kısıtlama nesnesini tanımlayın. Kullanıcı, uygulamanızı açtığında mevcut kısıtlamaları getApplicationRestrictions() aranıyor. Bu, her kısıtlama için anahtar/değer çiftlerini içeren bir Bundle döndürür (RestrictionEntry nesneyle tanımladığınız) değerini gösterir.

Boole tarafından işlenemeyen daha spesifik kısıtlamalar sağlamak istiyorsanız ve çoktan seçmeli değerleri kullanıyorsanız kullanıcının, tercihe bağlı olarak bu etkinliği kısıtlama ayarlarından açabilir. yayın alıcı, EXTRA_RESTRICTIONS_INTENT ekstra sonuç: Bundle. Bu ek öğe bir Intent belirtmelidir Activity sınıfının başlatılmasını belirten ( EXTRA_RESTRICTIONS_INTENT öğesini niyetle iletmek için putParcelable() yöntemini) kullanın. Birincil kullanıcı, özel kısıtlamalar belirlemek üzere etkinliğinize girdiğinde etkinliği, Belirttiğinize bağlı olarak EXTRA_RESTRICTIONS_LIST veya EXTRA_RESTRICTIONS_BUNDLE tuşu sırasıyla RestrictionEntry nesne veya anahtar/değer çiftleri.

Kısıtlı profildeki hesapları destekleme

Birincil kullanıcıya eklenen tüm hesaplar kısıtlı profil tarafından kullanılabilir ancak hesaplara AccountManager API'lerinden varsayılan olarak erişilemez. Kısıtlanmış bir durumdayken AccountManager ile bir hesap eklemeye çalışırsanız profilinizde hata sonucu alırsınız. Bu kısıtlamalar nedeniyle: üç seçenek sunulur:

  • Kısıtlı bir profilden hesap sahibinin hesaplarına erişime izin verin.

    Kısıtlanmış profilden bir hesaba erişim elde etmek için <application> etiketine android:restrictedAccountType özelliğini eklemeniz gerekir:

    <application ...
        android:restrictedAccountType="com.example.account.type" >
    

    Dikkat: Bu özelliği etkinleştirdiğinizde kısıtlanmış profillerden birincil kullanıcının hesaplarına uygulama erişimi. Bu nedenle, izin verilen yalnızca, uygulamanız tarafından görüntülenen bilgiler kimliği tanımlayabilecek bilgiler içermiyorsa hassas olarak kabul edilen bilgiler (PII) Sistem ayarları, birincil uygulamanızın kendi hesaplarına kısıtlanmış profiller verdiğini belirtmelidir. Bu nedenle, kullanıcı bunu net bir şekilde anlayabilmelidir. uygulamanızın işlevselliği için önemli olduğunu biliyorsunuz. Mümkünse Birincil kullanıcı için, hesap erişiminin ne kadarını tanımlayan yeterli kısıtlama kontrolleri sağlanmalıdır? uygulamanızda izin veriliyor.

  • Hesaplarda değişiklik yapılamadığında belirli işlevleri devre dışı bırakın.

    Hesapları kullanmak istiyorsanız, ancak uygulamanızın birincil hesabı için bunlara gerçekten ihtiyaç duymuyorsanız hesap kullanılabilirliğini kontrol edebilir ve kullanılamadığında özellikleri devre dışı bırakabilirsiniz. Öncelikle mevcut bir hesap olup olmadığını kontrol etmeniz gerekir. Değilse getUserRestrictions() numaralı telefonu arayıp sonuçtaki ekstra DISALLOW_MODIFY_ACCOUNTS bilgisini kontrol ederek yeni bir hesap oluşturabilirsiniz. true ise, uygulamanızın hesaplara erişmesi gereken işlevlerini devre dışı bırakmanız gerekir. Örnek:

    Kotlin

    val um = context.getSystemService(Context.USER_SERVICE) as UserManager
    val restrictions: Bundle = um.userRestrictions
    if (restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false)) {
        // cannot add accounts, disable some functionality
    }
    

    Java

    UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
    Bundle restrictions = um.getUserRestrictions();
    if (restrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false)) {
        // cannot add accounts, disable some functionality
    }
    

    Not: Bu senaryoda, aşağıdaki durumları beyan etmemelisiniz. tüm yeni özellikleri içerir.

  • Özel hesaplara erişemediğinizde uygulamanızı devre dışı bırakın.

    Bunun yerine uygulamanızın kısıtlanmış profiller tarafından kullanılamaması Uygulamanız bir hesaptaki hassas kişisel bilgilere bağımlı olduğu için (ayrıca profillerdeki şu anda yeni hesap eklenemiyor), <application> etiketine android:requiredAccountType özelliğini ekleyin:

    <application ...
        android:requiredAccountType="com.example.account.type" >
    

    Örneğin, Gmail uygulaması kısıtlanmış profillerde kendisini devre dışı bırakmak için bu özelliği kullanır. çünkü kullanıcının kişisel e-posta adresi kısıtlanmış profillerde mevcut olmamalıdır.

  • Kablosuz ve Bağlantı

    Bluetooth Düşük Enerji (Akıllı Hazır)

    Android, artık android.bluetooth ürününde yeni API'lerle Bluetooth Düşük Enerji'yi (LE) destekliyor. Yeni API'lerle Bluetooth Düşük Enerji ile iletişim kuran Android uygulamaları oluşturabilirsiniz. nabız monitörleri ve adım ölçer gibi çevre birimleri

    Bluetooth LE, tüm cihazlarda bulunmayan bir donanım özelliğidir. Android tabanlı cihazlar için manifest dosyanızda bir <uses-feature> beyan etmeniz gerekir. öğesi ("android.hardware.bluetooth_le" için):

    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
    

    Android'in Klasik Bluetooth API'larına zaten aşinaysanız Bluetooth LE API'lerinde bazı farklılıklar vardır. En önemlisi artık bazı üst düzey işlemler için kullanmanız gereken bir BluetoothManager sınıfının olmasıdır. ör. BluetoothAdapter edinme, bağlı çalışanların listesini alma ve cihaz durumunu kontrol edebilirsiniz. Örneğin, şimdi bu hesaplara nasıl ulaşacağınız BluetoothAdapter:

    Kotlin

    val bluetoothManager = getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
    bluetoothAdapter = bluetoothManager.adapter
    

    Java

    final BluetoothManager bluetoothManager =
            (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
    bluetoothAdapter = bluetoothManager.getAdapter();
    

    Bluetooth LE çevre birimlerini keşfetmek için BluetoothAdapter üzerinde startLeScan() adlı cihazı çağırarak bir uygulama gerçekleştirin her şeyi BluetoothAdapter.LeScanCallback arayüzününde görebilirsiniz. Bluetooth adaptör bir Bluetooth LE çevre birimi algıladığında BluetoothAdapter.LeScanCallback uygulamanız onLeScan() yöntemini çağırın. Bu yöntemi, değeri temsil eden bir BluetoothDevice nesnesi sağlar algılanan cihaz, cihazın RSSI değeri ve cihazın unutmayın.

    Yalnızca belirli çevre birimi türlerini taramak istiyorsanız bunun yerine startLeScan() öğesini çağırabilir ve uygulamanızın desteklediği GATT hizmetlerini belirten UUID nesne dizisini ekleyebilirsiniz.

    Not: Yalnızca Bluetooth LE cihazlarını tarayabilirsiniz veya Klasik Bluetooth cihazları önceki API'leri kullanarak tarama. Hem LE hem de Classic için tarama yapamazsınız Aynı anda Bluetooth cihazları.

    Daha sonra bir Bluetooth LE çevre birimine bağlanmak için ilgili numaradan connectGatt() adlı cihazı arayın BluetoothDevice nesnesini iletir. BluetoothGattCallback. BluetoothGattCallback uygulamanız, bağlantıyla ilgili geri çağırmalar alır cihazın durumuyla ilgili bilgi verir. onConnectionStateChange() geri çağırması için, yöntem yeni durum olarak STATE_CONNECTED değerini geçerse cihazla iletişim kurmaya başlayabilirsiniz.

    Bir cihazdaki Bluetooth özelliklerine erişmek için uygulamanızın, belirli bilgileri Bluetooth kullanıcı izinleri. Daha fazla bilgi için Bluetooth Düşük Enerji API rehberine bakın.

    Yalnızca kablosuz ağ tarama modu

    Android, kullanıcının konumunu belirlemeye çalışırken kullanıcının konumunu belirlemeye yardımcı olmak için kablosuz bağlantı kullanabilir. konumu belirlemek için yakındaki erişim noktalarını tarayın. Ancak kullanıcılar genellikle Bu durum pil tasarrufu yapmanızı sağlar. Bu da konum verilerinin doğruluk düzeyini düşürür. Android artık bir cihaz kablosuz ağın konum bilgisini almak için erişim noktalarını taramasına olanak tanıyan yalnızca tarama modu Bu da pil kullanımını büyük ölçüde azaltır.

    Kullanıcının konumunu öğrenmek istiyorsanız ancak kablosuz bağlantı şu anda kapalıysa kullanıcı, startActivity() öğesini ACTION_REQUEST_SCAN_ALWAYS_AVAILABLE işlemiyle çağırarak yalnızca kablosuz ağ tarama modunu etkinleştirmesine izin verir.

    Kablosuz yapılandırması

    Yeni WifiEnterpriseConfig API'leri, kurumsal odaklı hizmetlerin şunları yapmasına olanak tanır: yönetilen cihazlar için kablosuz ağ yapılandırmasını otomatikleştirme.

    Gelen aramalar için hızlı yanıt

    Android 4.0'dan beri "Hızlı yanıt" adı verilen bir özellik gelen e-postalara yanıt vererek Telefon çağrısına cevap vermek veya cihazın kilidini açmak zorunda kalmadan anında kısa mesaj göndererek arama yapar. Şimdiye kadar bu kısa mesajlar her zaman varsayılan Mesajlaşma uygulaması tarafından işleniyordu. Artık tüm uygulamalar bir Service oluşturarak bu mesajları işleyebildiğini beyan edebilir ACTION_RESPOND_VIA_MESSAGE için bir intent filtresiyle birlikte.

    Kullanıcı, gelen aramaya hızlı yanıt vererek yanıt verdiğinde Telefon uygulaması URI ile ACTION_RESPOND_VIA_MESSAGE niyeti alıcıyı (arayan) ve EXTRA_TEXT ek açıklamasını açıklayan mesajıyla birlikte görünür. Hizmetiniz niyeti aldığında bunu gerçekleştirmelidir mesajı hemen durdurmalı (uygulamanız hiçbir etkinlik göstermemelidir).

    Bu amacı almak için SEND_RESPOND_VIA_MESSAGE iznini beyan etmeniz gerekir.

    Multimedya

    MediaExtractor ve MediaCodec geliştirmeleri

    Android artık kendi Dynamic Adaptive'ınızı yazmanızı kolaylaştırıyor ISO/IEC 23009-1 standardına uygun olarak HTTP (DASH) oynatıcıları üzerinden akış, (MediaCodec ve MediaExtractor ürünlerindeki mevcut API'leri kullanarak) Bu API'lerin temelini oluşturan çerçeve, Google Analytics 4'teki parçalanmış MP4 dosyalarının ayrıştırılmasına karşın uygulamanız yine de MPD meta verilerini ayrıştırmaktan sorumlu olur. ve tek tek akışları MediaExtractor hedefine geçiriyoruz.

    DASH'i şifrelenmiş içerikle kullanmak istiyorsanız getSampleCryptoInfo() yönteminin, şifrelenmiş her medyanın yapısını açıklayan MediaCodec.CryptoInfo meta verilerini döndürdüğüne dikkat edin. örneklem. Ayrıca, getPsshInfo() yöntemi DASH medyanızın PSSH meta verilerine erişebilmeniz için MediaExtractor. Bu yöntem, UUID nesnelerinden oluşan bir eşlemeyi baytlarla dönüştürür. UUID şifreleme şemasını ve veriye özgü baytları belirtir olabileceğini unutmayın.

    Medya DRM

    Yeni MediaDrm sınıfı, dijital haklar için modüler bir çözüm sunar. yönetimi (DRM) ile yönetmenizi kolaylaştırabilir. Örneğin, bu API ayırması, Widevine ile şifrelenmiş içeriği başka herhangi bir cihaza Widevine medya biçimini kullanın. Bu DRM çözümü, DASH Ortak Şifrelemesini de destekler. Böylece Akış içeriğinizde çeşitli DRM şemaları kullanabilirsiniz.

    Opak anahtar isteği mesajlarını ve işlemi almak için MediaDrm kullanabilirsiniz sunucudan gelen anahtar yanıtı iletilerinin sayısı gösterilmektedir. Uygulamanız Sunucularla ağ iletişimini yönetmekten sorumlu olmalıdır; MediaDrm sınıfı yalnızca iletileri oluşturma ve işleme olanağı sağlar.

    MediaDrm API'lerinin, Android 4.1'de (API düzeyi 16) kullanıma sunulan MediaCodec API, içeriğinizi kodlama ve kodunu çözmek için MediaCodec, şifrelenmiş içeriği işlemek için MediaCrypto ve MediaExtractor dahil olmak üzere en iyi uygulamaları paylaşacağız.

    Önce MediaExtractor ve MediaCodec nesne. Ardından, DRM şemasıyla kimlik tanımlama UUID kullanır ve bunu bir kurucusuyla birlikte MediaDrm nesnesinin örneğidir.

    Bir yüzeyden video kodlama

    Android 4.1 (API düzeyi 16), alt düzey için MediaCodec sınıfını ekledi. kod çözme ve medya içeriğini yönetme. Android 4.1, videoları kodlarken medyayı ByteBuffer dizisine sahip olmasına rağmen Android 4.3 artık kodlayıcıya giriş olarak Surface kullanmanıza olanak tanıyor. Örneğin, bu, girişi kodlamanıza mevcut bir video dosyasından veya OpenGL ES'den oluşturulan kareleri kullanarak.

    Kodlayıcınızda giriş olarak Surface kullanmak için önce MediaCodec cihazınız için configure() çağrısı yapın. Ardından, medyanızı akış olarak aktarabileceğiniz Surface hizmetini almak için createInputSurface() numaralı telefonu arayın.

    Örneğin, verilen Surface öğesini bir OpenGL için pencere olarak kullanabilirsiniz bağlamını eglCreateWindowSurface() öğesine iletebilirsiniz. Ardından, yüzeyi oluştururken kareyi MediaCodec öğesine aktarmak için eglSwapBuffers() yöntemini çağırın.

    Kodlamayı başlatmak için MediaCodec cihazında start() kodunu arayın. İşiniz bittiğinde signalEndOfInputStream() numaralı telefonu arayın kodunu ekleyin verelease() Surface.

    Medya birleştirme

    Yeni MediaMuxer sınıfı, tek bir ses akışı arasında çoğullama yapmayı sağlar ve bir video akışı. Bu API'ler, MediaExtractor ile eşdeğer işlevi görür sınıfının çoğullama (kaldırma) medyası için Android 4.2'de eklendi.

    Desteklenen çıkış biçimleri, MediaMuxer.OutputFormat bölümünde tanımlanmıştır. Şu anda, MediaMuxer şu anda desteklenen tek çıkış biçimi ve MP4'tür. Aynı anda yalnızca bir ses akışı ve/veya bir video akışı.

    MediaMuxer, çoğunlukla MediaCodec ile çalışacak şekilde tasarlanmıştır. Böylece MediaCodec aracılığıyla video işleme gerçekleştirebilir, ardından MediaMuxer üzerinden bir MP4 dosyasına dönüştürün. Performans için MediaMuxer öğesini MediaExtractor ile birlikte kullanabilirsiniz gerek kalmadan medya düzenleme yapmanıza olanak tanır.

    RemoteControlClient için oynatma ilerleme durumu ve ileri geri oynatma

    Android 4.0'da (API düzeyi 14) RemoteControlClient, uzaktan kumanda istemcilerindeki medya oynatma kontrollerini (örneğin, kilit ekranı. Android 4.3 artık bu tür kumandalara, oynatmayı görüntüleme imkanı sunuyor. oynatma konumunu ve ileri geri oynatma kontrollerini içerir. RemoteControlClient API'leri ile bir medya uygulamanız varsa oynatmaya izin verebilirsiniz proje zaman çizelgesinde ilerleme kaydetti.

    Öncelikle FLAG_KEY_MEDIA_POSITION_UPDATE işaretini setTransportControlsFlags().

    Daha sonra, aşağıdaki iki yeni arayüzü uygulayın:

    RemoteControlClient.OnGetPlaybackPositionListener
    Buna, mevcut konumu isteyen onGetPlaybackPosition() geri çağırması da dahildir uzaktan kumandanın, kullanıcı arayüzündeki ilerleme durumunu güncellemesi gerektiğinde medyanızın otomatik olarak güncellenmesini sağlar.
    RemoteControlClient.OnPlaybackPositionUpdateListener
    Buna, onPlaybackPositionUpdate() geri çağırması da dahildir. Kullanıcı, şununla oynatmayı ileri geri oynattığında ilgili medya içeriğinin yeni zaman kodunu uzaktan kumanda kullanıcı arayüzü.

    Oynatmanızı yeni konumla güncelledikten sonra, şunu belirtmek için setPlaybackState() öğesini çağırın: yeni oynatma durumu, konum ve hız

    Tanımlanmış bu arayüzleri RemoteControlClient cihazınız için ayarlamak üzere setOnGetPlaybackPositionListener() ve Sırasıyla setPlaybackPositionUpdateListener().

    Grafik

    OpenGL ES 3.0 desteği

    Android 4.3, OpenGL ES 3.0 için Java arayüzleri ve yerel destek ekler. Önemli yeni işlevler OpenGL ES 3.0'da sağlanan şunları içerir:

    • Gelişmiş görsel efektleri hızlandırma
    • Standart bir özellik olarak yüksek kaliteli ETC2/EAC doku sıkıştırması
    • GLSL ES gölgelendirme dilinin tam sayı ve 32 bit kayan nokta desteğiyle yeni sürümü
    • Gelişmiş doku oluşturma
    • Doku boyutu ve oluşturma arabellek biçimlerinin daha kapsamlı standartlaştırılması

    Android'de OpenGL ES 3.0 için Java arayüzü GLES30 ile sağlanır. OpenGL ES 3.0'ı kullanırken bunu manifest dosyanızda <uses-feature> etiketini ve android:glEsVersion özelliğini kullanır. Örnek:

    <manifest>
        <uses-feature android:glEsVersion="0x00030000" />
        ...
    </manifest>
    

    Son olarak, setEGLContextClientVersion() kodunu çağırarak OpenGL ES bağlamını belirtmeyi unutmayın, sürüm olarak 3 iletiliyor.

    Aşağıdakiler dahil olmak üzere OpenGL ES'yi kullanma hakkında daha fazla bilgi için: Çalışma zamanında OpenGL ES sürümü için OpenGL ES API kılavuzuna bakın.

    Çekilebilir öğeler için gizleme

    Bit eşleminizin veya çekilebilirinizin kaynağı olarak bir mipmap kullanmak, resim ve çeşitli resim ölçekleri içerir. Bu, özellikle her zaman animasyon sırasında ölçeklendirilecek resim.

    Android 4.2 (API düzeyi 17) sürümüne, Bitmap içindeki mipmaps desteği eklendi class - Android, aşağıdaki durumlarda Bitmap cihazınızdaki mip resimlerini bir mipmap kaynağı sağladı ve setHasMipMap() öğesini etkinleştirdi. Artık Android 4.3'te, bir mipmap öğesi sağlayarak ve aynı zamanda bir BitmapDrawable nesnesi için mipmaps özelliğini etkinleştirebilirsiniz. android:mipMap özelliğini bir bit eşlem kaynak dosyasında ayarlayarak veya hasMipMap() yöntemini çağırarak.

    Kullanıcı Arayüzü

    Yer paylaşımlarını görüntüleme

    Yeni ViewOverlay sınıfı, görsel içerik ekleyebileceğiniz ve etkilemeyen bir View ortadan kaldırır. getOverlay() numaralı telefonu arayarak herhangi bir View için ViewOverlay alabilirsiniz. Yer paylaşımı her zaman ana makine görünümüyle (oluşturulduğu görünüm) aynı boyut ve konuma sahiptir; ana makine görünümünün önünde görünen, ancak genişlemeyen içeriği eklemenize olanak tanır. o ana makine görünümünün sınırlarıdır.

    ViewOverlay kullanmak özellikle bir görünümü kapsayıcısının dışına kaydırma veya öğeleri ekran üzerinde hareket ettirme gibi animasyonlar görünüm hiyerarşisini etkilemeden çalışır. Ancak, bir bindirmenin kullanılabilir alanı ana makine görünümüyle aynı alanla sınırlandırılmıştır. yerine yerleştirmeyi seçerseniz, üst görünümden istediğiniz sınırları vardır.

    Button gibi bir widget görünümü için yer paylaşımı oluşturduğunuzda, şunu çağırarak yer paylaşımına Drawable nesne ekleyebilir: add(Drawable). RelativeLayout gibi bir düzen görünümü için getOverlay() yöntemini çağırırsanız döndürülen nesne bir ViewGroupOverlay. İlgili içeriği oluşturmak için kullanılan ViewGroupOverlay sınıfı bir alt sınıf View eklemek için kullanabileceğiniz ViewOverlay tanesi nesneleri add(View) çağırarak yapabilirsiniz.

    Not: Yer paylaşımına eklediğiniz tüm çekilebilir içerikler ve görünümler yalnızca görseldir. Odak veya giriş etkinliklerini alamazlar.

    Örneğin, aşağıdaki kodda bir görünümü yerleştirerek sağa kayan bir görünümün animasyonunu gösterebilir, ardından o görünümde bir çeviri animasyonu gerçekleştirebilirsiniz:

    Kotlin

    val view: View? = findViewById(R.id.view_to_remove)
    val container: ViewGroup? = view?.parent as ViewGroup
    
    container?.apply {
        overlay.add(view)
        ObjectAnimator.ofFloat(view, "translationX", right.toFloat())
                .start()
    }
    

    Java

    View view = findViewById(R.id.view_to_remove);
    ViewGroup container = (ViewGroup) view.getParent();
    container.getOverlay().add(view);
    ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", container.getRight());
    anim.start();
    

    Optik sınır düzeni

    Dokuz yamalı arka plan resimleri içeren görünümler için artık görüntülenemez. "optik"e göre komşu görünümlerle uyumlu olmak arka plan resminin "klip"ten daha sınırları belirleyebilirsiniz.

    Örneğin, Şekil 1 ve 2'nin her biri aynı düzeni gösterir, ancak Şekil 1'deki sürüm Şekil 2'de optik sınırlar kullanılırken, aşağıdaki örnekte olduğu gibi, klip sınırlarını (varsayılan davranış) kullanır. Çünkü düğme ve fotoğraf çerçevesi için kullanılan dokuz noktalı resimlerde kenarların kenarlarında dolgu bulunur, klip sınırları kullanılırken birbirleriyle veya metinle uyumlu görünmüyor.

    Not: Şekil 1 ve 2'deki ekran görüntüsünde "Göster" düzen sınırları" geliştirici ayarı etkin. Her görünüm için, kırmızı çizgiler optik sınırları, mavi çizgiler klip sınırlarını, pembe çizgiler ise kenar boşluklarını belirtir.

    Şekil 1. Klip sınırlarını kullanan düzen (varsayılan).

    Şekil 2. Optik sınırları kullanan düzen.

    Görünümleri optik sınırlarına göre hizalamak için üst düzenlerden birinde android:layoutMode özelliğini "opticalBounds" olarak ayarlayın. Örnek:

    <LinearLayout android:layoutMode="opticalBounds" ... >
    

    Şekil 3. Yakınlaştırılmış Holo düğmesinin dokuz noktalı görünümü optik sınırların aşılmasına yol açar.

    Bunun çalışması için görünümlerinizin arka planına uygulanan dokuz yama resim, dokuz yama dosyasının alt ve sağ tarafındaki kırmızı çizgilerle optik sınırları Şekil 3'te gösterilmiştir). Kırmızı çizgiler, resmin optik sınırlarını bırakarak klip sınırlarını aşar.

    Düzeninizde bir ViewGroup için optik sınırları etkinleştirdiğinizde alt görünümler, bir gruplandırma ölçütü için geçersiz kılmadığınız sürece optik sınır düzen modunu devralır ayarını android:layoutMode olarak "clipBounds" yapın. Tüm düzen öğeleri, çocuklarının görmelerinin optik sınırlarına sadık kalırlar. daha fazla bilgi edindiniz. Ancak düzen öğeleri (ViewGroup alt sınıfları) şu anda kendi arka planlarına uygulanan dokuz yama görüntü için optik sınırları desteklemiyor.

    View, ViewGroup veya bunların herhangi bir alt sınıfını alt sınıflandırarak özel bir görünüm oluşturursanız görünümünüz bu optik bağlı davranışları devralır.

    Not: Holo teması tarafından desteklenen tüm widget'lar güncellendi optik sınırlılarla (Button, Spinner dahil) EditText ve diğerleri. Böylece, ayarlarınızı yaparak Uygulamanız Holo teması kullanıyorsa "opticalBounds" için android:layoutMode özelliği (Theme.Holo, Theme.Holo.Light vb.).

    9 yama çizin aracıyla kendi dokuz yama görüntünüz için optik sınırları belirlemek için tıklayın.

    Rect değerleri için animasyon

    Artık yeni RectEvaluator ile iki Rect değeri arasında animasyon oluşturabilirsiniz. Bu yeni sınıf, ValueAnimator.setEvaluator() sınıfına geçirebileceğiniz bir TypeEvaluator uygulamasıdır.

    Pencere ekleme ve odaklama işleyici

    Daha önce, görünümünüzün pencereye ekli/ayrıldığını dinlemek istediğinizde veya odağı değiştiğinde View sınıfını geçersiz kılmanız gerekiyordu. sırasıyla onAttachedToWindow() ve onDetachedFromWindow() veya onWindowFocusChanged() değerleri uygulayın.

    Artık ekleme ve çıkarma etkinlikleri almak için bunun yerine ViewTreeObserver.OnWindowAttachListener öğesini uygulayabilir ve şunu içeren bir görünümde ayarlayabilirsiniz: addOnWindowAttachListener(). Odaklanılan etkinlikleri almak için de ViewTreeObserver.OnWindowFocusChangeListener öğesini uygulayıp addOnWindowFocusChangeListener().

    TV üzerinden tarama desteği

    Uygulamanızın her televizyonda ekranın tamamını doldurduğundan emin olmak için artık fazla taramayı etkinleştirebilirsiniz en iyi uygulamaları paylaşacağız. Fazla tarama modu, şu gibi platform temalarıyla etkinleştirebileceğiniz FLAG_LAYOUT_IN_OVERSCAN işaretiyle belirlenir: Theme_DeviceDefault_NoActionBar_Overscan veya Özel bir temada windowOverscan stili.

    Ekran yönü

    <activity> etiketinin screenOrientation özelliği artık kullanıcının otomatik döndürme tercihini yerine getirmek için ek değerleri destekliyor:

    "userLandscape"
    Kullanıcının otomatik döndürmeyi devre dışı bırakması dışında "sensorLandscape" ile aynı şekilde davranır normal yatay yönde kilitlenir ve dönmez.
    "userPortrait"
    Kullanıcının otomatik döndürmeyi devre dışı bırakması dışında, "sensorPortrait" ile aynı şekilde davranır normal dikey yönde kilitlenir ve dönmez.
    "fullUser"
    "fullSensor" ile aynı şekilde davranır ve hariç dört yönde dönmeye izin verir. kullanıcı otomatik döndürmeyi devre dışı bırakırsa kullanıcının tercih ettiği yönde kilitlenir.

    Ayrıca, artık uygulamanızın yönünü kilitlemek için "locked" olarak da beyan edebilirsiniz. ekranın geçerli yönünü gösterir.

    Döndürme animasyonları

    Şu sayfadaki yeni rotationAnimation alanı: WindowManager, istediğiniz üç animasyondan birini seçmenize olanak tanır başka bir ekran görüntüsüne sahip olun. Bu üç animasyon şunlardır:

    Not: Bu animasyonlar yalnızca etkinliğinizi "tam ekran" modunu kullanacak şekilde ayarladıysanız kullanılabilir modudur. Bu modu Theme.Holo.NoActionBar.Fullscreen gibi temalarla etkinleştirebilirsiniz.

    Örneğin, "artı geçişi" animasyon:

    Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        val params: WindowManager.LayoutParams = window.attributes
        params.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE
        window.attributes = params
        ...
    }
    

    Java

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        WindowManager.LayoutParams params = getWindow().getAttributes();
        params.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE;
        getWindow().setAttributes(params);
        ...
    }
    

    Kullanıcı Girişi

    Yeni sensör türleri

    Yeni TYPE_GAME_ROTATION_VECTOR sensörü, manyetik parazitler konusunda endişelenmeden cihazın dönüşlerini algılamanızı sağlar. TYPE_ROTATION_VECTOR sensöründen farklı olarak TYPE_GAME_ROTATION_VECTOR, manyetik kuzeye dayalı değildir.

    Yeni TYPE_GYROSCOPE_UNCALIBRATED ve TYPE_MAGNETIC_FIELD_UNCALIBRATED sensörleri, API'leri kullanmadan ham sensör verisi sunar. göz önünde bulundurmalısınız. Yani, mevcut TYPE_GYROSCOPE ve TYPE_MAGNETIC_FIELD sensörler, jiroskop ve sert demirden kaynaklanan tahmini sapmayı hesaba katan sensör verileri sağlar emin olun. Halbuki yeni "kalibre edilmemiş" sürümleri yerine bu sensörlerin ayrı ayrı sunmalı ve tahmini sapma değerlerini ayrı ayrı sunmalıdır. Bu sensörler şunları yapmanıza olanak tanır: kullanarak tahmini sapmayı geliştirerek sensör verileri için kendi özel kalibrasyonunuzu hariç tutulabilir.

    Bildirim Dinleyici

    Android 4.3, uygulamanızın sistem tarafından yayınlanan yeni bildirimler hakkında bilgi almasını sağlayan NotificationListenerService adlı yeni bir hizmet sınıfı ekler.

    Uygulamanız sistem bildirimlerine erişmek için şu anda erişilebilirlik hizmeti API'lerini kullanıyorsa, uygulamanızı bu API'lerin yerine bu API'leri kullanacak şekilde güncellemeniz gerekir.

    Contacts Provider

    "İletişim kurulabilir" sorgusu

    Yeni Kişi Sağlayıcı sorgusu (Contactables.CONTENT_URI), belirtilen sorguyla eşleşen tüm kişilere ait tüm e-posta adreslerini ve telefon numaralarını içeren bir Cursor elde etmek için etkili bir yol sağlar.

    Kişi deltaları için sorgu

    Kişiler Sağlayıcısı'na, kişi verilerindeki son değişiklikleri verimli bir şekilde sorgulamanızı sağlayan yeni API'ler eklendi. Önceden, kişi verilerinde bir değişiklik olduğunda uygulamanız bilgilendiriliyordu, ancak siz tam olarak neyin değiştiğini bilmiyorsunuz ve değişikliği keşfetmek için tüm kişileri tekrarlamanız gerekiyor.

    Ekleme ve güncelleme değişikliklerini izlemek için artık yalnızca sağlayıcıyı son sorguladığınızdan bu yana değişen kişileri sorgulamak üzere seçiminize CONTACT_LAST_UPDATED_TIMESTAMP parametresini dahil edebilirsiniz.

    Hangi kişilerin silindiğini takip etmek için yeni ContactsContract.DeletedContacts tablosu, silinen kişilerin bir günlüğünü sağlar (ancak silinen her kişi sınırlı bir süre boyunca bu tabloda tutulur). CONTACT_LAST_UPDATED_TIMESTAMP özelliğine benzer şekilde, sağlayıcıyı son sorguladığınızda hangi kişilerin silindiğini kontrol etmek için CONTACT_DELETED_TIMESTAMP adlı yeni seçim parametresini kullanabilirsiniz. Tablo, günlüğün saklanacağı gün sayısını (milisaniye cinsinden) içeren sabit DAYS_KEPT_MILLISECONDS değerini de içerir.

    Ayrıca, kullanıcı aşağıdaki işlemleri gerçekleştirdiğinde Kişi Sağlayıcı artık CONTACTS_DATABASE_CREATED işlemini de yayınlar. sistem ayarları menüsünden kişilerin depolama alanını temizler ve Kişi Sağlayıcı veritabanı. Uygulamalara, iletişim bilgilerini kesmeleri gerektiğini bildirmek için kullanılır bilgileri yeniden yükleyebilir ve yeni bir sorguyla yeniden yükleyebilirsiniz.

    Kişilerde yapılan değişiklikleri kontrol etmek üzere bu API'ları kullanan örnek kod için ApiDemos örneği SDK Örnekleri'nde indirebilirsiniz.

    Yerelleştirme

    Geliştirilmiş çift yönlü metin desteği

    Android'in önceki sürümleri sağdan sola (RTL) dilleri ve düzeni desteklemektedir. ancak bazen karma yönlü metinleri düzgün bir şekilde işleyemiyor. Dolayısıyla Android 4.3, metinleri ters yönde düzgün şekilde biçimlendirmenize yardımcı olan BidiFormatter API'lerini ekler. hiçbir kısmını karıştırmamaya çalışın.

    Örneğin, "Şunu mu demek istediniz: "Şunu mu demek istediniz?" 15 Bay Street, Laurel, CA" adresini ziyaret ederseniz normalde yerelleştirilmiş bir dize kaynağını ve değişkeni String.format():

    Kotlin

    val suggestion = String.format(resources.getString(R.string.did_you_mean), address)
    

    Java

    Resources res = getResources();
    String suggestion = String.format(res.getString(R.string.did_you_mean), address);
    

    Ancak, yerel ayar İbranice ise biçimlendirilmiş dize şöyle görünür:

    rep

    Bu yanlış çünkü "15" "Bay Street"in solunda olmalıdır. Çözüm, BidiFormatter ve unicodeWrap() yöntemini kullanmaktır. Örneğin, yukarıdaki kod şu şekilde olur:

    Kotlin

    val bidiFormatter = BidiFormatter.getInstance()
    val suggestion = String.format(
            resources.getString(R.string.did_you_mean),
            bidiFormatter.unicodeWrap(address)
    )
    

    Java

    Resources res = getResources();
    BidiFormatter bidiFormatter = BidiFormatter.getInstance();
    String suggestion = String.format(res.getString(R.string.did_you_mean),
            bidiFormatter.unicodeWrap(address));
    

    Varsayılan olarak, unicodeWrap() ilk güçlü yön tahmini bulma yöntemidir; ilk yöntem, ilk kez metin yönü sinyali, içeriğin bütünü için uygun yönü temsil etmiyor. Gerekirse TextDirectionHeuristics öğesindeki TextDirectionHeuristic sabitlerinden birini ileterek farklı bir buluşsal yöntem belirtebilirsiniz. alıcı: unicodeWrap().

    Not: Bu yeni API'ler önceki sürümlerde de kullanılabilir. Android'in Destek Ekibi'yle Kitaplık: BidiFormatter sınıfı ve ilgili API'lerle.

    Erişilebilirlik Hizmetleri

    Önemli etkinlikleri yönetme

    AccessibilityService artık şunun için geri aranabilir: tuş giriş etkinliklerini onKeyEvent() geri çağırma yöntemiyle gerçekleştirin. Bu sayede erişilebilirlik hizmetiniz şunun için girişi işleyebilir: klavye gibi tuş tabanlı giriş cihazlarını kullanarak bu etkinlikleri daha önce yalnızca dokunmatik giriş veya cihazın yön tuşlarıyla yapılabiliyordu.

    Metin seç ve kopyala/yapıştır

    AccessibilityNodeInfo, artık izin verilen API'ler sunar. seçmek, kesmek, kopyalamak ve yapıştırmak için bir AccessibilityService bir düğümdeki metindir.

    Kesilecek veya kopyalanacak metin seçimini belirtmek için erişilebilirlik hizmetiniz yeni işlem, ACTION_SET_SELECTION, pas başlangıç ve bitiş konumlarını; ACTION_ARGUMENT_SELECTION_START_INT ve ACTION_ARGUMENT_SELECTION_END_INT ile değiştirin. Alternatif olarak mevcut işlem, ACTION_NEXT_AT_MOVEMENT_GRANULARITY (daha önce yalnızca imleç konumunu hareket ettirmek için kullanılır) ve ACTION_ARGUMENT_EXTEND_SELECTION_BOOLEAN bağımsız değişkenini eklemek için kullanılır.

    Daha sonra ACTION_CUT ile kesebilir veya kopyalayabilirsiniz. ACTION_COPY, daha sonra şununla yapıştırın: ACTION_PASTE.

    Not: Bu yeni API'ler önceki sürümlerde de kullanılabilir. Android'in Destek Ekibi'yle Kitaplık: AccessibilityNodeInfoCompat sınıfını kullanır.

    Erişilebilirlik özelliklerini bildirme

    Android 4.3'ten itibaren bir erişilebilirlik hizmeti, erişilebilirlik özelliklerini beyan etmelidir otomatik olarak ekler. Özellik meta veri dosyasında istediği takdirde, özellik kullanılamaz. Hizmetinizle ilgili özellikleri için farklı işlevlere karşılık gelen XML özelliklerini "özellik" AccessibilityServiceInfo içindeki sabit değerler sınıfını kullanır.

    Örneğin, bir hizmet flagRequestFilterKeyEvents özelliğini istemezse önemli etkinlikleri almaz.

    Test ve Hata Ayıklama

    Otomatik kullanıcı arayüzü testi

    Yeni UiAutomation sınıfı, kullanıcıyı simüle etmenize olanak tanıyan API'ler sunar. işlem sayısını en üst düzeye çıkarmanıza yardımcı olur. Platformun AccessibilityService API'leri kullanılarak UiAutomation, API'ler ekran içeriğini incelemenize, rastgele klavye ve dokunma etkinlikleri eklemenize olanak tanır.

    UiAutomation örneği almak için Instrumentation.getUiAutomation() işlevini çağırın. Siparişte bunun çalışması için -w seçeneğini instrument komutuyla sağlamanız gerekir InstrumentationTestCase için adb shell değerini alır.

    UiAutomation örneğiyle rastgele etkinlikler yürütebilir ve uygulamanızı executeAndWaitForEvent() çağırarak, gerçekleştirmek için Runnable ileterek, zaman aşımını ve UiAutomation.AccessibilityEventFilter arayüzünün uygulanması. UiAutomation.AccessibilityEventFilter uygulamanız dahilinde telefonla aranırsınız ilgilendiğiniz etkinlikleri filtrelemenizi ve başarı veya başarı ya da başarısız olduğunu gösterir.

    Bir test sırasında tüm etkinlikleri gözlemlemek için UiAutomation.OnAccessibilityEventListener uygulaması oluşturup setOnAccessibilityEventListener() öğesine iletin. Dinleyici arayüzünüz, onAccessibilityEvent() numaralı telefona bir çağrı alır her etkinlik gerçekleştiğinde AccessibilityEvent nesnesi alınıyor bir açıklama ekleyin.

    UiAutomation API'lerinin açığa çıkardığı çeşitli başka işlemler de vardır. uiautomator gibi kullanıcı arayüzü test araçlarının geliştirilmesini teşvik etmek için çok düşük bir düzeyde. Örneğin, UiAutomation şunları da yapabilir:

    • Giriş etkinlikleri ekle
    • Ekranın yönünü değiştirme
    • Ekran görüntüsü alma

    En önemlisi, kullanıcı arayüzü test araçları için UiAutomation API'leri uygulama sınırlarının ötesine geçer.Instrumentation

    Uygulamalar için Systrace etkinlikleri

    Android 4.3, Trace sınıfını iki statik yöntemle ekler: beginSection() ve endSection(), Bunlar, sistem izleme raporuna dahil edilecek kod bloklarını tanımlamanıza olanak tanır. İçerik oluşturarak takip edilebilir kod bölümlerinin bulunması gibi, systrace günlük kayıtları size çok daha ayrıntılı uygulamanızda yavaşlamanın olduğu yerlerin analizi.

    Systrace aracını kullanma hakkında bilgi için Systrace ile Görüntü ve Performansı Analiz Etme bölümünü okuyun.

    Güvenlik

    Uygulama özel anahtarları için Android anahtar mağazası

    Android artık KeyStore içinde özel bir Java Güvenlik Sağlayıcısı sunuyor Bu, özel anahtarlarınızı oluşturmanıza ve kaydetmenize olanak tanıyan, yalnızca uygulamanız tarafından görülüp kullanılabilir. Android Key Store'u yüklemek için "AndroidKeyStore" - KeyStore.getInstance().

    Uygulamanızın özel kimlik bilgilerini Android Key Store'da yönetmek için yeni bir anahtar oluşturun: KeyPairGeneratorSpec ile KeyPairGenerator. Birinci Sınıf getInstance() çağrısı yaparak KeyPairGenerator örneğini alın. Ardından şu numarayı arayın: initialize(), şunun bir örneğini iletir: Şu API'yi kullanabilirsiniz: KeyPairGeneratorSpec KeyPairGeneratorSpec.Builder. Son olarak, generateKeyPair() numaralı telefonu arayarak KeyPair kartınızı alın.

    Donanım kimlik bilgileri deposu

    Android artık KeyChain cihazınız için donanım destekli depolama alanını da destekliyor kimlik bilgileri çıkartılır. Bu da anahtarların ayıklanmasını önleyerek daha fazla güvenlik sağlar. Yani, bir kez donanım destekli bir anahtar deposunda (Secure Element, TPM veya TrustZone) bulunuyorsa, Ancak özel anahtar materyali dışa aktarılamaz. İşletim sistemi çekirdeği bu anahtar materyaline erişemiyor. Android destekli tüm cihazlar açık depolama alanını desteklemez donanım destekli depolama alanının olup olmadığını öğrenmek için KeyChain.IsBoundKeyAlgorithm()

    Manifest Beyanları

    Beyan edilen gerekli özellikler

    Aşağıdaki değerler artık <uses-feature>'nda desteklenmektedir öğesi ile, uygulamanızın yalnızca bu özellikleri sunan cihazlara yüklenmesini sağlayabilirsiniz. en iyi uygulamaları paylaşacağız.

    FEATURE_APP_WIDGETS
    Uygulamanızın, uygulama widget'ı sağladığını ve yalnızca şu özelliğe sahip cihazlara yüklenmesi gerektiğini beyan eden: Kullanıcıların uygulama widget'ları yerleştirebileceği bir Ana ekran veya benzer bir konum eklemelidir. Örnek:
    <uses-feature android:name="android.software.app_widgets" android:required="true" />
    
    FEATURE_HOME_SCREEN
    Uygulamanızın ana ekran değişimi olarak davrandığını ve yalnızca şuralara yüklenmesi gerektiğini beyan eden: üçüncü taraf Ana ekran uygulamalarını destekleyen cihazlar Örnek:
    <uses-feature android:name="android.software.home_screen" android:required="true" />
    
    FEATURE_INPUT_METHODS
    Uygulamanızın özel bir giriş yöntemi (InputMethodService ile oluşturulmuş bir klavye) sağladığını ve yalnızca şu cihazlarda yüklenmesi gerektiğini beyan eden: üçüncü taraf giriş yöntemlerini destekler. Örnek:
    <uses-feature android:name="android.software.input_methods" android:required="true" />
    
    FEATURE_BLUETOOTH_LE
    Uygulamanızın Bluetooth Düşük Enerji API'lerini kullandığını ve yalnızca cihazlara yüklenmesi gerektiğini beyan ediyor Bluetooth Düşük Enerji aracılığıyla diğer cihazlarla iletişim kurabilen cihazlar. Örnek:
    <uses-feature android:name="android.software.bluetooth_le" android:required="true" />
    

    Kullanıcı izinleri

    Aşağıdaki değerler artık <uses-permission>'nda desteklenmektedir bu şartın uygulamanızın belirli API'lere erişebilmesi için gereken izinler.

    BIND_NOTIFICATION_LISTENER_SERVICE
    Yeni NotificationListenerService API'lerinin kullanılması için gereklidir.
    SEND_RESPOND_VIA_MESSAGE
    ACTION_RESPOND_VIA_MESSAGE almak için gereklidir isteyebilirsiniz.

    Android 4.3'teki tüm API değişikliklerinin ayrıntılı görünümü için API Farklılıkları Raporu.