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ı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.
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.
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.
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" ... >
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.