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 dokümanda, en dikkate değer yeni API'lere giriş sunulmaktadır.
Uygulama geliştirici olarak, Android 4.3 sistem imajını ve SDK platformunu en kısa sürede SDK Yöneticisi'nden indirmeniz gerekir. 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, en son API'leri kullanmaya başlamak için uygulamalarınızı Android 4.3 platformu için derleyin.
Hedef API düzeyinizi güncelleme
Uygulamanızı Android 4.3 çalıştıran cihazlar için daha iyi optimize etmek amacıyla targetSdkVersion
dosyanızı "18"
olarak ayarlamanız, Android 4.3 sistem resmine yüklemeniz, test etmeniz ve ardından bu değişikliği içeren bir güncelleme yayınlamanız gerekir.
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 Android 4.3'teki değişikliklerden etkilenebileceğini unutmayın.
Uygulamanız örtülü niyet kullanıyorsa
Uygulamanız, kısıtlanmış profil ortamında hatalı davranıyor olabilir.
Kısıtlı profil ortamındaki kullanıcılar
tüm standart Android uygulamalarını içeriyor. Örneğin, web tarayıcısı ve kamera uygulaması kısıtlanmış bir profilde devre dışı bırakılmış olabilir. 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.
Örtük intent kullanırken resolveActivity()
veya queryIntentActivities()
çağrısını yaparak intent'i işleyebilecek bir uygulamanın her zaman mevcut olduğunu 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 bağlıysa...
Uygulamanız, kısıtlanmış profil ortamında hatalı davranıyor olabilir.
Kısıtlı profil ortamındaki kullanıcılar varsayılan olarak kullanıcı hesaplarına erişemez.
Uygulamanız bir Account
kullanıyorsa kısıtlanmış bir profilde kullanıldığında kilitlenebilir veya beklenmedik şekilde davranabilir.
Uygulamanız hassas hesap bilgilerine bağlı olduğu için kısıtlanmış profillerin uygulamanızı tamamen kullanmasını engellemek istiyorsanız manifest'inizin <application>
öğesinde android:requiredAccountType
özelliğini belirtin.
Kısıtlanmış profillerin kendi hesaplarını oluşturamamasına rağmen uygulamanızı kullanmaya devam etmesine izin vermek istiyorsanız hesap gerektiren uygulama özelliklerinizi devre dışı bırakabilir veya kısıtlanmış profillerin birincil kullanıcı tarafından oluşturulan hesaplara erişmesine izin verebilirsiniz. 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'ı, layout_height
ve layout_width
için "wrap_content"
değerini "match_parent"
ile aynı olacak şekilde yanlış 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 kullanıcıların uygulamanız kısıtlanmış profil ortamında çalışırken uygulamanızda hangi tür içeriklerin kullanılabileceğini kontrol etmesine izin verebilirsiniz.
Kullanıcıların oluşturduğunuz kısıtlamaları kontrol etmesine olanak tanıyan kullanıcı arayüzü, sistemin Ayarlar uygulaması tarafından yönetilir. 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 aşağıdaki veri türlerinden birini tanımlar:
- 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) TYPE_MULTI_SELECT
, birbirini dışlamayan birden fazla seçeneğe (onay kutusu seçenekleri) sahip kısıtlamalar için kullanılır.
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 kısıtlamayı, her RestrictionEntry
obje için sağladığınız benzersiz anahtarla kaydeder. Kullanıcı, uygulamanızı açtığında mevcut kısıtlamaları
getApplicationRestrictions()
aranıyor.
Bu işlev, RestrictionEntry
nesneleriyle tanımladığınız her kısıtlamanın anahtar/değer çiftlerini içeren bir Bundle
döndürür.
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ınıza EXTRA_RESTRICTIONS_INTENT
ek sonucunu Bundle
sonucuna ekleyin. 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ıtlanmış profildeki hesapları destekleme
Birincil kullanıcıya eklenen tüm hesaplar, kısıtlanmış profil tarafından kullanılabilir ancak varsayılan olarak AccountManager
API'lerinden hesaplara 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ış bir profilden hesaba erişmek 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, yalnızca uygulamanızın gösterdiği bilgiler hassas kabul edilen kimliği tanımlayabilecek bilgileri (PII) içermiyorsa buna izin vermelisiniz. Sistem ayarları, birincil kullanıcıyı uygulamanızın hesaplarına kısıtlanmış profiller verdiğini bilgilendirir. Bu nedenle, kullanıcının hesap erişiminin uygulamanızın işlevi için önemli olduğu açıkça anlaşılmalıdır. Mümkünse birincil kullanıcı için uygulamanızda ne kadar hesap erişimine izin verildiğini tanımlayan yeterli kısıtlama kontrolleri de sunmalısınız.
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. Aksi takdirde, getUserRestrictions()
işlevini çağırarak yeni hesap oluşturmanın mümkün olup olmadığını sorgulayın ve sonuçta DISALLOW_MODIFY_ACCOUNTS
ekstrasını kontrol edin. Değer true
ise uygulamanızdaki hesap erişimi gerektiren tüm işlevleri 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, manifest dosyanızda yeni özellik belirtmemeniz gerekir.
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 (ve kullanıcıların
ş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
'teki 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, Android işletim sistemli tüm cihazlarda kullanılamayan bir donanım özelliği olduğundan manifest dosyanızda "android.hardware.bluetooth_le"
için bir <uses-feature>
öğesi belirtmeniz gerekir:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
Android'in Klasik Bluetooth API'lerini zaten biliyorsanız Bluetooth LE API'lerinin kullanımında bazı farklılıklar olduğunu unutmayın. En önemlisi, BluetoothAdapter
edinme, bağlı cihazların listesini alma ve bir cihazın durumunu kontrol etme gibi bazı üst düzey işlemler için kullanmanız gereken bir BluetoothManager
sınıfı olmasıdır. Ö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 türde çevre birimleri taramak istiyorsanız bunun yerine startLeScan()
işlevini çağırabilir ve uygulamanızın desteklediği GATT hizmetlerini belirten bir UUID
nesnesi dizisi ekleyebilirsiniz.
Not: Yalnızca Bluetooth LE cihazları veya önceki API'leri kullanarak Klasik Bluetooth cihazlarını tarayabilirsiniz. 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 Bluetooth kullanıcı izinlerini istemesi de gerekir. Daha fazla bilgi için Bluetooth Düşük Enerji API kılavuzunu inceleyin.
Yalnızca kablosuz ağ tarama modu
Android, kullanıcının konumunu belirlemeye çalışırken yakındaki erişim noktalarını tarayarak konumu belirlemeye yardımcı olmak için kablosuz bağlantıyı kullanabilir. Ancak kullanıcılar genellikle pili korumak için kablosuz bağlantıyı kapalı tutar. Bu da konum verilerinin daha az doğru olmasına neden olur. Android artık cihazın kablosuz bağlantısının, erişim noktasına bağlanmadan konum bilgisi elde etmek için erişim noktalarını taramasına olanak tanıyan ve böylece pil kullanımını büyük ölçüde azaltan yalnızca tarama modunu içeriyor.
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ştirmesini istiyor.
Kablosuz yapılandırması
Yeni WifiEnterpriseConfig
API'leri, kurumsal hizmetlere yönetilen cihazlar için kablosuz ağ yapılandırmasını otomatikleştirme olanağı tanır.
Gelen aramalar için hızlı yanıt
Android 4.0'tan beri "Hızlı yanıt" adlı bir özellik, kullanıcıların gelen aramaları yanıtlamak veya cihazın kilidini açmak zorunda kalmadan anında kısa mesajla yanıtlamasına olanak tanır.
Bu hızlı mesajlar şimdiye kadar her zaman varsayılan Mesajlar uygulaması tarafından ele alınıyordu. Artık her uygulama, ACTION_RESPOND_VIA_MESSAGE
için intent filtresi içeren bir Service
oluşturarak bu mesajları işleyebileceğini belirtebilir.
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, intent'i aldığında mesajı göndermeli ve hemen kendisini durdurmalıdır (uygulamanız bir etkinlik göstermemelidir).
Bu intent'i almak için SEND_RESPOND_VIA_MESSAGE
iznini belirtmeniz gerekir.
Multimedya
MediaExtractor ve MediaCodec iyileş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 temel aldığı çerçeve, parçalara ayrılmış MP4 dosyalarının ayrıştırılmasını desteklemek için güncellendi ancak MPD meta verilerini ayrıştırmak ve ayrı ayrı akışları MediaExtractor
'e iletmek yine uygulamanızın sorumluluğundadır.
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, DASH medyanızın PSSH meta verilerine erişebilmeniz için getPsshInfo()
yöntemi MediaExtractor
işlevine eklendi.
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ı, DRM sorunlarını medya oynatmadan ayırarak medya içeriğinizle dijital hak yönetimi (DRM) için modüler bir çözüm sunar. Örneğin, bu API ayırımı, Widevine medya biçimini kullanmak zorunda kalmadan Widevine şifrelenmiş içeriği oynatmanıza olanak tanır. Bu DRM çözümü, DASH Ortak Şifrelemesini de destekler. Böylece
Akış içeriğinizde çeşitli DRM şemaları kullanabilirsiniz.
Lisans edinme ve temel hazırlığı için sunucudan opak anahtar isteği mesajları almak ve anahtar yanıtı mesajlarını işlemek üzere MediaDrm
'ü kullanabilirsiniz. Sunucularla ağ iletişimini yönetmek uygulamanızın sorumluluğundadır; MediaDrm
sınıfı yalnızca mesajları oluşturma ve işleme olanağı sağlar.
MediaDrm
API'lerinin, içeriğinizi kodlamak ve kodlarını çözmek için MediaCodec
, şifrelenmiş içeriği işlemek için MediaCrypto
ve içeriğinizi ayıklamak ve kanallarını ayırmak için MediaExtractor
dahil olmak üzere Android 4.1'de (API düzeyi 16) kullanıma sunulan MediaCodec
API'leriyle birlikte kullanılması amaçlanmıştır.
Ö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), medya içeriğinin düşük düzeyde kodlanması ve kodunun çözülmesi için MediaCodec
sınıfını ekledi. Android 4.1'de video kodlarken medyaya bir ByteBuffer
dizisi sağlamanız gerekirdi ancak Android 4.3 artık kodlayıcının girişi olarak Surface
kullanmanıza olanak tanır. Örneğin, mevcut bir video dosyasından veya OpenGL ES'den oluşturulan kareleri kullanarak girişi kodlayabilirsiniz.
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
'a iletmek için eglSwapBuffers()
işlevini çağırın.
Kodlamayı başlatmak için MediaCodec
cihazında start()
kodunu arayın. İşlem tamamlandığında, kodlamayı sonlandırmak için signalEndOfInputStream()
'ü, Surface
'de release()
'u arayın.
Medya birleştirme
Yeni MediaMuxer
sınıfı, bir ses akışı ile bir video akışı arasında çoklu yayın yapılmasını sağlar. Bu API'ler, MediaExtractor
ile eşdeğer işlevi görür
sınıfının çoğullama (devre dışı bırakma) medyası için Android 4.2'de eklendi.
Desteklenen çıkış biçimleri MediaMuxer.OutputFormat
içinde tanımlanı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. Kodlama veya kod çözme işlemi yapmadan medya düzenlemesi yapmak için MediaMuxer
'ü MediaExtractor
ile birlikte de kullanabilirsiniz.
RemoteControlClient için oynatma ilerleme durumu ve sarma
Android 4.0'da (API düzeyi 14), kilit ekranında bulunan kontroller gibi uzaktan kumanda istemcilerinden medya oynatma denetimlerini etkinleştirmek için RemoteControlClient
eklendi. 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()
.
Ardından aşağıdaki iki yeni arayüzü uygulayın:
RemoteControlClient.OnGetPlaybackPositionListener
- Buna, uzaktan kumandanın kullanıcı arayüzündeki ilerlemeyi güncellemesi gerektiğinde medyanızın mevcut konumunu isteyen geri çağırma işlevi
onGetPlaybackPosition()
de dahildir. RemoteControlClient.OnPlaybackPositionUpdateListener
- Buna, kullanıcı uzaktan kumanda kullanıcı arayüzüyle oynatmayı kaydırdığında uygulamanıza medyanızın yeni zaman kodunu bildiren geri çağırma işlevi
onPlaybackPositionUpdate()
de dahildir.Oynatmanızı yeni konumla güncelledikten sonra, şunu belirtmek için
setPlaybackState()
öğesini çağırın: yeni oynatma durumu, konum ve hız
Bu arayüzler tanımlandıktan sonra sırasıyla setOnGetPlaybackPositionListener()
ve setPlaybackPositionUpdateListener()
çağrılarını yaparak RemoteControlClient
için ayarlayabilirsiniz.
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 efektlerin hızlandırılması
- Standart ö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 manifest dosyanızda <uses-feature> etiketi ve android:glEsVersion
özelliğiyle beyan ettiğinizden emin olun. Ö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.
Cihazın desteklenen OpenGL ES sürümünü çalışma zamanında nasıl kontrol edeceğiniz de dahil olmak üzere OpenGL ES'i kullanma hakkında daha fazla bilgi için OpenGL ES API kılavuzunu inceleyin.
Ç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), Bitmap
sınıfında mipmap desteği ekledi. Android, bir mipmap kaynağı sağladığınızda ve setHasMipMap()
'yi etkinleştirdiğinizde Bitmap
'daki mipmap resimlerini değiştirir. Artık Android 4.3'te, bir mipmap öğesi sağlayıp android:mipMap
özelliğini bir bitmap kaynak dosyasında ayarlayarak veya hasMipMap()
işlevini çağırarak BitmapDrawable
nesneleri için de mipmap'leri etkinleştirebilirsiniz.
Kullanıcı Arayüzü
Yer paylaşımlarını görüntüleme
Yeni ViewOverlay
sınıfı, View
öğesinin üzerine görsel içerik ekleyebileceğiniz ve düzen hiyerarşisini etkilemeyen şeffaf bir katman sağlar. getOverlay()
numaralı telefonu arayarak View
için ViewOverlay
alabilirsiniz. Yer paylaşımı, her zaman ana görünümüyle (oluşturulduğu görünüm) aynı boyuta ve konuma sahiptir. Bu sayede, ana görünümün önünde görünen ancak ana görünümün sınırlarını aşmayan içerikler ekleyebilirsiniz.
ViewOverlay
kullanmak, özellikle bir görünümü kapsayıcısının dışına kaydırma veya görünüm hiyerarşisini etkilemeden öğeleri ekranda taşıma gibi animasyonlar oluşturmak istediğinizde yararlıdı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 add(Drawable)
'yi çağırarak yer paylaşımına Drawable
nesneleri ekleyebilirsiniz. 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
. ViewGroupOverlay
sınıfı, ViewOverlay
sınıfının bir alt sınıfıdır ve add(View)
çağrısı yaparak View
nesneleri eklemenize de olanak tanır.
Not: Yer paylaşımına eklediğiniz tüm çekilebilir içerikler ve görünümler yalnızca görseldir. Odak veya giriş etkinlikleri alamaz.
Örneğin, aşağıdaki kodda görünümü ebeveyn görünümün yer paylaşımına yerleştirip bu görünümde bir kaydırma animasyonu gerçekleştirerek görünümün sağa kayması animasyonu oluşturulur:
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ırlar düzeni
Dokuz yama arka plan resmi içeren görünümler için artık görünümün "klip" sınırları yerine arka plan resminin "optik" sınırlarına göre komşu görünümlerle hizalanmaları gerektiğini belirtebilirsiniz.
Örneğin, 1. ve 2. şekillerde aynı düzen gösterilmektedir ancak 1. şekildeki sürümde kırpma sınırları (varsayılan davranış) kullanılırken 2. şekilde optik sınırlar kullanılmaktadır. Düğme ve fotoğraf çerçevesi için kullanılan dokuz yama resimleri kenarların etrafında dolgu içerdiğinden, kırpma sınırları kullanıldığında bunlar birbirine veya metne hizalanmış görünmez.
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ümde kırmızı çizgiler optik sınırları, mavi çizgiler kırpma sınırlarını ve pembe çizgiler kenar boşluklarını gösterir.

