API Düzeyi: 16
Android 4.1 (JELLY_BEAN
)
platformun bir ilerlemesidir. Bu, aynı zamanda
performans ve gelişmiş kullanıcı deneyimi. Kullanıcılar ve uygulama için yeni özellikler ekler
birlikte çalışır. Bu belgede, projenin en önemli ve en önemli
uygulama geliştiriciler için
yeni, kullanışlı API'ler.
Bir uygulama geliştirici olarak Android 4.1'i SDK Manager'ı sistem görüntüsü olarak uygulamanızı geliştirebileceğiniz bir SDK platformunda çalıştırmanız gerekir. Şunları yapmalısınız: sisteminizi oluşturmak ve test etmek için en kısa sürede sistem görüntüsünü ve Android 4.1'deki Android 4.1'deki
Uygulamanızı Android 4.1 çalıştıran cihazlar için daha iyi optimize etmek üzere
targetSdkVersion
özelliğini şu şekilde ayarlamalısınız:
"16"
, Android 4.1 sistem görüntüsüne yükleyin,
test edip bu değişikliği içeren bir güncelleme yayınlayın.
Siz
API'leri Android 4.1'de kullanabilir ve
çalıştırmadan önce sistem API düzeyini kontrol eden kodunuza koşullar
minSdkVersion
cihazınızın desteklemediği API'ler.
Şu konu hakkında daha fazla bilgi edinmek için:
geriye dönük uyumluluğu koruma için Geriye Dönük Uyumlu Oluşturma başlıklı makaleyi okuyun
Kullanıcı arayüzleri.
API düzeylerinin işleyiş şekli hakkında daha fazla bilgiyi API nedir? Düzey mi?
Uygulama Bileşenleri
Yalıtılmış hizmetler
android:isolatedProcess="true"
değerini
<service>
etiketi, Service
kampanyanız
ve kendisine ait hiçbir izni olmayan, kendine ait izole User-ID işlemine sahip olur.
Bellek yönetimi
TRIM_MEMORY_RUNNING_LOW
ve TRIM_MEMORY_RUNNING_CRITICAL
gibi yeni ComponentCallbacks2
sabit değerleri ön plan sağlar
daha fazla bilgi işleme
sistem tarafından onLowMemory()
çağrılmadan önceki bellek durumu.
Yeni getMyMemoryState(ActivityManager.RunningAppProcessInfo)
yöntemi sayesinde:
genel bellek durumunu alma.
İçerik sağlayıcılar
Yeni bir yöntem olan acquireUnstableContentProviderClient()
, "kararsız" olabilecek bir ContentProviderClient
aracına erişmenize olanak tanır Böylece uygulamanız, her cihazda
içerik sağlayıcı da yapıyor. Bu, içerik sağlayıcılarla ayrı bir sayfada etkileşim kurduğunuzda ve
uygulamasını indirin.
Animasyonlu Duvar Kağıtları
Yardımcı olabilmeniz için doğrudan animasyonlu duvar kağıdı önizleme etkinliğini başlatan yeni intent protokolü Kullanıcılar, çıkmaya zorlamadan animasyonlu duvar kağıdınızı kolayca seçer uygulamanıza ve Ana Sayfa duvar kağıdı seçicisinde gezinin.
Animasyonlu duvar kağıdı seçiciyi başlatmak için startActivity()
uygulamasını kullanarak Intent
ile çağrı yapın.
ACTION_CHANGE_LIVE_WALLPAPER
ve bir ekstra
animasyonlu duvar kağıdınızı ComponentName
EXTRA_LIVE_WALLPAPER_COMPONENT
içinde bir dize olarak belirten bir değer belirtir.
Uygulama yığınında gezinme
Android 4.1, yukarı gezinme için uygun tasarım kalıplarının uygulanmasını çok daha kolay hale getirir.
Tek yapmanız gereken şuradaki her bir <activity>
öğesine android:parentActivityName
eklemektir:
manifest dosyanız. Kullanıcı bir işlem gerçekleştirdiğinde sistem bu bilgiyi uygun etkinliği açmak için
işlem çubuğunda Yukarı düğmesine basar (aynı zamanda geçerli etkinliği sonlandırır). Örneğin
her etkinlik için android:parentActivityName
değerini bildirirseniz tıklamayı işlemek için onOptionsItemSelected()
yöntemine ihtiyacınız yoktur
etkinlik simgesinde etkinlikleri görüntüleyebilirsiniz. Sistem artık bu etkinliği işler ve
uygun etkinliği oluşturur.
Bu, özellikle kullanıcının uygulamanızın etkinliklerinden birini girdiği senaryolar için faydalıdır
"ayrıntılı inceleme" bir amaç (ör. bir bildirimden veya
farklı uygulama (Uygulamalar Arasında Gezinme hakkındaki tasarım kılavuzunda açıklandığı gibi). Zaman
Kullanıcı, etkinliğinize bu şekilde girerse uygulamanız doğal olarak arka arkaya
Kullanıcı yukarı doğru gezindikçe devam ettirilebilen etkinlikler. Ancak etkinlikleriniz için android:parentActivityName
özelliğini sağladığınızda sistem,
uygulamanızın halihazırda üst etkinlik yığını ve
tüm üst etkinlikleri içeren sentetik bir arka yığını ifade eder.
Not: Kullanıcı, uygulamanızda derin bir etkinlik girdiğinde ve uygulamanız için yeni bir görev oluşturursa sistem, üst etkinlik yığınını ekler ve üzerine düşünün. Dolayısıyla, Geri düğmesine basıldığında üst öğe yığınında da geri gider yardımcı olur.
Sistem, uygulamanız için sentetik bir arka yığını oluşturduğunda her üst etkinliğin yeni bir örneğini oluşturmak amacıyla temel bir Intent
oluşturur. İnsanlar için
kullanıcının doğal bir şekilde gezinmesini sağlamak üzere beklenmedik bir şekilde kaydedilmiş
-
tavsiyelerde bulunacağız. Üst etkinliklerden herhangi biri normalde
bağlamını anlamaksa o bağlam bilgisi eksik olur.
kullanıcı
grup içinde geri gider. Örneğin, kullanıcı bir albümü görüntülüyorsa
bir müzik uygulamasındayken, yukarı gitmek onları seçili bir öğedeki tüm albümlerin listelendiği bir etkinliğe götürebilir
müzik türü. Bu durumda, yığının oluşturulması gerekiyorsa üst öğeyi
uygun listeyi şu şekilde görüntüleyebilmesi için, geçerli albümün ait olduğu türe ait etkinliktir:
gelip gelmediğini gösterir. Bu tür bilgileri sentetik bir ebeveyne iletmek
etkinliği için onPrepareNavigateUpTaskStack()
yöntemini geçersiz kılmanız gerekir. Bu
size, aşağıdaki işlemler için sistemin oluşturduğu bir TaskStackBuilder
nesnesini sağlar:
ve üst aktiviteleri sentezleyelim. TaskStackBuilder
, sistemin her bir üst etkinliği oluşturmak için kullandığı Intent
nesneyi içerir.
onPrepareNavigateUpTaskStack()
uygulanması durumunda, uygun Intent
öğesini
uygun bağlamı ve görüntüyü belirlemek için ebeveyn etkinliğinin kullanabileceği ekstra veriler eklemek
emin olun.
Sistem TaskStackBuilder
öğesini oluşturduğunda, mantıksal süreçlerinde üst etkinlikleri oluşturmak için kullanılan Intent
nesneleri ekler.
en üstünden başlayarak sıraya sokmaktır. Dolayısıyla, dahili diziye eklenen son Intent
, geçerli etkinliğin doğrudan üst öğesidir. Eğer
etkinliğin üst öğesi için Intent
değerini değiştirmek istiyorsanız, önce
getIntentCount()
ile dizinin uzunluğu ve bunu iletir
editIntentAt()
değerine ayarlayın.
Uygulama yapınız daha karmaşıksa kullanabileceğiniz başka API'ler de vardır. Yukarı gezinme menüsü ve üst kısımdaki sentetik arka yığını tamamen özelleştirebilirsiniz. Size ek kontrol seçenekleri şunlardır:
onNavigateUp()
- Kullanıcı Yukarı düğmesine bastığında özel bir işlem gerçekleştirmek için bunu geçersiz kılın.
navigateUpTo(Intent)
- Geçerli etkinliği bitirmek ve
sağlanan
Intent
. Etkinlik arka yığında varsa, ancak en yakın ebeveyn değilse, o anki etkinlikle amacıyla belirtilen etkinliklerin de tamamlandığına dikkat edin. getParentActivityIntent()
- Mantıksal başlangıcı başlatacak
Intent
için bunu çağırın üst öğesi olabilir. shouldUpRecreateTask(Intent)
- Gezinmek ve sentetik geri yığını oluşturulması gerekip gerekmediğini sorgulamak için bu komutu çalıştırın yukarıya doğru. Sentetik bir yığın oluşturulması gerekiyorsa true (doğru), uygun yığın oluşturulması gerekiyorsa false (yanlış) değerini döndürür zaten var.
finishAffinity()
- Mevcut etkinliği ve tüm ebeveyn etkinliklerini aynı şekilde tamamlamak için bu parametreyi çağırın
mevcut aktiviteyle bağlantılı
göreve benzetimidir.
Örneğin,
onNavigateUp()
şu işlemi gerçekleştirdiğinizde bu yöntemi çağırmalısınız: Yukarı gezinme ile birlikte sentetik bir arka yığın oluşturacaktır. onCreateNavigateUpTaskStack
- Yapay görev yığınının nasıl oluşturulduğunu tam olarak kontrol etmeniz gerekiyorsa bunu geçersiz kılın. Arka yığınınızın amaçlarına sadece biraz daha fazla veri eklemek istiyorsanız bunun yerine
onPrepareNavigateUpTaskStack()
öğesini geçersiz kılmanız gerekir.
Bununla birlikte, çoğu uygulamanın bu API'leri kullanması veya onPrepareNavigateUpTaskStack()
öğesini uygulaması gerekmez ancak yalnızca aşağıdakileri yaparak doğru davranışı sergileyebilirler:
her bir <activity>
öğesine android:parentActivityName
ekleyerek.
Multimedya
Medya codec'leri
MediaCodec
sınıfı, kodlama için alt düzey medya codec'lerine erişim sağlar.
ve medyanızın kodunu çözmeniz gerekir. Medyayı kodlamak için createEncoderByType()
yöntemini veya medya kodunu çözmek için createDecoderByType()
yöntemini çağırarak bir MediaCodec
örneği oluşturabilirsiniz. Bunların her biri
yöntemleri, kodlamak veya kodunu çözmek istediğiniz medya türü için bir MIME türü alır (ör. "video/3gpp"
veya "audio/vorbis"
).
Bir MediaCodec
örneği oluşturulduktan sonra medya biçimi veyaconfigure()
içeriğin şifrelenip şifrelenmediğini kontrol edin.
İster medyanızı ister kodlama ister kodunu çözün, işlemin geri kalanı siz medyayı tıkladıktan sonra aynıdır.
MediaCodec
oluşturun. İlk olarak ByteBuffer
giriş dizisini almak için getInputBuffers()
yöntemini çağırın
nesneleri ve getOutputBuffers()
çıktısını ByteBuffer
nesnelerinden oluşan bir dizi almak için kullanır.
Kodlamaya veya kodu çözmeye hazır olduğunuzda kaynağınızdaki feed'i yayınlamak için kullanmanız gereken ByteBuffer
öğesinin dizin konumunu (giriş arabellekleri dizisinden) almak için dequeueInputBuffer()
çağrısı yapın
medya ByteBuffer
bölümünü kaynak medyanızla doldurduktan sonra sahipliği bırakın
arabelleğin süresi queueInputBuffer()
olarak çağrılır.
Benzer şekilde, çıkış arabelleğinde ByteBuffer
öğesinin dizin konumunu almak için dequeueOutputBuffer()
çağrısı yapın.
bir web sitesi oluşturabilirsiniz. ByteBuffer
öğesindeki çıkışı okuduktan sonra,
releaseOutputBuffer()
numaralı telefonu arayarak sahipliği iptal edebilirsiniz.
Codec'lerdeki şifrelenmiş medya verilerini şu çağrıyla birlikte çağırarak işleyebilirsiniz: queueSecureInputBuffer()
yerine MediaCrypto
API'leri kullanmasını gerektirir. queueInputBuffer()
.
codec'lerin nasıl kullanılacağı hakkında daha fazla bilgi için MediaCodec
dokümanlarına bakın.
Ses kaydı geldiğinde ses kaydet
Yeni startRecording()
yöntemi izin verir
bir MediaSyncEvent
ile tanımlanan işarete göre ses kaydını başlatmanızı sağlar.
MediaSyncEvent
, bir ses oturumu belirtiyor
(ör. MediaPlayer
tarafından tanımlanan) ve tamamlandığında,
ses kaydediciye dokunun. Örneğin, bu işlevi
kayıt oturumunun ve kaydın başlangıcını belirten bir ses tonu çal
otomatik olarak başlar, böylece üslubu ve başlangıcı manuel olarak senkronize etmeniz gerekmez
ne demektir?
Zamanlanmış metin parçaları
MediaPlayer
artık hem bant içi hem de bant dışı metin parçalarını işliyor.
Bant içi metin parçaları, MP4 veya 3GPP medya kaynağında metin parçası olarak gelir. Bant dışı metin
parça, addTimedTextSource()
yöntemi kullanılarak harici metin kaynağı olarak eklenebilir. Tüm harici metinlerden sonra
izleme kaynakları eklendiğinde, almak için getTrackInfo()
çağrılmalıdır
Bir veri kaynağındaki mevcut tüm parçaların yenilenmiş listesi.
Parçayı MediaPlayer
ile kullanmak üzere ayarlamak için:
dizini kullanarak selectTrack()
yöntemini çağırın
konumuna getirin.
Metin parçası çalınmaya hazır olduğunda bilgilendirilmek için
MediaPlayer.OnTimedTextListener
arayüzü ve kartı
setOnTimedTextListener()
olarak ayarlanır.
Ses efektleri
AudioEffect
sınıfı artık ek sesleri destekliyor
ses kaydederken kullanılan ön işleme türleri:
AcousticEchoCanceler
özellikli Akustik Yankı Önleyici (AEC) Yakalanan ses sinyalinden uzak taraftan alınan sinyalin katkısını kaldırır.AutomaticGainControl
ile Otomatik Kazanç Kontrolü (AGC) yakalanan sinyalin çıkışını otomatik olarak normalleştirir.NoiseSuppressor
özellikli Gürültü Önleyici (NS) yakalanan sinyalden arka plan gürültüsünü kaldırır.
Bu ön işlemci efektlerini, AudioEffect
özelliklerinden birini kullanarak AudioRecord
ile yakalanan sese uygulayabilirsiniz.
alt sınıfları içerir.
Not: Tüm cihazların bu özellikleri desteklediği garanti edilmez
bu nedenle her zaman önce ilgiliisAvailable()
ses efekti sınıfı.
Boşluksuz oynatma
Artık iki ayrı video arasında kesintisiz oynatma gerçekleştirebilirsiniz.
MediaPlayer
nesne. İlk MediaPlayer
işleminiz bitmeden önce herhangi bir zamanda,
setNextMediaPlayer()
ve Android'i ara
ilki durduğu anda ikinci oyuncuyu başlatmaya çalışır.
Kamera
Otomatik odaklama hareketi
Yeni arayüz Camera.AutoFocusMoveCallback
, dinlemenize olanak tanır
otomatik odaklama hareketinde değişiklik yapabilirsiniz. Arayüzünüzü setAutoFocusMoveCallback()
ile kaydettirebilirsiniz. Ardından kamera,
sürekli otomatik odaklama modunda (FOCUS_MODE_CONTINUOUS_VIDEO
veya
FOCUS_MODE_CONTINUOUS_PICTURE
) bir çağrı alacaksınız
alıcı: onAutoFocusMoving()
,
otomatik odağın hareket etmeye başlayıp başlamadığını veya durup durmadığını gösterir.
Kamera sesleri
MediaActionSound
sınıfı, basit bir API seti sağlar
kamera veya diğer medya eylemlerinin çıkardığı standart sesler. Oynamak için bu API'leri
ve video kamera oluştururken doğru sesi duymanızı sağlar.
Ses çalmak için bir MediaActionSound
nesnesini örneklendirmek için
istenilen sesi önceden yüklemek için load()
, ardından
uygun bir zamanda, play()
numaralı telefonu arayın.
Bağlantı
Android Beam
Android BeamTM artık Bluetooth üzerinden büyük yük aktarımlarını desteklemektedir. Verileri tanımladığınızda
yeni setBeamPushUris()
ile aktarma
yöntemi veya yeni geri çağırma arayüzü NfcAdapter.CreateBeamUrisCallback
, Android
aktarmasını sağlamak için
daha yüksek aktarım hızları elde edebilirsiniz. Bu, özellikle de resim ve renk gibi büyük yük dosyaları
ses dosyalarına sahip olabilir ve cihazlar arasında görünür bir eşleme olmasını gerektirmez. Herhangi bir ek çalışma gerekmez.
uygulamanızdan Bluetooth üzerinden aktarımdan yararlanabilir.
setBeamPushUris()
yöntemi,
Uygulamanızdan aktarmak istediğiniz verileri belirten Uri
nesne.
Alternatif olarak, NfcAdapter.CreateBeamUrisCallback
setBeamPushUrisCallback()
numaralı telefonu arayarak etkinliğiniz için belirtebilirsiniz.
geri çağırma arayüzünde, createBeamUris()
kullanıcı, paylaşım sırasında paylaşılacak URI'ları tanımlayabilmeniz için Android Beam ile bir paylaşım yürütür.
Paylaşılacak URI'lar içindeki kullanıcı bağlamına göre değişebiliyorsa bu yararlı
etkinliğinde bulunurken, setBeamPushUris()
çağrısı
Paylaşılacak URI'lar değişmediğinde kullanışlıdır ve bunları önceden güvenli bir şekilde tanımlayabilirsiniz.
Ağ hizmeti keşfi
Android 4.1, aşağıdakileri yapmanıza olanak tanıyan çoklu yayın DNS tabanlı hizmet keşfi için destek ekler. Kablosuz bağlantı üzerinden eşler tarafından sunulan hizmetleri (ör. mobil cihazlar, yerel ağda kayıtlı yazıcılar, kameralar, medya oynatıcılar ve diğerleri.
Yeni android.net.nsd
paketi şunları yapmanıza olanak tanıyan yeni API'leri içerir:
hizmetlerinizi yerel ağda yayınlayabilir, ağdaki yerel cihazları keşfedebilir ve
nasıl bağlanacağını öğreneceksiniz.
Hizmetinizi kaydetmek için önce bir NsdServiceInfo
oluşturmanız gerekir
nesnesini tanımlayın ve hizmetinizin çeşitli özelliklerini,
setServiceName()
,
setServiceType()
ve
setPort()
.
Ardından NsdManager.RegistrationListener
registerService()
adlı kullanıcıya iletebilir
NsdServiceInfo
cihazınızla.
Ağdaki hizmetleri keşfetmek için NsdManager.DiscoveryListener
öğesini uygulayın ve discoverServices()
adlı kullanıcıya iletin.
NsdManager.DiscoveryListener
cihazınız hizmetlerle ilgili geri arama aldığında
telefon ederek hizmeti çözmeniz gerekiyor
resolveService()
,
elde edilen NsdManager.ResolveListener
hakkında bilgi içeren NsdServiceInfo
nesnesi
bağlantıyı başlatmanıza olanak tanır.
Kablosuz P2P hizmeti keşfi
Wi-Fi P2P API'leri, şurada ilişkilendirme öncesi hizmet keşfini desteklemek üzere Android 4.1'de geliştirilmiştir:
WifiP2pManager
. Bu, yakınınızdaki yerleri keşfetmenize ve filtrelemenize olanak tanır
Ağ Hizmeti sırasında, bir ağa bağlanmadan önce Kablosuz P2P kullanan hizmetlere göre cihazlar
Discovery, mevcut bir bağlı ağdaki (ör. yerel kablosuz ağ) bir hizmeti keşfetmenize olanak tanır
ağ).
Diğer cihazların keşfedebilmesi için uygulamanızı kablosuz bağlantı üzerinden bir hizmet olarak yayınlamak
ve ona bağlanmak için addLocalService()
numaralı telefonu arayarak
Uygulama hizmetlerinizi açıklayan WifiP2pServiceInfo
nesnesi.
Kablosuz ağ üzerinden yakındaki cihazları keşfetmeyi başlatmak için öncelikle
iletişim kurmanın yollarını inceleyelim. Bonjour'u kullanmak için önce
setDnsSdResponseListeners()
hem WifiP2pManager.DnsSdServiceResponseListener
hem de WifiP2pManager.DnsSdTxtRecordListener
alır. Upnp'yi kullanmak için şu numarayı arayın:
setUpnpServiceResponseListener()
WifiP2pManager.UpnpServiceResponseListener
alır.
Yerel cihazlarda hizmetleri keşfetmeye başlayabilmeniz için öncelikle addServiceRequest()
hizmetini de aramanız gerekir. Bu yönteme ilettiğiniz WifiP2pManager.ActionListener
, bir
başarılı bir şekilde geri aranmanızın ardından, discoverServices()
numaralı telefonu arayarak yerel cihazlarda hizmetleri keşfetmeye başlayabilirsiniz.
Yerel hizmetler keşfedildiğinde size şu konuda geri aranacak: WifiP2pManager.DnsSdServiceResponseListener
veya WifiP2pManager.UpnpServiceResponseListener
Bonjour veya Upnp’yi kullanmak üzere kayıtlıdır. Her iki durumda da alınan geri çağırma,
Eş cihazı temsil eden WifiP2pDevice
nesnesi.
Ağ kullanımı
Yeni isActiveNetworkMetered()
yöntemi şunları yapmanıza olanak tanır:
cihazın şu anda sayaçlı bir ağa bağlı olup olmadığını kontrol edin. Bu durumu kontrol ederek
ağ işlemlerini gerçekleştirmeden önce, kullanıcılarınızın para harcamasına ve para kazanmasına neden olabilecek veri kullanımını yönetmenize yardımcı olabilirsiniz
işlemleri şimdi mi yoksa daha sonra mı gerçekleştireceğinizle ilgili (örneğin, müşterinin
cihaz kablosuz ağa bağlandığından).
Erişilebilirlik
Erişilebilirlik hizmeti API'leri
Erişilebilirlik hizmeti API'lerinin erişimi Android 4.1'de önemli ölçüde artmıştır. Şimdi
Karmaşık hareketler gibi daha fazla giriş etkinliğini izleyen ve yanıt veren hizmetler oluşturmanıza olanak tanır.
onGesture()
ve diğer kullanıcılar kullanılıyor
AccessibilityEvent
, AccessibilityNodeInfo
ve AccessibilityRecord
sınıflarına yapılan eklemeler aracılığıyla giriş etkinlikleri.
Erişilebilirlik hizmetleri, kullanıcı adına tıklama,
performAction
ve setMovementGranularities
kullanarak metinleri kaydırıyor ve metinde adım atıyor. performGlobalAction()
yöntemi
ayrıca hizmetlerin Geri, Ana Sayfa ve Son Kullanılanlar gibi işlemleri gerçekleştirmesine de izin verir
Uygulamalar ve Bildirimler'e dokunun.
Özelleştirilebilir uygulamada gezinme
Artık Android uygulaması oluştururken odaklanılabilir öğeleri bularak gezinme şemalarını özelleştirebilirsiniz
findFocus()
ve focusSearch()
kullanan öğeler ve giriş widget'ları ile odağı ayarlayın
setAccessibilityFocused()
kullanılıyor.
Daha erişilebilir widget'lar
Yeni android.view.accessibility.AccessibilityNodeProvider
sınıfıyla yapabilecekleriniz:
Erişilebilirlik hizmetlerine karmaşık özel görünümler sunarak
hale getirebileceğimizi düşünüyoruz. android.view.accessibility.AccessibilityNodeProvider
, bir kullanıcıya izin verir
takvim tablosu gibi gelişmiş içeriğe sahip bir widget'a kolayca erişebilirsiniz.
widget'ın düzen yapısından tamamen ayrı olan erişilebilirlik hizmetlerini kullanabilirsiniz. Bu anlamsal
Yapı, erişilebilirlik hizmetlerinin Google Apps'ı kullanan kullanıcılar için daha kullanışlı bir etkileşim modeli
yardımcı olabilir.
Kopyala ve Yapıştır
Amaçlarla kopyalama ve yapıştırma
Artık setClipData()
yöntemini kullanarak bir ClipData
nesnesini Intent
ile ilişkilendirebilirsiniz.
Bu, özellikle birden fazla content:
URI'sını bir başkasına aktarmak için amaç kullanılırken yararlı olur
birden fazla doküman paylaşma gibi. Sağlanan content:
URI'ları
bu şekilde okuma veya yazma erişimi sunmak için Intent'in işaretlediği
amaçtaki birden çok URI'ya erişmesini sağlar. Bir ACTION_SEND
veya ACTION_SEND_MULTIPLE
niyeti başlatılırken amaçta sağlanan URI'lar artık
AlıcınınClipData
bu kullanıcıların erişim iznidir.
HTML ve dize stilleri için destek
ClipData
sınıfı artık stillendirilmiş metni (HTML veya
Android'in tarzı
dizeler) girin. newHtmlText()
ile ClipData
öğesine HTML stilli metin ekleyebilirsiniz.
Renderscript
Renderscript hesaplama işlevi, aşağıdaki özelliklerle geliştirildi:
- Tek komut dosyası içinde birden fazla çekirdek desteği.
- Yeni bir komut dosyası API'sinde işlemden filtrelenmiş örnekleyicilerle tahsisden okuma desteği
rsSample
#pragma
ürününde farklı seviyelerde FP hassasiyeti desteği.- Bir Compute komut dosyasındaki RS nesnelerindeki ek bilgileri sorgulama desteği.
- Performansta çok sayıda iyileştirme.
İşletmenizin gerektirdiği kayan nokta hassasiyetini tanımlamak için yeni pragmalar da mevcuttur. Renderscript'i hesaplama. Bu, hızlı vektör hesaplama işlemleri gibi NEON benzeri işlemleri etkinleştirmenize olanak tanır tam IEEE 754-2008 standardı ile mümkün olmayan CPU yolunda.
Not: Deneysel Renderscript grafik motoru artık desteği sonlandırıldı.
Animasyon
Etkinlik başlatma animasyonları
Artık bir Activity
yakınlaştırma animasyonlarını veya
oluşturabilirsiniz. İstediğiniz animasyonu belirtmek için ActivityOptions
API'lerini kullanarak yapabileceğiniz bir Bundle
oluşturun
ardından
startActivity()
gibi bir etkinlik başlatan yöntemler.
ActivityOptions
sınıfı, her biri için farklı bir yöntem içerir.
etkinliğiniz açılırken göstermek isteyebileceğiniz animasyon türünü görebilirsiniz:
makeScaleUpAnimation()
- Etkinlik penceresini belirtilen bir başlangıç ayarından büyüten bir animasyon oluşturur ekranda konumu ve başlangıç boyutu. Örneğin, Android 4.1 bir uygulamayı açarken bunu kullanır.
makeThumbnailScaleUpAnimation()
- Etkinlik penceresini belirtilen bir öğeden başlayarak ölçeklendiren bir animasyon oluşturur ve sağlanan bir küçük resim. Örneğin, Son Uygulamalar penceresi Android 4.1 bir uygulamaya dönerken bunu kullanır.
makeCustomAnimation()
- Kendi kaynaklarınız tarafından tanımlanan bir animasyon oluşturur: hem de durdurulan etkinlik için bir açılış sayfası.
Zaman animatörü
Yeni TimeAnimator
, basit bir geri çağırma sağlar
bildirimde bulunan TimeAnimator.TimeListener
mekanizmasının
her karesine eklemeniz gerekiyor. Bu Animatörde süre, interpolasyon veya nesne değer ayarı yapılmaz. Dinleyicinin geri araması, her kare için aşağıdakileri içeren bilgileri alır:
toplam geçen süre ve önceki animasyon karesinden bu yana geçen süre.
Kullanıcı Arayüzü
Bildirimler
Android 4.1'de daha büyük içerik bölgeleri, büyük resim önizlemeleri, birden çok işlem düğmesi ve yapılandırılabilir öncelik.
Bildirim stilleri
Yeni setStyle()
yöntemi, aşağıdakileri belirtmenize olanak tanır:
Bildiriminiz için daha geniş bir içerik bölgesi sunan üç yeni stilden birini. Alıcı:
geniş içerik bölgenizin stilini belirtin, setStyle()
öğesine şu nesnelerden birini iletin:
Notification.BigPictureStyle
- Büyük resim eki içeren bildirimler için.
Notification.BigTextStyle
- Tek bir e-posta gibi çok fazla metin içeren bildirimler için.
Notification.InboxStyle
- Birden fazla e-postadaki snippet'ler gibi, dizelerin bir listesini içeren bildirimler için.
Bildirim işlemleri
Artık ekranın alt kısmında görünen iki adede kadar işlem düğmesi destekleniyor mesajı gösterilir.
İşlem düğmesi eklemek için addAction()
komutunu çağırın. Bu yöntem üç bağımsız değişken alır: simge için çekilebilir bir kaynak,
düğme metni ve işlemi tanımlayan bir PendingIntent
kararlaştırıldı.
Öncelikler
Artık bildiriminizin
bildirimin listedeki sırasını
setPriority()
ile öncelik. Siz
PRIORITY_*
sabit değerleriyle tanımlanan beş farklı öncelik düzeyinden birini geçebilir
Notification
sınıfında. Varsayılan değer PRIORITY_DEFAULT
, iki seviye daha yüksek ve iki seviye daha düşük.
Yüksek öncelikli bildirimler, kullanıcıların genellikle hızlı bir şekilde yanıt vermek istedikleri şeylerdir. yeni bir anlık mesaj, kısa mesaj veya yaklaşan etkinlik hatırlatıcısı gibi. Düşük öncelikli Bildirimler, süresi dolmuş takvim etkinlikleri veya uygulama tanıtımları gibi bilgilerdir.
Sistem kullanıcı arayüzü kontrolleri
Android 4.0 (Ice Cream Sandwich), sistem arayüzünün görünürlüğünü kontrol etmek için yeni işaretler ekledi
(örneğin, sistem çubuğu görünümünü karartmak veya mobil cihazlarda tamamen kaybolmasını sağlamak)
Android 4.1, sistemin görünümünü daha iyi kontrol etmenizi sağlayan birkaç işaret daha eklemiştir.
setSystemUiVisibility()
işlevini çağırarak kullanıcı arayüzü öğeleri ve bunlarla ilgili etkinlik düzeniniz
ve aşağıdaki işaretleri iletmek:
SYSTEM_UI_FLAG_FULLSCREEN
- Kritik olmayan sistem kullanıcı arayüzünü (ör. durum çubuğu) gizler.
Etkinliğiniz, yer paylaşımı modunda işlem çubuğunu kullanıyorsa (
android:windowActionBarOverlay
etkinleştirildiğinde) bu işaret, işlem çubuğunu da gizler ve Bu nedenle, hem saklayıp gösterirken hem koordine bir animasyonla. SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- Etkinlik düzeninizi,
sistem kullanıcı arayüzü öğeleri olsa bile
SYSTEM_UI_FLAG_FULLSCREEN
görünür halde olması gerekir. Düzeninizin bazı bölümleri, önceki videolarda Bu özellik, uygulamanız sisteme ait kullanıcı arayüzünü gizlice veSYSTEM_UI_FLAG_FULLSCREEN
, çünkü düzeninizin kullanıcı arayüzü her gizlendiğinde veya göründüğünde yeni düzen sınırlarına ayarlama yapma. SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- Etkinlik düzeninizi,
SYSTEM_UI_FLAG_HIDE_NAVIGATION
etkin (Android 4.0'da eklendi) kullanıcı arayüzü öğeleri hâlâ görünür olsa bile inceleyebilirsiniz. Yerleşiminizin bazı bölümleri arkaya Bu özellik, uygulamanız genellikle gezinme çubuğunu gizleyip gösteriyorsaSYSTEM_UI_FLAG_HIDE_NAVIGATION
ile değiştirin, çünkü düzeninizin gezinme çubuğu her gizlendiğinde veya göründüğünde yeni düzen sınırlarına göre ayarlama yapma. SYSTEM_UI_FLAG_LAYOUT_STABLE
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
ve/veyaSYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
kullanıyorsanız çağrı yaptığınızda emin olmak için bu işareti ekleyebilirsiniz Aynı görünümdefitSystemWindows()
Tanımlanan sınırlar, mevcut ekran alanıyla tutarlı kalır. Bu işaret ayarlandığındafitSystemWindows()
, sistem kullanıcı arayüzü öğelerinin görünürlüğü değişmiyormuş gibi davranır Üstelik bunu, tüm sistem kullanıcı arayüzünü gizledikten sonra da yapabilirsiniz.
Diğer ilgili sistem kullanıcı arayüzü işaretleri hakkında daha fazla bilgi için Android 4.0'da eklenenler.
Uzaktan görünümler
GridLayout
ViewStub
Artık uzaktan bağlanılabilir görünümlerden yararlanabilirsiniz. Böylece bunları
Uygulama widget'ları ve bildirim özel düzenleri.
Yazı tipi aileleri
Android 4.1, Roboto yazı tipi stilinin birkaç varyantını daha ekleyerek toplam 10 varyant sunar. ve bunların tümü uygulamalar tarafından kullanılabilir. Uygulamalarınız artık hem ışık hem de kısa ve öz varyantlardır.
Mevcut Roboto yazı tipi varyantlarının tamamı şunlardır:
- Normal
- İtalik
- Kalın
- Kalın-italik
- Hafif
- Açık italik
- Sıkıştırılmış normal
- Daraltılmış italik
- Daraltılmış kalın
- Daraltılmış kalın italik
Bunlardan herhangi birini yeni fontFamily
ile uygulayabilirsiniz
özelliğini textStyle
özelliğiyle birlikte kullanın.
fontFamily
için desteklenen değerler:
- Normal Roboto için
"sans-serif"
- Roboto Light için
"sans-serif-light"
- Roboto Daraltılmış için
"sans-serif-condensed"
Daha sonra textStyle
değerleriyle kalın ve/veya italik yapabilirsiniz
"bold"
ve "italic"
. Her ikisini de şu şekilde uygulayabilirsiniz: android:textStyle="bold|italic"
.
Typeface.create()
uzantısını da kullanabilirsiniz.
Örneğin, Typeface.create("sans-serif-light", Typeface.NORMAL)
.
Giriş Çerçevesi
Birden fazla giriş cihazı
Yeni InputManager
sınıfı,
Şu anda bağlı giriş cihazları grubu ve yeni bir cihaz olduğunda bildirim almak için kaydolun
eklendiğinde, değiştirildiğinde veya kaldırıldığında. Bu özellikle oyun veya oyun geliştiriyorsanız
Birden fazla oynatıcıyı destekleyen ve bağlı oyun kumandalarının sayısını tespit etmek istiyorsanız
ve denetleyici sayısında değişiklik olduğunda.
Şu numarayı arayarak bağlı tüm giriş cihazlarını sorgulayabilirsiniz:
getInputDeviceIds()
Şunu döndürür:
her biri farklı bir giriş cihazının kimliği olan bir tam sayı dizisi. Ardından
Almak için getInputDevice()
Belirtilen giriş cihazı kimliği için bir InputDevice
.
Yeni giriş cihazları bağlandığında, değiştirildiğinde veya bağlantı kesildiğinde bilgilendirilmek istiyorsanız
InputManager.InputDeviceListener
arayüzünü uygulayın ve
registerInputDeviceListener()
ile kaydettirin.
Giriş denetleyicileri için titreşim
Bağlı giriş cihazlarının kendi titreşim özellikleri varsa artık bunları
mevcut Vibrator
API'lerini kullanarak bu cihazların titreşimini
InputDevice
numaralı telefondan getVibrator()
numaralı telefonu arayarak.
İzinler
Yeni izinler şunlardır:
READ_EXTERNAL_STORAGE
- Harici depolama alanına korumalı okuma erişimi sağlar. Android 4.1'de: varsayılan tüm uygulamalar erişim. Bu durum, gelecekteki bir sürümde uygulamaların açıkça istekte bulunmasını gerektirecek şekilde değiştirilecektir. okuma erişimi verebilirsiniz. Uygulamanız zaten yazma erişimi istiyorsa otomatik olarak okuma erişimi de elde eder. Okuma erişimini etkinleştirecek yeni bir geliştirici seçeneği var kısıtlama, geliştiricilerin uygulamalarını Android'in davranışına göre test etmeleri için duymuş olabilirsiniz.
- android.Manifest.permission.READ_USER_DICTIONARY
- Uygulamaların, kullanıcı sözlüğünü okumasına izin verir. Bu yalnızca IME'yi veya Ayarlar uygulaması gibi bir sözlük düzenleyiciyi kullanabilirsiniz.
READ_CALL_LOG
- Uygulamanın, sistemin aşağıdaki bilgileri içeren çağrı günlüğünü okumasına izin verir gelen ve giden aramalar yapın.
WRITE_CALL_LOG
- Bir uygulamanın, sistemin telefonunuzda depolanan çağrı kaydını değiştirmesine izin verir
- android.Manifest.permission.WRITE_USER_DICTIONARY
- Bir uygulamanın, kullanıcının kelime sözlüğüne yazmasına izin verir.
Cihaz Özellikleri
Android 4.1, özel cihazlar için yeni bir özellik beyanı içeriyor
Kullanıcı arayüzünün televizyon ekranında görüntülenmesi için: FEATURE_TELEVISION
. Uygulamanızın şunlar için zorunlu olduğunu beyan etmek:
bir televizyon arayüzü kullanıyorsanız bu özelliği manifest dosyanızda <uses-feature>
öğesiyle bildirin:
<manifest ... > <uses-feature android:name="android.hardware.type.television" android:required="true" /> ... </manifest>
Bu özellik "televizyon"u tanımlar oturma odasındaki televizyon deneyiminden bahsederiz: kullanıcının uzakta oturduğu ve en yaygın olarak kullandığı ekran görüntüsü d-pad gibi bir şeydir ve genelde dokunma veya fare/işaretçi-cihazı.