Android 4.1 API'leri

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.

Medya yönlendiricisi. Yeni API'ler olan MediaRouter, MediaRouteActionProvider ve MediaRouteButton, standart mekanizmalar ve kullanıcı arayüzü.

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 ve SYSTEM_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österiyorsa SYSTEM_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/veya SYSTEM_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ümde fitSystemWindows() Tanımlanan sınırlar, mevcut ekran alanıyla tutarlı kalır. Bu işaret ayarlandığında fitSystemWindows(), 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ı.