Ş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, alt görünümlerinin optik sınırlarını da dikkate alır ve kendi sınırlarını, içindeki görünümlerin optik sınırlarına göre uyarlar. Ancak, düzen öğeleri (ViewGroup
alt sınıfları) şu anda kendi arka planlarına uygulanan dokuz yamalı resimler için optik sınırları desteklemez.
View
, ViewGroup
veya bunların alt sınıfları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 Button
, Spinner
, EditText
ve diğerleri dahil olmak üzere optik sınırlarla güncellendi. Bu nedenle, uygulamanız Holo teması (Theme.Holo
, Theme.Holo.Light
vb.) uyguluyorsa android:layoutMode
özelliğini "opticalBounds"
olarak ayarlayarak hemen avantaj elde edebilirsiniz.
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 odaklanma dinleyicisi
Daha önce, görünümünüzün pencereye eklenip eklenmediğini veya odağının değişip değişmediğini dinlemek istiyorsanız sırasıyla onAttachedToWindow()
ve onDetachedFromWindow()
ya da onWindowFocusChanged()
'ı uygulamak için View
sınıfını geçersiz kılmanız gerekiyordu.
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()
.
Odaklanma etkinlikleri almak için ViewTreeObserver.OnWindowFocusChangeListener
'ü uygulayabilir ve addOnWindowFocusChangeListener()
ile bir görünümde ayarlayabilirsiniz.
TV'de aşırı 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. Aşırı tarama modu, FLAG_LAYOUT_IN_OVERSCAN
işaretiyle belirlenir. Bu işareti Theme_DeviceDefault_NoActionBar_Overscan
gibi platform temalarıyla veya özel bir temada windowOverscan
stilini etkinleştirerek etkinleştirebilirsiniz.
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ı otomatik döndürmeyi devre dışı bırakırsa normal yatay yönde kilitlenir ve dönmez. Bu durum dışında
"sensorLandscape"
ile aynı şekilde çalışır. "userPortrait"
- Kullanıcı otomatik döndürme özelliğini devre dışı bırakırsa normal dikey yönde kilitlenir ve dönmez. Bu durum dışında
"sensorPortrait"
ile aynı şekilde çalışır. "fullUser"
"fullSensor"
ile aynı şekilde çalışır ve dört yönde de döndürmeye izin verir. Kullanıcı otomatik döndürmeyi devre dışı bırakırsa ekran, 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. Üç 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, Google Analytics 4'te tarama yapmaksızın
göz önünde bulundurmalısınız. Yani mevcut TYPE_GYROSCOPE
ve TYPE_MAGNETIC_FIELD
sensörleri, sırasıyla cihazdaki jiroskop kayması ve sert demirden kaynaklanan tahmini önyargıyı hesaba katan sensör verileri sağlar. Bu sensörlerin yeni "kalibre edilmemiş" sürümleri ise ham sensör verilerini sağlar ve tahmini önyargı değerlerini ayrı olarak sunar. Bu sensörler, tahmini önyargıyı harici verilerle geliştirerek sensör verileri için kendi özel kalibrasyonunuzu sağlamanıza olanak tanır.
Bildirim Dinleyici
Android 4.3, uygulamanızın sistem tarafından yayınlandığı anda yeni bildirimler hakkında bilgi almasına olanak tanıyan yeni bir hizmet sınıfı NotificationListenerService
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şi Sağlayıcı'ya, kişi verilerindeki son değişiklikleri verimli bir şekilde sorgulamanıza olanak tanıyan yeni API'ler eklendi. Önceden, kişi verilerinde bir değişiklik olduğunda uygulamanız bilgilendirilebiliyordu ancak tam olarak neyin değiştiğini bilmiyordunuz ve değişikliği bulmak için tüm kişileri almanız ve ardından bu kişileri incelemeniz gerekiyordu.
Ekleme ve güncellemelerdeki değişiklikleri izlemek için artık yalnızca sağlayıcıyı son sorgulamanızdan bu yana değişen kişileri sorgulamak üzere seçiminize CONTACT_LAST_UPDATED_TIMESTAMP
parametresini ekleyebilirsiniz.
Hangi kişilerin silindiğini takip etmek için yeni ContactsContract.DeletedContacts
tablosunda silinen kişilerin günlüğü sağlanır (ancak silinen her kişi bu tabloda sınırlı bir süre boyunca tutulur). CONTACT_LAST_UPDATED_TIMESTAMP
'e benzer şekilde, sağlayıcıyı en son sorguladığınızdan bu yana hangi kişilerin silindiğini kontrol etmek için yeni seçim parametresi CONTACT_DELETED_TIMESTAMP
'ü kullanabilirsiniz. Tabloda, günlük tutulacak gün sayısını (milisaniye cinsinden) içeren DAYS_KEPT_MILLISECONDS
sabit de yer alır.
Ayrıca Contacts Provider, kullanıcı sistem ayarları menüsünden kişi depolama alanını temizlediğinde artık CONTACTS_DATABASE_CREATED
işlemini yayınlayarak Contacts Provider veritabanını etkili bir şekilde yeniden oluşturur. Bu istek, uygulamalara depolamış oldukları tüm iletişim bilgilerini bırakmaları ve yeni bir sorgu ile yeniden yüklemeleri gerektiğini bildirmek için kullanılır.
Kişilerdeki değişiklikleri kontrol etmek için bu API'leri kullanan örnek kod için SDK Örnekleri indirme dosyasında bulunan ApiDemos örneğine bakın.
Yerelleştirme
İki yönlü metin için iyileştirilmiş destek
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. Bu nedenle Android 4.3, herhangi bir bölümünü bozmadan ters yönde içerik içeren metni düzgün bir şekilde biçimlendirmenize yardımcı olan BidiFormatter
API'lerini ekler.
Örneğin, "15 Bay Street, Laurel, CA'yı mı kastettiniz?" gibi bir dize değişkeni içeren bir cümle oluşturmak istediğinizde genellikle yerelleştirilmiş bir dize kaynağını ve değişkeni String.format()
'ye iletirsiniz:
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 şu şekilde görünür:
האם התכוונת ל 15 Bay Street, Laurel, CA?
"15", "Bay Street"in solunda olduğu için bu yanlıştı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, Android Destek Kitaplığı aracılığıyla Android'in önceki sürümlerinde de BidiFormatter
sınıfı ve ilgili API'lerle kullanılabilir.
Erişilebilirlik Hizmetleri
Önemli etkinlikleri yönetme
AccessibilityService
artık onKeyEvent()
geri çağırma yöntemiyle önemli giriş etkinlikleri için geri çağırma alabilir. Bu sayede erişilebilirlik hizmetiniz, klavye gibi tuş tabanlı giriş cihazlarının girişini işleyebilir ve bu etkinlikleri daha önce yalnızca dokunma girişi veya cihazın yön tuşlarıyla mümkün olabilecek özel işlemlere dönüştürebilir.
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.
Erişilebilirlik hizmetiniz, kesilecek veya kopyalanacak metin seçimini belirtmek için yeni ACTION_SET_SELECTION
işlemini kullanabilir. Bu işlemle birlikte, ACTION_ARGUMENT_SELECTION_START_INT
ve ACTION_ARGUMENT_SELECTION_END_INT
ile seçim başlangıç ve bitiş konumunu da iletebilir.
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, Android Destek Kitaplığı'ndaki AccessibilityNodeInfoCompat
sınıfı aracılığıyla Android'in önceki sürümlerinde de kullanılabilir.
Erişilebilirlik özelliklerini bildirme
Android 4.3'ten itibaren, erişilebilirlik hizmetlerinin belirli erişilebilirlik özelliklerini kullanabilmesi için meta veri dosyasında erişilebilirlik özelliklerini beyan etmesi gerekir. Ö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ı, test otomasyonu için kullanıcı işlemlerini simüle etmenize olanak tanıyan API'ler sağlar. 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. Bunun işe yaraması için InstrumentationTestCase
dosyanızı adb shell
'ten çalıştırırken instrument
komutuyla birlikte -w
seçeneğini sağlamanız gerekir.
UiAutomation
örneğiyle, executeAndWaitForEvent()
'u çağırarak, uygulamanızı test etmek için rastgele etkinlikler yürütebilirsiniz. Bu sırada executeAndWaitForEvent()
'a gerçekleştirilecek bir Runnable
, işlem için bir zaman aşımı süresi ve UiAutomation.AccessibilityEventFilter
arayüzünün bir uygulamasını iletebilirsiniz. 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ını oluşturun ve setOnAccessibilityEventListener()
'a iletin.
Ardından, dinleyici arayüzünüz her etkinlik gerçekleştiğinde onAccessibilityEvent()
çağrısı alır ve etkinliği açıklayan bir AccessibilityEvent
nesnesi alır.
UiAutomation
API'lerinin, uiautomator gibi kullanıcı arayüzü test araçlarının geliştirilmesini teşvik etmek için çok düşük düzeyde sunduğu başka işlemler de vardır. Ö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 üreterek
takip edilebilir kod bölümlerinin bulunması gibi, sistem izleme günlükleri 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
tesisinde Android Key Store adlı özel bir Java Güvenlik Sağlayıcısı sunuyor. Bu sağlayıcı, yalnızca uygulamanız tarafından görülebilen ve kullanılabilen özel anahtarlar oluşturmanıza ve kaydetmenize olanak tanır. Android Key Store'u yüklemek için "AndroidKeyStore"
öğesini KeyStore.getInstance()
öğesine iletin.
Uygulamanızın özel kimlik bilgilerini Android Key Store'da yönetmek için yeni bir anahtar oluşturun:
KeyPairGeneratorSpec
ile KeyPairGenerator
. Öncelikle getInstance()
'u çağırarak KeyPairGenerator
örneği alın. Ardından initialize()
'ü çağırın ve KeyPairGeneratorSpec.Builder
kullanarak elde edebileceğiniz bir KeyPairGeneratorSpec
örneğini iletin.
Son olarak, generateKeyPair()
numaralı telefonu arayarak KeyPair
kartınızı alın.
Donanım kimlik bilgisi depolama
Android artık KeyChain
kimlik bilgileriniz için donanım destekli depolama alanını da destekliyor. Bu sayede anahtarlar ayıklanamayacak ve daha fazla güvenlik sağlanacak. Yani anahtarlar donanım destekli bir anahtar deposunda (Secure Element, TPM veya TrustZone) bulunduktan sonra kriptografik işlemler için kullanılabilir ancak özel anahtar materyali dışa aktarılamaz. OS çekirdeği bile bu önemli materyale erişemez. Android destekli tüm cihazlar donanım üzerinde depolama alanını desteklemese de KeyChain.IsBoundKeyAlgorithm()
çağrısını yaparak donanım destekli depolama alanının kullanılabilir olup olmadığını çalışma zamanında kontrol edebilirsiniz.
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 bir 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ın yerini alacak şekilde davrandığını ve yalnızca üçüncü taraf ana ekran uygulamalarını destekleyen cihazlara yükleneceğini belirtir.
Ö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
intent'ini almak için gereklidir.
Android 4.3'teki tüm API değişikliklerinin ayrıntılı görünümü için API Farklılıkları Raporu'na bakın.