Android 4.0 API'leri

API Düzeyi: 14

Android 4.0 (ICE_CREAM_SANDWICH), kullanıcılar ve uygulama geliştiriciler için çeşitli yeni özellikler ekleyen önemli bir platform sürümüdür. Aşağıda ele alınan tüm yeni özelliklerin ve API'lerin yanı sıra Android 4.0, Android 3.x'ten çok sayıda API ve Holografik tema sunduğu için platform sürümü de yayınlanmıştır. küçük ekranlara sığdırır. Uygulama geliştirici olarak artık tek bir platforma ve birleştirilmiş API çerçevesine sahipsiniz uygulamanızı tek bir APK ile geliştirmenizi ve yayınlamanızı sağlayan, mobil cihazlar, tabletler ve daha fazlası için optimize edilmiş kullanıcı deneyimi sunan, Android: Android 4.0 (API düzeyi 14) veya sonraki sürümler.

Geliştiriciler, Android 4.0 platformuna Android SDK için indirilebilir bileşen. İndirilebilir platform şunları içerir: Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazla. Android 4.0 için geliştirme veya test yapmaya başlamak istiyorsanız platformu SDK'nıza indirmek için Android SDK Yöneticisi'ni kullanın.

API'ye Genel Bakış

Aşağıdaki bölümlerde, Android 4.0'taki yeni API'lere teknik bir genel bakış sunulmaktadır.

Kişiler Sağlayıcıdaki Sosyal API'lar

ContactsContract sağlayıcısı tarafından tanımlanan kişi API'leri cihaz sahibine yönelik kişisel profil gibi yeni sosyal medya odaklı özellikleri destekleyecek şekilde genişletildi. kullanıcıların, Google Play'de yüklü olan sosyal ağlara tek tek kişileri davet edebilmesi olanak tanır.

Kullanıcı Profili

Android artık ContactsContract.Profile tablosunda tanımlandığı şekilde cihaz sahibini temsil eden bir kişisel profil içeriyor. Kullanıcı kimliğini koruyan sosyal uygulamalar , ContactsContract.Profile içinde yeni bir ContactsContract.RawContacts girişi oluşturarak kullanıcının profil verilerine katkıda bulunabilir. Yani cihaz kullanıcısını temsil eden ham kişiler, ContactsContract.RawContacts URI'sıyla tanımlanan geleneksel ham kişiler tablosuna ait değildir; Bunun yerine profile ham kişiyi eklemeniz gerekir CONTENT_RAW_CONTACTS_URI itibarıyla bir tablo hazırlayacağız. Çiğ daha sonra bu tablodaki kişiler "Ben" etiketli, kullanıcının görebildiği tek bir profilde toplanır.

Profil için yeni bir ham kişi eklemek için android.Manifest.permission#WRITE_PROFILE iznine sahip olmanız gerekir. Benzer şekilde, profilden okumak için tablosunda android.Manifest.permission#READ_PROFILE iznini istemeniz gerekir. Ancak çoğu uygulamanın, profile veri eklerken bile kullanıcı profilini okuması gerekmez. Kullanıcı profilinin okunması hassas bir izindir ve kullanıcılardan talep eden uygulamalara şüpheyle yaklaşır.

Davet Amacı

INVITE_CONTACT intent işlemi, uygulamanın kullanıcının bir sosyal ağa kişi eklemek istediğini belirten bir işlem çağırmasına olanak tanır. Uygulama Uygulama alındığında, belirtilen kişiyi davet etmek için bu uygulama kullanılır. kullanabilirsiniz. Çoğu uygulama bu işlemin alıcı tarafındadır. Örneğin, kullanıcı "Bağlantı ekle"yi seçtiğinde yerleşik Kişiler uygulaması davet amacını çağırır belirli bir kampanya için bir kişinin iletişim bilgilerinde listelenen sosyal uygulama.

Uygulamanızı "Bağlantı ekle"deki gibi görünür hale getirmek için bir senkronizasyon bağdaştırıcısı sağlaması sosyal ağınızdaki kişi bilgilerini senkronize edebilirsiniz. Ardından, sisteme INVITE_CONTACT amacına şu şekilde yanıt verir: inviteContactActivity özelliğini, uygulamanızın senkronizasyon yapılandırma dosyasına bir davet amacını gönderirken sistemin başlaması gereken etkinliğin tam adı. Ardından, başlatılan etkinlik söz konusu kişinin URI'sını intent'in ve söz konusu kişiyi ağa davet etmek ya da bu kişiyi ağa eklemek için daha iyi anlarsınız.

Büyük boyutlu fotoğraflar

Android artık kişiler için yüksek çözünürlüklü fotoğrafları destekliyor. Artık bir fotoğrafı bir kişi kaydına eklediğinizde sistem, fotoğrafı hem 96x96 küçük resim (eskiden olduğu gibi) hem de yeni bir dosya tabanlı fotoğraf deposunda depolanan 256x256 "görüntüleme fotoğrafı" olarak işler (sistemin seçtiği tam boyutlar gelecekte değişebilir). Kişiye büyük bir fotoğraf eklemek için bir fotoğrafın normal PHOTO sütunundaki Bu veri satırı, sistem tarafından uygun küçük resim olarak işlenecek ve görüntülenen fotoğrafa dönüştürülecektir. kayıtları.

Kişi Kullanımı Geri Bildirimi

Yeni ContactsContract.DataUsageFeedback API'leri, kullanıcının belirli kişilerle iletişim kurma yöntemlerini ne sıklıkta kullandığını (ör. her bir telefon numarasını veya e-posta adresini ne sıklıkta kullandığı) izlemenize olanak tanır. Bu bilgiler her kişinin sıralamasının iyileştirilmesine yardımcı olur yöntemini kullanabilir ve her kişiyle iletişim için daha iyi öneriler sağlayabilirsiniz.

Takvim Sağlayıcı

Yeni takvim API'leri; takvimleri, etkinlikleri, katılımcıları, hatırlatıcıları ve uyarıları görebilirsiniz.

Bu API'leri çeşitli uygulamalar ve widget'lar takvim etkinliklerini okumak ve değiştirmek için kullanabilir. Bununla birlikte, en ilgi çekici kullanım alanlarından bazıları, kullanıcının diğer takvim hizmetlerindeki takvimini Takvim Sağlayıcı ile senkronize eden senkronizasyon bağdaştırıcılarıdır. Bu sayede kullanıcının tüm etkinlikleri için tek bir konum sunulur. Örneğin, Google Takvim etkinlikleri Takvim Sağlayıcı ile şu şekilde senkronize edilir: Bu etkinliklerin Android'in yerleşik cihazlarıyla görüntülenmesine olanak tanıyan Google Calendar Sync Adapter'ı Takvim uygulaması.

Takvim Sağlayıcısı'ndaki takvimler ve etkinliklerle ilgili bilgiler için veri modeli: CalendarContract tarafından tanımlanıyor. Kullanıcının tüm takvim verileri CalendarContract öğesinin çeşitli alt sınıfları tarafından tanımlanan tablo sayısı:

  • CalendarContract.Calendars tablosunda takvime özgü veriler bulunur ekleyebilirsiniz. Bu tablodaki her satırda tek bir takvimin adı, renk, senkronizasyon bilgileri vb.
  • CalendarContract.Events tablosunda etkinliğe özel bilgiler bulunur. Bu tablodaki her satır, tek bir etkinliğe ait bilgileri içerir. Örneğin: etkinlik başlığı, konum, başlangıç zamanı, bitiş zamanı vs. Etkinlik tek seferlik veya birden çok kez tekrarlanabilir. Katılımcılar, hatırlatıcılar ve genişletilmiş özellikler ayrı tablolarda saklanır ve Etkinliğe bağlamak için etkinliğin _ID özelliğini kullanın.
  • CalendarContract.Instances tablosu şunun başlangıç ve bitiş zamanını içerir: kabul edilir. Bu tablodaki her satır tek bir olayı temsil eder. Tek seferlik etkinliklerde örneklerin etkinliklerle bire bir eşlenmesi vardır. Yinelenen etkinlikler için, söz konusu etkinliğin birden çok kez gerçekleşmesine karşılık gelecek şekilde otomatik olarak birden fazla satır oluşturulur.
  • CalendarContract.Attendees tablosu etkinlik katılımcısını veya davetliyi barındırır ekleyebilirsiniz. Her satır, bir etkinlikteki tek bir konuğu temsil eder. Bu dosya, konukların ve kişinin etkinliğe verdiği tepkidir.
  • CalendarContract.Reminders tablosu, uyarı/bildirim verilerini içerir. Her satır, bir etkinlikle ilgili tek bir uyarıyı temsil eder. Bir etkinlikte birden fazla hatırlatıcı olabilir. Etkinlik başına hatırlatıcı sayısı MAX_REMINDERS içinde belirtilir. Bu değer, ilgili takvimin sahibi olan senkronizasyon bağdaştırıcısı tarafından belirlenir. Hatırlatıcılar, etkinlik planlanmadan önceki dakika sayısı olarak belirtilir ve kullanıcıya hatırlatmak için uyarı, e-posta veya SMS gibi bir alarm yöntemi belirtir.
  • CalendarContract.ExtendedProperties tablosu, senkronizasyon adaptörü tarafından kullanılan opak veri alanlarını içerir. Sağlayıcı, bu tablodaki öğelerle ilgili silme işlemi dışında herhangi bir işlem yapmaz. ilgili etkinlikleri silindiğinde bu kullanıcılara gösterilecek.

Bir kullanıcının takvim verilerine Takvim Sağlayıcı ile erişmek için uygulamanızın, READ_CALENDAR izni (okuma erişimi için) ve WRITE_CALENDAR (yazma erişimi için).

Etkinlik amacı

Tek amacınız kullanıcının takvimine etkinlik eklemekse Takvim uygulamasında yeni etkinlikler oluşturan bir etkinlik başlatmak için Events.CONTENT_URI tarafından tanımlanan verilerle birlikte bir ACTION_INSERT intent'i kullanabilirsiniz. Intent'i kullanmak için herhangi bir izin gerekmez ve aşağıdaki ekstralarla etkinlik ayrıntılarını belirtebilirsiniz:

Sesli Mesaj Sağlayıcısı

Yeni Sesli Mesaj Sağlayıcı, kullanıcının tüm sesli mesajlarını tek bir görsel sunumda sunmak için uygulamaların cihaza sesli mesaj eklemesine olanak tanır. Örneğin, bir kullanıcının birden fazla sesli mesaj kaynağı olabilir (ör. telefonun servis sağlayıcısı ve VoIP veya diğer alternatif ses hizmetleri). Bu uygulamalar, sesli mesajlarını cihaza eklemek için Sesli Mesaj Sağlayıcı API'lerini kullanabilir. İlgili içeriği oluşturmak için kullanılan yerleşik Telefon uygulaması daha sonra tüm sesli mesajları birleştirilmiş bir sunu halinde kullanıcıya sunar. Tüm sesli mesajları okuyabilen tek uygulama sistemdeki Telefon uygulaması olsa da sesli mesaj sağlayan her uygulama, sisteme eklediği sesli mesajları okuyabilir (ancak diğer hizmetlerdeki sesli mesajları okuyamaz).

API'ler şu anda üçüncü taraf uygulamalarının sesli mesaj API'lerini kullanması gereken üçüncü taraf uygulamaları, yalnızca sesli mesaj özelliği olan uygulamalardır. ve kullanıcıya teslim etmektir.

VoicemailContract sınıfı Sesli Mesaj Sağlayıcısı. VoicemailContract.Voicemails ve VoicemailContract.Status alt sınıfları, uygulamaların cihazda depolamak üzere sesli mesaj verilerini ekleyebildiği tablolar sağlar. Sesli mesaj sağlayıcı uygulaması örneği için Sesli Mesaj Sağlayıcı Demo'ya bakın.

Multimedya

Android 4.0 fotoğraf gibi medya ile etkileşim kuran uygulamalar için birçok yeni API ekler. video ve müzik.

Medya Efektleri

Yeni medya efektleri çerçevesi, resimlere ve grafiklere çeşitli görsel efektler videolar. Örneğin, resim efektleri sayesinde kırmızı göz sorununu kolayca düzeltebilir, bir resmi gri tonlamaya dönüştürebilir, parlaklığı ve doygunluğu ayarlayabilir, resmi döndürebilir, balık gözü efekti uygulayabilir ve daha pek çok işlem yapabilirsiniz. İlgili içeriği oluşturmak için kullanılan sistemi maksimum performans elde etmek için tüm efektleri GPU'da işler.

Maksimum performans için efektler doğrudan OpenGL dokularına uygulanır. Bu nedenle, uygulamanızın efekt API'lerini kullanabilmesi için geçerli bir OpenGL bağlamına sahip olması gerekir. Etki uyguladığınız dokular bitmap'lerden, videolardan ve hatta kameradan gelebilir. Ancak, dokular aşağıdaki şartları karşılamalıdır:

  1. Bir GL_TEXTURE_2D doku resmine bağlı olmalıdırlar
  2. En az bir Mipmap düzeyi içermelidir

Effect nesnesi, uygulayabileceğiniz tek bir medya efekti tanımlar resim çerçevesi. Effect oluşturmak için temel iş akışı şu şekildedir:

  1. OpenGL ES 2.0 içeriğinizden EffectContext.createWithCurrentGlContext() çağrısı yapın.
  2. Döndürülen EffectContext değerini kullanarak EffectContext.getFactory() işlevini çağırın. Bu işlev, EffectFactory örneğini döndürür.
  3. @link android.media.effect.EffectFactory} sınıfından bir efekt adı (ör. EFFECT_FISHEYE veya EFFECT_VIGNETTE) ile createEffect() işlevini çağırın.

setParameter() işlevini çağırıp bir parametre adı ve parametre değeri ileterek bir efektin parametrelerini ayarlayabilirsiniz. Her efekt türü, efekt adıyla birlikte açıklanan farklı parametreleri kabul eder. Örneğin, EFFECT_FISHEYE, bozulmanın scale parametresi için bir parametreye sahiptir.

Bir dokuya efekt uygulamak için Effect üzerinde apply()'ü çağırın ve giriş dokusunu, genişliğini, yüksekliğini ve çıkış dokusunu iletin. Giriş dokusu bir GL_TEXTURE_2D doku resmine bağlanmalıdır (genellikle glTexImage2D() işlevi çağrılarak yapılır). Birden fazla mipmap seviyesi sağlayabilirsiniz. Çıkış dokusu bir doku resmi, efekt ile otomatik olarak GL_TEXTURE_2D ve bir Mipmap düzeyi (0) ile bağlanır. Bu düzeyde de boyutu kullanabilirsiniz.

EffectFactory listesinde belirtilen tüm efektlerin destekleneceği garanti edilir. Ancak harici kitaplıklarda bulunan bazı ek efektler tüm cihazlar tarafından desteklenmez. Bu nedenle, harici kitaplıktaki istenen efektin desteklenip desteklenmediğini kontrol etmek için önce isEffectSupported() işlevini çağırmanız gerekir.

Uzaktan kumanda istemcisi

Yeni RemoteControlClient, medya oynatıcıların oynatmayı etkinleştirmesine olanak tanır. cihaz kilit ekranı gibi uzaktan kumanda istemcilerinin kontrol düğmelerini kullanır. Medya oynatıcılar, uzaktan kumanda ekranında gösterilecek şekilde, şu anda oynatılan medyayla ilgili bilgileri (ör. parça bilgileri ve albüm kapağı) de gösterebilir.

Medya oynatıcınız için uzaktan kumanda istemcilerini etkinleştirmek amacıyla, kurucusuyla bir RemoteControlClient örneği oluşturup ACTION_MEDIA_BUTTON yayını yapan bir PendingIntent iletin. Intent, uygulamanızda ACTION_MEDIA_BUTTON etkinliğini işleyen açık BroadcastReceiver bileşenini de beyan etmelidir.

Oynatıcınızın hangi medya kontrol girişlerini işleyebileceğini belirtmek için RemoteControlClient üzerinde setTransportControlFlags()'ü çağırarak FLAG_KEY_MEDIA_PREVIOUS ve FLAG_KEY_MEDIA_NEXT gibi bir dizi FLAG_KEY_MEDIA_* işareti göndermeniz gerekir.

Ardından, RemoteControlClient öğenizi MediaManager.registerRemoteControlClient()'a aktararak kaydetmeniz gerekir. Kaydolduktan sonra, RemoteControlClient öğesini başlatırken beyan ettiğiniz yayın alıcısına ACTION_MEDIA_BUTTON gönderilir uzaktan kumandadan bir düğmeye basıldığında gerçekleşen etkinlikleri ifade eder. Aldığınız intent, basılan medya anahtarı için KeyEvent öğesini içerir. Bu anahtarı, getParcelableExtra(Intent.EXTRA_KEY_EVENT) ile niyetten alabilirsiniz.

Uzaktan kumandada medya oynatmayla ilgili bilgileri görüntülemek için editMetaData() yöntemini çağırın ve döndürülen öğeye meta verileri ekleyin RemoteControlClient.MetadataEditor. Medya posteri için bir bitmap, geçen süre gibi sayısal bilgiler ve parça başlığı gibi metin bilgileri sağlayabilirsiniz. Kullanılabilir anahtarlar hakkında bilgi edinmek için MediaMetadataRetriever içindeki METADATA_KEY_* işaretlerine bakın.

Örnek bir uygulama için Random Music Player'a bakın. Bu uygulama, Android 2.1'e kadarki cihazları desteklemeye devam ederken Android 4.0 cihazlarda uzaktan kumanda istemcisini etkinleştirecek şekilde uyumluluk mantığı sağlar.

Medya oynatıcı

  • MediaPlayer uygulamasından çevrimiçi medya akışı için artık INTERNET izni gerekiyor. MediaPlayer kullanıyorsanız internetten içerik oynatalar, INTERNET eklediğinizden emin olun manifest dosyanıza izin verilmez, aksi takdirde medya oynatma işleviniz Android'den itibaren çalışmaz. 4.0.
  • setSurface(), video havuzu olarak davranacak bir Surface tanımlamanıza olanak tanır.
  • setDataSource() ile yapabilecekleriniz: İsteğinizle birlikte, HTTP(S) canlı akışı için yararlı olabilecek ek HTTP üstbilgileri gönderin
  • HTTP(S) canlı yayını artık isteklerde HTTP çerezlerine uyuyor

Medya türleri

Android 4.0 aşağıdakiler için destek sağlar:

  • HTTP/HTTPS canlı yayın protokolü sürüm 3
  • ADTS ham AAC ses kodlaması
  • WEBP resimleri
  • Matroska videosu

Daha fazla bilgi için Desteklenen Medyalar bölümüne bakın Biçimler.

Kamera

Camera sınıfı artık yüzleri algılamak ve kontrol etmek için API'ler içeriyor. farklı alanları kapsıyor.

Yüz algılama

Kamera uygulamaları artık Android'in yüz algılama API'leri sayesinde yeteneklerini artırabilir. Bu API'ler, yalnızca öznenin yüzünü değil, göz ve ağız gibi belirli yüz özelliklerini de algılar.

Kamera uygulamanızda yüzleri algılamak için setFaceDetectionListener() numaralı telefonu arayarak bir Camera.FaceDetectionListener kaydettirmeniz gerekir. Ardından kameranızın yüzeyini seçin ve startFaceDetection() numaralı telefonu arayarak yüzleri algılamaya başlayın.

Sistem, kamera sahnesinde bir veya daha fazla yüz algıladığında Camera.FaceDetectionListener uygulamanızda Camera.Face nesne dizisi içeren onFaceDetection() geri çağırma işlevini çağırır.

Camera.Face sınıfının bir örneği, şunlar hakkında çeşitli bilgiler sağlar: şu da dahil olmak üzere yüz algılandı:

  • Kameranın mevcut görüş alanına göre yüzün sınırlarını belirten bir Rect
  • Sistemin, nesnenin insan yüzü olduğuna ne kadar güvendiğini belirten 1 ile 100 arasında bir tam sayı
  • Birden fazla yüzü izleyebilmeniz için benzersiz bir kimlik
  • Gözlerin ve ağzın nerede olduğunu gösteren birkaç Point nesnesi

Not: Yüz algılama özelliği bazı cihazlarda desteklenmeyebilir Bu yüzden getMaxNumDetectedFaces() numaralı telefonu arayıp kontrol edip iade isteğinde bulunmanız gerekir. değer sıfırdan büyük. Ayrıca bazı cihazlar göz ve ağız tanımlamayı desteklemeyebilir. Bu durumda, Camera.Face nesnesindeki bu alanlar null olur.

Odaklanma ve ölçüm alanları

Kamera uygulamaları artık kameranın odaklanma ve beyaz ölçümü için kullandığı alanları kontrol edebilir bakiye ve otomatik pozlama. Her iki özellik de kameranın mevcut görünümünde odaklanılması veya ölçülmesi gereken bölgeyi belirtmek için yeni Camera.Area sınıfını kullanır. Camera.Area sınıfının bir örneği, alanın Rect ile sınırlarını ve alanın ağırlığını tanımlar. Bu da, alanın önem düzeyini temsil eder. alan, bir tam sayı ile gösterilir.

Odak alanı veya ölçüm alanı ayarlamadan önce sırasıyla getMaxNumFocusAreas() veya getMaxNumMeteringAreas() işlevini çağırmanız gerekir. Bu değerler sıfır döndürüyorsa cihaz ilgili özelliği desteklemiyordur.

Kullanılacak odak veya ölçme alanlarını belirtmek için setFocusAreas() ya da setMeteringAreas() işlevini çağırmanız yeterlidir. Her biri, odaklama veya ölçüm için dikkate alınacak alanları belirten Camera.Area nesne List alır. Örneğin, kullanıcının önizlemenin bir alanına dokunarak odak alanını ayarlayabilirsiniz. Daha sonra, bunu bir Camera.Area nesnesine çevirirsiniz ve kameranın sahnenin o alanına odaklanmasını isteyebilirsiniz. Bu alandaki odak veya pozlama, alandaki sahne değiştikçe sürekli olarak güncellenir.

Fotoğraflar için sürekli otomatik odaklama

Artık fotoğraf çekerken sürekli otomatik odaklamayı (CAF) etkinleştirebilirsiniz. Kamera uygulamanızda CAF'yi etkinleştirmek için FOCUS_MODE_CONTINUOUS_PICTURE değerini setFocusMode() değerine iletin. Fotoğraf çekmeye hazır olduğunuzda autoFocus() numaralı telefonu arayın. Odak sağlanıp sağlanmadığını belirtmek için Camera.AutoFocusCallback cihazınıza hemen geri arama yapılır. Geri arama alındıktan sonra CAF'yi devam ettirmek için cancelAutoFocus() numaralı telefonu aramanız gerekir.

Not: Sürekli otomatik odaklama, çekim sırasında da desteklenir FOCUS_MODE_CONTINUOUS_VIDEO kullanılarak elde edilen API düzeyi 9'da eklendi.

Diğer kamera özellikleri

  • Video kaydederken artık video oturumunu kesintiye uğratmadan fotoğraf kaydetmek için takePicture() numarasını arayabilirsiniz. Bunu yapmadan önce donanımın doğruluğundan emin olmak için isVideoSnapshotSupported() adlı kişiyi arayın destekler.
  • Artık bu özelliklerin değişmesini önlemek için setAutoExposureLock() ve setAutoWhiteBalanceLock() ile otomatik pozlamayı ve beyaz dengeyi kilitleyebilirsiniz.
  • Artık kamera önizlemesi çalışırken setDisplayOrientation() numaralı telefonu arayabilirsiniz. Daha önce bu işlevi yalnızca önizlemeye başlamadan önce çağırabiliyordunuz. Artık yönü istediğiniz zaman değiştirebilirsiniz.

Kamera yayını amaçları

  • Camera.ACTION_NEW_PICTURE: Bu, kullanıcının yeni bir fotoğraf çektiğini gösterir. Yerleşik Kamera uygulaması bunu çağırır anons edilebilir. Ayrıca, üçüncü taraf kamera uygulamalarının da bu amacı anlaması için fotoğraf çektikten sonra.
  • Camera.ACTION_NEW_VIDEO: Bu, kullanıcının yeni bir video yakaladığını gösterir. Yerleşik Kamera uygulaması bunu çağırır Video kaydedildikten sonra yayın yapmalı ve üçüncü taraf kamera uygulamalarının da bu niyeti yayınlaması gerekir. her zaman daha azdır.

Android Beam (NFC ile NDEF Push)

Android Beam, NDEF mesajlarını bir cihazdan cihaza göndermenize olanak tanıyan yeni bir NFC özelliğidir. başka bir işlem ("NDEF Push" olarak da bilinir). Veri aktarımı, Android Beam'i destekleyen iki Android cihaz birbirine yakın (yaklaşık 4 cm) mesafedeyken ve genellikle arkaları birbirine değecek şekildeyken başlatılır. NDEF mesajındaki veriler, paylaşmak istediğiniz tüm verileri içerebilir cihazlar arasında geçiş yapın. Örneğin, Kişiler uygulaması kişileri, YouTube videoları ve Tarayıcıyı paylaşır. Android Beam'i kullanarak URL'leri paylaşır.

Android Beam'i kullanarak cihazlar arasında veri aktarmak için etkinliğiniz ön plandayken paylaşmak istediğiniz bilgileri içeren bir NdefMessage oluşturmanız gerekir. Daha sonra, NdefMessage öğesini sisteme iki seçenekten birinde iletmeniz gerekir yöntemler:

Sistem NDEF'nizi başarıyla teslim ettikten sonra belirli bir kod çalıştırmak isterseniz mesajı görürseniz NfcAdapter.OnNdefPushCompleteCallback öğesini uygulayabilir ve setNdefPushCompleteCallback() ile ayarlayabilirsiniz. Sistem, Mesaj teslim edildiğinde onNdefPushComplete() adlı kuruluşu arayın.

Alıcı cihazda sistem, NDEF Push mesajlarını normal NFC etiketlerine benzer şekilde dağıtır. Sistem, NdefMessage içindeki ilk NdefRecord'a göre ayarlanmış bir URL veya MIME türüyle bir etkinlik başlatmak için ACTION_NDEF_DISCOVERED işlemini içeren bir intent çağırır. Yanıt vermek istediğiniz etkinlik için uygulamanızın önemsediği URL'ler veya MIME türleri için intent filtreleri tanımlayabilirsiniz. Daha fazla NFC geliştirici kılavuzuna bakın.

NdefMessage cihazınızın bir URI taşımasını istiyorsanız artık bir dize veya Uri nesnesine dayalı yeni bir NdefRecord oluşturmak için createUri yöntemini kullanın. URI, uygulamanızın bir Android Beam etkinliği sırasında da almasını istediğiniz özel bir biçimse gelen NDEF mesajını almak için etkinliğiniz için aynı URI şemasını kullanarak bir intent filtresi oluşturmanız gerekir.

Ayrıca "Android uygulama kaydı" da iletmeniz gerekir. NdefMessage cihazınızla birlikte uygulamanızın gelen NDEF mesajını işlemesini garantilemek için aynı amaç işlemi için filtrelenir. createApplicationRecord() işlevini çağırarak ve uygulamanızın paket adını ileterek bir Android uygulama kaydı oluşturabilirsiniz. Diğer cihaz, uygulama kaydını içeren NDEF mesajını aldığında ve birden fazla uygulama, belirtilen intent'i işleyen etkinlikler içerdiğinde sistem, mesajı her zaman uygulamanızdaki etkinliğe (eşleşen uygulama kaydına göre) iletir. Hedef cihazda uygulamanız yüklü değilse sistemi Google Play'i başlatmak için Android uygulama kaydını kullanır ve kullanıcıyı uygulamayı yüklemeniz gerekir.

Uygulamanız NDEF Push mesajlaşmasını gerçekleştirmek için NFC API'lerini kullanmıyorsa Android bir Varsayılan davranış: Uygulamanız bir cihazda ön planda çalışırken ve Android Beam diğer cihaz, Android destekli başka bir cihazla çağrılırsa Uygulamanızı tanımlayan Android uygulaması kaydı. Alıcı cihazda uygulama yüklendiğinde, sistem uygulamayı başlatır; yüklü değilse Google Play açılır ve kullanıcıyı uygulamanıza yönlendirin.

NFC ile İlgili Temel Bilgiler geliştirici kılavuzunda Android Beam ve diğer NFC özellikleri hakkında daha fazla bilgi edinebilirsiniz. Örneğin, hakkında daha fazla bilgi için Android Beam Işınlama Demosu.

Kablosuz P2P

Android artık Android destekli cihazlar ile eşler arası (P2P) bağlantıları diğer cihaz türleri de (Wi-Fi Alliance'ın Wi-Fi DirectTM sertifika programı) hotspot veya İnternet bağlantısı olmadan. Android çerçevesi, kullanıcıları Her bir cihaz yanınızda olduğunda diğer cihazları keşfedip bağlanmanıza olanak tanıyan bir dizi Wi-Fi P2P API'si kablosuz P2P'yi destekler; daha uzun mesafelerde hızlı bir bağlantı üzerinden Bluetooth bağlantısı.

Yeni bir paket olan android.net.wifi.p2p, kablosuz ağ üzerinden eşler arası bağlantılar gerçekleştirmek için gereken tüm API'leri içerir. Çalışmanız gereken birincil sınıf WifiP2pManager'tir. Bu sınıfı getSystemService(WIFI_P2P_SERVICE)'u çağırarak edinebilirsiniz. WifiP2pManager aşağıdakileri yapmanıza olanak tanıyan API'ler içerir:

  • P2P bağlantıları için uygulamanızı initialize() numaralı telefonu arayarak başlatın.
  • discoverPeers()'ü arayarak yakındaki cihazları keşfetme
  • connect() numaralı telefonu arayarak P2P bağlantısı başlatın
  • Başka pek çok bilgi

Ayrıca, aşağıdakiler gibi birçok farklı arayüz ve sınıf da gereklidir:

  • WifiP2pManager.ActionListener arayüzü ile şunları alabilirsiniz: eşleri keşfetme veya bunlara bağlanma gibi bir işlem başarılı ya da başarısız olduğunda geri çağırmalar.
  • WifiP2pManager.PeerListListener arayüzü ile şunları alabilirsiniz: hakkında daha fazla bilgi edinin. Geri çağırma, bir WifiP2pDeviceList sağlar. Kapsama alanı içindeki her cihaz için WifiP2pDevice nesnesini buradan alabilir ve aşağıdakilere benzer bilgileri alabilirsiniz: cihaz adı, adresi, cihaz türü, cihazın desteklediği WPS yapılandırmaları ve daha fazlası.
  • WifiP2pManager.GroupInfoListener arayüzü şunları yapmanıza olanak tanır: P2P grubuyla ilgili bilgi alma. Geri çağırma; bir WifiP2pGroup nesnesi sağlar. Bu nesne; sahibi, parolayı girin.
  • WifiP2pManager.ConnectionInfoListener arayüzü ile yapabilecekleriniz: geçerli bağlantıyla ilgili bilgi almalarını sağlayın. Geri çağırma, bir grubun konumlandırılıp sayılmadığı gibi bilgileri içeren bir WifiP2pInfo nesnesi sağlar. ve grup sahibinin kim olduğu.

Kablosuz P2P API'lerini kullanmak için uygulamanızın aşağıdaki kullanıcı izinlerini istemesi gerekir:

Android sistemi belirli Wi-Fi P2P etkinlikleri sırasında birkaç farklı işlem de yayınlar:

Daha fazla bilgi için WifiP2pManager dokümanlarına bakın. Ayrıca buraya göz atın Wi-Fi P2P Demo örnek bir uygulamadır.

Bluetooth Sağlık Cihazları

Android artık Bluetooth Sağlık Profili cihazlarını destekliyor. Böylece, Bluetooth'u destekleyen sağlık cihazlarıyla (ör. kalp atış hızı monitörleri, kan şekeri ölçüm cihazları, termometreler ve tartılar) iletişim kurmak için Bluetooth kullanan uygulamalar oluşturabilirsiniz.

Normal mikrofonlu kulaklık ve A2DP profil cihazlarına benzer şekilde, profil proxy nesnesi ile bağlantı kurmak için getProfileProxy()'ü bir BluetoothProfile.ServiceListener ve HEALTH profil türüyle çağırmanız gerekir.

Sağlık Profili proxy'sini (BluetoothHealth nesnesi) edindikten sonra, eşlenmiş sağlık cihazlarına bağlanmak ve bu cihazlarla iletişim kurmak için aşağıdaki yeni Bluetooth sınıfları kullanılır:

  • BluetoothHealthCallback: Bu sınıfın kapsamını genişletmeli ve uygulamanın kayıt durumundaki değişikliklerle ilgili güncellemeleri almak için geri çağırma yöntemleri ve Bluetooth kanalı durumu.
  • BluetoothHealthAppConfiguration: BluetoothHealthCallback adresinize yapılan geri aramalar sırasında, mevcut Bluetooth sağlık cihazı hakkında yapılandırma bilgileri sağlayan bu nesnenin bir örneğini alırsınız. BluetoothHealth API'leriyle bağlantı başlatma ve sonlandırma gibi çeşitli işlemleri gerçekleştirmek için bu nesneyi kullanmanız gerekir.

Bluetooth Sağlık Profili'ni kullanma hakkında daha fazla bilgi için BluetoothHealth dokümanlarına bakın.

Erişilebilirlik

Android 4.0, görme engelli kullanıcılar için erişilebilirliği yeni dokunarak keşfetme modu ve içerik görüntüleme hakkında daha fazla bilgi sağlamanıza veya gelişmiş erişilebilirlik hizmetleri geliştirmenize olanak tanıyan genişletilmiş API'lerle iyileştirir.

Dokunarak keşfet modu

Görme kaybı olan kullanıcılar artık bir parmağına dokunup sürükleyerek ekranda gezinebilirler. içeriğin sesli açıklamalarını dinleyin. Çünkü dokunarak keşfetme modu Bu şekilde, ekran okuyucuların açıklayıcı metni ekrandakiyle aynı şekilde tanımlamasını sağlar. Kullanıcı, sağlanan bilgileri okuyarak d-pad veya iztopu ile gezindiğinde okuyucular bunu yapabilir "fareyle üzerine gelme" simülasyonu üzerine android:contentDescription ve setContentDescription() tarafından unutmayın. Bu nedenle, bu e-postayı, uygulamanızdaki görünümler (özellikle ImageButton, EditText, ImageView ve doğal olarak açıklayıcı metin içermeyebilecek diğer widget'lar) için açıklayıcı metin sağlamanız gerektiğini hatırlatmak amacıyla gönderiyoruz.

Görüntülemeler için erişilebilirlik

Ekran okuyucu gibi erişilebilirlik hizmetlerinde sunulan bilgileri iyileştirmek için Özel View bileşenlerinizde erişilebilirlik etkinlikleri için yeni geri çağırma yöntemleri uygulayın.

Öncelikle, sendAccessibilityEvent() yönteminin davranışının Android 4.0'da değiştiğini belirtmek önemlidir. Android'in önceki sürümünde olduğu gibi, kullanıcı cihazda erişilebilirlik hizmetlerini etkinleştirdiğinde tıklama veya fareyle üzerine gelme gibi bir giriş etkinliği gerçekleştiğinde, ilgili görünüme sendAccessibilityEvent() Daha önce sendAccessibilityEvent()'ün uygulanması, bir AccessibilityEvent başlatıp AccessibilityManager'ye gönderiyordu. Yeni davranış bazı ek geri çağırmalar içeriyor görünüm ve üst öğelerinin etkinliğe daha fazla bağlamsal bilgi eklemesine olanak tanıyan yöntemler içerir:

  1. sendAccessibilityEvent() ve sendAccessibilityEventUnchecked() yöntemleri çağrıldığında onInitializeAccessibilityEvent()'ye yönlendirilir.

    View özel uygulamaları için onInitializeAccessibilityEvent() AccessibilityEvent öğesine daha fazla erişilebilirlik bilgisi ekleyin ancak standart içerik açıklaması ve öğe dizini gibi varsayılan bilgileri sağlayabilir. Ancak bu geri çağırmaya başka metin içeriği eklememelisiniz. tıklayın.

  2. Etkinlik başlatıldıktan sonra, metin ile doldurulması gereken çeşitli türlerden biriyse görüntüledikten sonra, görünüm dispatchPopulateAccessibilityEvent() onPopulateAccessibilityEvent() tarihine kadar erteler geri arama.

    View'ün özel uygulamaları genellikle android:contentDescription metni eksik veya yetersizse AccessibilityEvent'ye ek metin içeriği eklemek için onPopulateAccessibilityEvent()'ü uygulamalıdır. Daha fazla metin açıklaması eklemek için AccessibilityEvent, getText() numaralı telefonu arayın.add().

  3. Bu noktada View, üst görünümde requestSendAccessibilityEvent()'ü çağırarak etkinliği görünüm hiyerarşisinde yukarı aktarır. Böylece her ebeveyn görünümü, erişilebilirlik bilgilerini o zamana kadar AccessibilityRecord ekleniyor kök görünüme ulaşır ve etkinlik, sendAccessibilityEvent() ile AccessibilityManager ürününe gönderilir.

View sınıfının genişletilmesinde kullanışlı olan yukarıdaki yeni yöntemlere ek olarak, AccessibilityDelegate öğesini genişletip görünümde aşağıdaki kodla ayarlayarak herhangi bir View üzerinde bu etkinlik geri çağırmalarına müdahale edebilirsiniz. setAccessibilityDelegate(). Bunu yaptığınızda, görünümdeki her erişilebilirlik yöntemi çağrıyı karar verir. Örneğin, görüntüleme onPopulateAccessibilityEvent() için bir çağrı aldığında bunu View.AccessibilityDelegate içindeki aynı yönteme iletir. Temsilci tarafından işlenmeyen tüm yöntemler, varsayılan davranış için doğrudan görünüme geri verilir. Bu sayede, View sınıfını genişletmeden yalnızca belirli bir görünüm için gerekli yöntemleri geçersiz kılabilirsiniz.

4.0'dan önceki Android sürümleriyle uyumluluğu sürdürmek ve aynı zamanda yeni erişilebilirlik API'lerini kullanmak istiyorsanız bunu v4 desteğinin son sürümüyle kitaplığı (Uyumluluk Paketi, r4'te) yeni erişilebilirlik API'lerini geriye dönük uyumlu olacak şekilde sağlayan bir dizi yardımcı program sınıfı kullanarak tasarım.

Erişilebilirlik hizmetleri

Bir erişilebilirlik hizmeti geliştiriyorsanız çeşitli erişilebilirlik etkinlikleri hakkındaki bilgiler , kullanıcılar için daha gelişmiş erişilebilirlik geri bildirimi sağlamak üzere önemli ölçüde genişletildi. Özellikle etkinlikler, görünüm kompozisyonuna göre oluşturulur. Bu sayede daha iyi bağlam bilgileri sağlanır ve erişilebilirlik hizmetlerinin ek görünüm bilgileri almak ve özel durumlarla ilgilenmek için görünüm hiyerarşileri arasında gezinmesine olanak tanınır.

Bir erişilebilirlik hizmeti (ekran okuyucu gibi) geliştiriyorsanız aşağıdaki prosedürü uygulayarak ek içerik bilgilerini ve çapraz görünüm hiyerarşilerini inceleyin:

  1. Bir uygulamadan AccessibilityEvent aldıktan sonra, belirli bir AccessibilityRecord almak için AccessibilityEvent.getRecord() işlevini çağırın ( etkinliği) ekleyebilirsiniz.
  2. AccessibilityEvent veya tek bir AccessibilityRecord cihazından, AccessibilityNodeInfo nesnesini almak için getSource() öğesini çağırabilirsiniz.

    AccessibilityNodeInfo, tek bir düğümü temsil eder erişilebilirlik bilgilerini sorgulamanıza olanak tanıyan bir biçimde sunmalısınız. düğüm. AccessibilityEvent işlevinden döndürülen AccessibilityNodeInfo nesnesi etkinlik kaynağını tanımlarken, AccessibilityRecord, etkinliğin selefi hakkında bilgi verir kaynak.

  3. AccessibilityNodeInfo ile bilgileri sorgulayabilirsiniz. görünümü aktarmak için getParent() veya getChild() işlevini çağırın ve hatta düğüme alt görünümler de ekleyebilirsiniz.

Uygulamanızın sistemde erişilebilirlik hizmeti olarak yayınlanması için AccessibilityServiceInfo değerine karşılık gelen bir XML yapılandırma dosyası beyan etmesi gerekir. Erişilebilirlik hizmeti oluşturma hakkında daha fazla bilgi için AccessibilityService başlıklı makaleyi inceleyin. XML yapılandırması hakkında bilgi için SERVICE_META_DATA başlıklı makaleyi inceleyin.

Diğer erişilebilirlik API'leri

Cihazın erişilebilirlik durumuyla ilgileniyorsanız AccessibilityManager gibi bazı yeni API'ler var:

Yazım Denetleyici Hizmetleri

Yeni yazım denetimi çerçevesi, uygulamaların giriş yöntemi çerçevesine (IME'ler için) benzer bir şekilde yazım denetimi oluşturmasına olanak tanır. Yeni bir yazım denetimi aracı oluşturmak için SpellCheckerService sınıfını genişleten bir hizmet uygulamanız ve SpellCheckerService.Session sınıfını, arayüzün geri çağırma yöntemleri tarafından sağlanan metne göre yazım önerileri sunacak şekilde genişletmeniz gerekir. SpellCheckerService.Session geri çağırma yöntemlerinde yazım önerilerini SuggestionsInfo nesne olarak görüyorsunuz.

Yazım denetimi hizmeti içeren uygulamalar, hizmetin gerektirdiği şekilde BIND_TEXT_SERVICE iznini belirtmelidir. Hizmet ayrıca intent işlemi olarak <action android:name="android.service.textservice.SpellCheckerService" /> ile bir intent filtresi beyan etmeli yazım için yapılandırma bilgilerini tanımlayan bir <meta-data> öğesi ekleyin kontrol eder.

Örneğe bakın: Yazım Denetleyici Hizmeti uygulamasını kullanarak örnek Örnek kod için Yazım Denetleyici İstemcisi uygulaması.

Metin Okuma Motorları

Android'in metin okuma (TTS) API'leri, uygulamaların özel TTS motorlarını daha kolay şekilde uygulamasını sağlamak için önemli ölçüde genişletildi. TTS motoru kullanmak isteyen uygulamalarda ise motor seçmek için birkaç yeni API mevcuttur.

Metin okuma motorlarını kullanma

Android'in önceki sürümlerinde TextToSpeech sınıfını kullanabilirdiniz sistem tarafından sağlanan TTS motorunu kullanarak metin okuma (TTS) işlemleri gerçekleştirmek veya bir özel arama motorunu setEngineByPackageName() kullanın. Android 4.0'ta setEngineByPackageName() yönteminin desteği sonlandırıldı ve artık bir TTS motorunun paket adını kabul eden yeni bir TextToSpeech kurucu ile kullanılacak motoru belirtebilirsiniz.

Ayrıca, kullanılabilir TTS motorlarını getEngines() ile sorgulayabilirsiniz. Bu yöntem, motorunTextToSpeech.EngineInfo simge, etiket ve paket adı.

Metin okuma motorları oluşturma

Daha önce özel motorlar, motorun dokümanları olmayan bir yerel başlık dosyası kullanılarak oluşturulmasını gerektiriyordu. Android 4.0'da, TTS motorları oluşturmak için eksiksiz bir çerçeve API'si grubu bulunur.

Temel kurulum, aşağıdakilerin geçerli olması için TextToSpeechService uygulanmasını gerektirir: INTENT_ACTION_TTS_SERVICE amacına karşılık gelir. Bir TTS motorunun birincil çalışması, TextToSpeechService'ü genişleten bir hizmette onSynthesizeText() geri çağırma sırasında gerçekleşir. Sistem bu yöntemi ikinci olarak sunar. nesneler:

  • SynthesisRequest: Bu öğe, çeşitli verileri içerir. Örneğin, yerel ayarı, konuşma hızını ve ses tonunu sentezlemelisiniz.
  • SynthesisCallback: Bu, TTS motorunuzun elde edilen konuşma verilerini akış ses olarak yayınladığı arayüzdür. Öncelikle motor, motorun yayına hazır olduğunu belirtmek için start() öğesini çağırmalıdır sesi dinleyin, ardından audioAvailable() adlı kişiyi arayın. ilettiğinden emin olun. Motorunuz arabellekte, done() yöntemini çağırın.

Çerçeve artık TTS motorları oluşturmak için gerçek bir API'yi desteklediğine göre artık yerel kod için de uygulama kaldırıldı. Uyumluluk katmanıyla ilgili blog yayınını arama eski TTS motorlarınızı yeni çerçeveye dönüştürmek için kullanabileceğiniz bir çerçevedir.

Yeni API'leri kullanan örnek bir TTS motoru için Text To Speech Engine örnek uygulamasına bakın.

Ağ Kullanımı

Android 4.0, kullanıcılara uygulamalarının ne kadar ağ verisi kullandığını tam olarak görme olanağı sunar. Ayarlar uygulaması, kullanıcıların ağ veri kullanımı için belirlenen sınırları yönetmelerine ve hatta arka plan verilerinin kullanımını tek tek uygulamalar için devre dışı bırakmalarına olanak tanıyan kontroller sağlar. Kullanıcıların uygulamanızın arka planda verilere erişimini devre dışı bırakmasını önlemek için veri bağlantısını verimli bir şekilde kullanmaya yönelik stratejiler geliştirmeniz ve kullanımınızı mevcut bağlantı türüne göre ayarlamanız gerekir.

Uygulamanız çok sayıda ağ işlemi gerçekleştiriyorsa kullanıcıların uygulamanızın veri alışkanlıklarını kontrol etmelerine olanak tanıyan kullanıcı ayarları (ör. uygulamanızın verileri ne sıklıkta senkronize ettiği, yükleme/indirme işlemlerinin yalnızca kablosuz ağda yapılıp yapılmayacağı, dolaşım sırasında veri kullanımının etkin olup olmayacağı vb.) sağlamanız gerekir. Bu kontroller sayesinde kullanıcılar, uygulamanızın ne kadar veri kullandığını tam olarak kontrol edebilecekleri için sınırlara yaklaştıklarında uygulamanızın veri erişimini devre dışı bırakma olasılıkları çok daha düşüktür. Bu ayarlarla bir tercih etkinliği sağlarsanız, bunu manifest dosyasına eklemeniz gerekir ACTION_MANAGE_NETWORK_USAGE için bir amaç filtresi bildirme eyleme dökülebilir. Örnek:

<activity android:name="DataPreferences" android:label="@string/title_preferences">
    <intent-filter>
       <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
       <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Bu intent filtresi, uygulamanızın veri kullanımını kontrol eden etkinliğin bu olduğunu sisteme gösterir. Bu nedenle, kullanıcı Ayarlar uygulamasından uygulamanızın ne kadar veri kullandığını kontrol ettiğinde, tercih etkinliğinizi başlatan bir "Uygulama ayarlarını görüntüle" düğmesi gösterilir. Böylece kullanıcı, uygulamanızın ne kadar veri kullandığını hassaslaştırabilir.

Ayrıca getBackgroundDataSetting() öğesinin artık şu anda desteği sonlandırıldı ve her zaman doğru değerini döndürüyor. Bunun yerine getActiveNetworkInfo() değerini kullanın. Herhangi bir ağ işlemine başlamadan önce, mevcut ağı temsil eden NetworkInfo değerini almak için her zaman getActiveNetworkInfo() işlevini çağırmalı ve cihazın bağlantısı olup olmadığını kontrol etmek için isConnected() işlevini sorgulamalısınız. Ardından, cihazın diğer bağlantı özelliklerini (ör. cihazın dolaşımdayken veya kablosuz ağa bağlı olduğundan emin olun.

Kurumsal

Android 4.0 aşağıdaki özelliklerle kurumsal uygulama yeteneklerini genişletir.

VPN hizmetleri

Yeni VpnService, uygulamaların kendi VPN'sini (Sanal Özel Ağ) Service olarak çalışır. VPN hizmeti, kendi adresi ve yönlendirme kurallarına sahip bir sanal ağ için bir arayüz oluşturur ve tüm okuma ve yazma işlemlerini bir dosya tanımlayıcısı ile gerçekleştirir.

Bir VPN hizmeti oluşturmak için VpnService.Builder kullanarak bir VPN hizmeti oluşturun. ağ adresi, DNS sunucusu, ağ rotası ve daha fazlası. İşlem tamamlandığında establish() çağrısı yaparak arayüzü oluşturabilirsiniz. Bu çağrı, bir ParcelFileDescriptor döndürür.

Bir VPN hizmeti paketlere müdahale edebildiğinden güvenlik sorunları vardır. Dolayısıyla, VpnService uygulamak durumunda, hizmetinizin yalnızca sistemin bağlanabildiğinden emin olmak için BIND_VPN_SERVICE yönergesini zorunlu tutması gerekir (yalnızca sisteme bu izin verilir, uygulamalar bu izni isteyemez). Daha sonra VPN hizmetinizi kullanmak için Kullanıcıların sistem ayarlarında bunu manuel olarak etkinleştirmesi gerekir.

Cihaz politikaları

Cihaz kısıtlamalarını yöneten uygulamalar artık setCameraDisabled() ve USES_POLICY_DISABLE_CAMERA mülkünü (politika yapılandırma dosyasında bir <disable-camera /> öğesiyle uygulanır) kullanarak kamerayı devre dışı bırakabilir.

Sertifika yönetimi

Yeni KeyChain sınıfı, içe aktarma ve erişim için API'ler sunar. anahtar deposunda bulunan sertifika programıdır. Sertifikalar hem istemcinin hem de istemcinin sertifikaları (kullanıcının kimliğini doğrulamak için) ve sertifika yetkilisi sertifikalarını (kullanıcının kimliğini sunucu kimliğini doğrulayın). Web tarayıcıları veya e-posta istemcileri gibi uygulamalar, sunucularda kullanıcıların kimliğini doğrulamak için yüklü sertifikalara erişebilir. KeyChain inceleyin. dokümanlarına göz atabilirsiniz.

Cihaz Sensörleri

Android 4.0'a iki yeni sensör türü eklendi:

Bir cihazda hem TYPE_AMBIENT_TEMPERATURE hem de TYPE_RELATIVE_HUMIDITY sensörü varsa çiy noktasını hesaplamak için bunları kullanabilirsiniz mutlak nem gibi.

Önceki sıcaklık sensörü (TYPE_TEMPERATURE) desteği sonlandırıldı. TYPE_AMBIENT_TEMPERATURE sensörünü kullanmalısınız .

Ayrıca Android'in üç sentetik sensörü de büyük ölçüde iyileştirildi. Bu sayede artık daha düşük gecikmeye ve daha akıcı çıkışa sahipler. Bu sensörler arasında yer çekimi sensörü (TYPE_GRAVITY), dönme vektörü sensörü (TYPE_ROTATION_VECTOR) ve doğrusal hızlanma sensörü (TYPE_LINEAR_ACCELERATION) bulunur. Geliştirilmiş sensörler, çıktılarını iyileştirmek için jiroskop sensöründen yararlanır. Bu nedenle, bu sensörler yalnızca jiroskop bulunan cihazlarda görünür.

İşlem Çubuğu

ActionBar, çeşitli yeni davranışları desteklemek için güncellendi. En sık Daha da önemlisi, sistem aynı bilgisayarda işlem çubuğunun boyutunu ve yapılandırmasını da kullanarak tüm ekran boyutlarında en iyi kullanıcı deneyimini sunun. Örneğin, Ekran dar olduğunda (örneğin, cihaz dikey yönde olduğunda), işlem çubuğunun gezinme sekmeleri "yığılmış çubukta" görünür. ana işlem çubuğunun hemen altında görünür. Şunları yapabilirsiniz: “Bölünmüş işlem çubuğunu” da etkinleştirin Bu sekme, tüm işlem öğelerini sayfanın alt kısmında ekranın küçük bir kısmını kapsayabilir.

Bölünmüş işlem çubuğu

İşlem çubuğunuz birkaç işlem öğesi içeriyorsa bunların tümü dar ekrandaki işlem çubuğuna sığmaz. Bu nedenle sistem, bunların daha fazlasını taşma menüsüne yerleştirir. Ancak Android 4.0 "bölme işlem çubuğunu" etkinleştirmenize olanak tanır. ekranda daha fazla eylem öğesinin ayrı bir çubuk kullanın. Bölünmüş işlem çubuğunu etkinleştirmek için android:uiOptions öğesini "splitActionBarWhenNarrow" ile birlikte <application> etiket veya ayrı <activity> etiketleri manifest dosyanıza ekleyin. Bu seçenek etkinleştirildiğinde sistem, ekran dar olduğunda tüm işlem öğeleri için ekranın alt kısmına ek bir çubuk ekler (birincil işlem çubuğunda işlem öğesi görünmez).

ActionBar.Tab API'leri tarafından sağlanan gezinme sekmelerini kullanmak istiyorsanız ancak üstte ana işlem çubuğuna ihtiyacınız yoksa (üstte yalnızca sekmelerin görünmesini istiyorsanız) yukarıda açıklandığı gibi bölünmüş işlem çubuğunu etkinleştirin ve işlem çubuğundaki uygulama simgesini devre dışı bırakmak için setDisplayShowHomeEnabled(false) işlevini de çağırın. Ana işlem çubuğunda hiçbir şey kalmadığında, kaybolur; geriye yalnızca üst kısımdaki gezinme sekmeleri ve dokunun.

İşlem çubuğu stilleri

İşlem çubuğuna özel stil uygulamak istiyorsanız arka plan uygulamak için backgroundStacked ve backgroundSplit yeni stil özelliklerini kullanabilirsiniz çizilebilir veya renklendirmeyi ayrı ayrı seçebilirsiniz. Bu stilleri şu adresten de ayarlayabilirsiniz: setStackedBackgroundDrawable() ve setSplitBackgroundDrawable() ile çalışma zamanı.

İşlem sağlayıcı

Yeni ActionProvider sınıfı, aşağıdakiler için özel bir işleyici oluşturmanızı sağlar: yapılacak işler listesidir. İşlem sağlayıcı, ilişkilendirildiği her işlem öğesi için bir işlem görünümü, varsayılan işlem davranışı ve alt menü tanımlayabilir. Dinamik davranışlara (değişken işlem görünümü, varsayılan işlem veya alt menü gibi) sahip bir işlem öğesi oluşturmak istediğinizde, parçanızdaki veya etkinliğinizdeki çeşitli işlem öğesi dönüşümlerini işlemek yerine ActionProvider'ü genişletmek, yeniden kullanılabilir bir bileşen oluşturmak için iyi bir çözümdür.

Örneğin, ShareActionProvider, işlem çubuğundan "paylaş" işlemini kolaylaştıran ActionProvider uzantısıdır. Bunun yerine ACTION_SEND amacını çağıran geleneksel işlem öğesini seçerseniz İşleyen uygulamaların açılır listesiyle bir işlem görünümü sunmak için bu işlem sağlayıcıyı ACTION_SEND niyeti. Kullanıcı işlem için kullanılacak bir uygulama seçtiğinde ShareActionProvider bu seçimi hatırlar ve ilgili uygulamayla paylaşıma daha hızlı erişmek için işlem görünümünde sunar.

Bir işlem öğesi için işlem sağlayıcı bildirmek isterseniz android:actionProviderClass ekleyin özelliğinin seçenekler menüsündeki <item> öğesinde, işlemin sınıf adıyla birlikte pekiştirir. Örnek:

<item android:id="@+id/menu_share"
      android:title="Share"
      android:showAsAction="ifRoom"
      android:actionProviderClass="android.widget.ShareActionProvider" />

Etkinliğinizin onCreateOptionsMenu() geri arama yönteminde, menü öğesinden işlem sağlayıcının bir örneğini alın ve amacı ayarlayın:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.options, menu)
    val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider
    // Set the share intent of the share action provider.
    shareActionProvider?.setShareIntent(createShareIntent())
    ...
    return super.onCreateOptionsMenu(menu)
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);
    ShareActionProvider shareActionProvider =
          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
    // Set the share intent of the share action provider.
    shareActionProvider.setShareIntent(createShareIntent());
    ...
    return super.onCreateOptionsMenu(menu);
}

ShareActionProvider kullanılan bir örnek için ApiDemos'taki ActionBarShareActionProviderActivity öğesine bakın.

Daraltılabilir işlem görünümleri

İşlem görünümü sağlayan işlem öğeleri artık işlem görünümü durumları ile işlem görünümü durumları arasında geleneksel işlem öğesi durumu. Daha önce yalnızca SearchView destekleniyordu daraltılabilir. Ancak artık istediğiniz işlem öğesi için bir işlem görünümü ekleyebilir ve genişletilmiş durum (işlem görünümü görünür) ve daraltılmış durum (işlem öğesi görünür).

İşlem görünümü içeren bir işlem öğesinin daraltılabilir olduğunu bildirmek için menünün XML dosyasında <item> öğesinin android:showAsAction özelliğine “collapseActionView" işaretini ekleyin.

Bir işlem görünümü genişletilmiş ve daraltılmış arasında geçiş yaptığında geri çağırma almak için setOnActionExpandListener()'yi çağırarak ilgili MenuItem ile bir MenuItem.OnActionExpandListener örneği kaydedin. Genellikle bunu onCreateOptionsMenu() geri çağırma sırasında yapmanız gerekir.

Daraltılabilir işlem görünümünü kontrol etmek için ilgili MenuItem üzerinde collapseActionView() ve expandActionView() işlevlerini çağırabilirsiniz.

Özel işlem görünümü oluştururken, görünüm genişletildiğinde ve daraltıldığında geri çağırma almak için yeni CollapsibleActionView arayüzünü de uygulayabilirsiniz.

İşlem çubuğu için diğer API'ler

  • setHomeButtonEnabled() aşağıdakileri belirtmenize olanak tanır: Simgenin/logonun ana sayfaya veya "yukarı" düğmesine gitmek için bir düğme gibi davranıp davranmadığı (şeklinde olması için "true" değerini girin) bir düğme).
  • setIcon() ve setLogo(), işlem çubuğu simgesini veya logosunu çalışma zamanında tanımlamanıza olanak tanır.
  • Fragment.setMenuVisibility(), şunları etkinleştirmenize olanak tanır: veya parça tarafından tanımlanan seçenekler menüsü öğelerinin görünürlüğünü devre dışı bırakın. Bu, parçası etkinliğe eklendi ancak görünür değil. Bu nedenle menü öğeleri, gizlendi.
  • FragmentManager.invalidateOptionsMenu(). parça yaşam döngüsünün çeşitli durumları sırasında etkinlik seçenekleri menüsünü geçersiz kılmanıza olanak tanır. Activity ile eşdeğer yöntemin kullanılmasının mümkün olmayabileceği durumlar.

Kullanıcı Arayüzü ve Görünümler

Android 4.0, çeşitli yeni görünümler ve diğer kullanıcı arayüzü bileşenleri sunar.

Izgara Düzeni

GridLayout, alt görüntülemeleri dikdörtgen içine yerleştiren yeni bir görünüm grubudur ızgara. TableLayout işlevinin aksine GridLayout, hiyerarşisini kullanır ve yapı sağlamak için tablo satırları gibi ara görünümlerden yararlanmaz. Bunun yerine, alt öğeler hangi satır ve sütunların yer alacağını belirtir (hücreler birden çok satır ve/veya sütunlar) gösterilir ve varsayılan olarak tablodaki satır ve sütunlara sıralı olarak yerleştirilir. GridLayout yönü, sıralı alt öğelerin sıralı olarak yapılıp yapılmadığını arka planlardan birine yerleştirilecektir. Alt öğeler arasındaki boşluk Yeni Space görünümünün örneklerini veya ilgili kenar boşluğu parametrelerini ayarlayarak anlayabiliyoruz.

ApiDemos'a göz atın GridLayout kullanan örnekler için.

Doku Görünümü

TextureView, şunun gibi bir içerik akışı göstermenize olanak tanıyan yeni bir görünümdür: bir video veya OpenGL sahnesi olarak kullanın. SurfaceView'e benzer olsa da TextureView, ayrı bir pencere oluşturmak yerine normal bir görünüm gibi davranır. Bu nedenle, diğer tüm View nesneleri gibi onu da kullanabilirsiniz. Örneğin, dönüşümler uygulayabilir, ViewPropertyAnimator kullanarak animasyon ekleyebilir veya setAlpha() ile opaklığını ayarlayabilirsiniz.

TextureView işlevinin yalnızca donanım hızlandırmalı bir pencerede çalıştığını unutmayın.

Daha fazla bilgi için TextureView belgelerine bakın.

Widget'ı değiştir

Yeni Switch widget'ı iki durumlu bir açma/kapatma düğmesidir ve kullanıcıların tek bir öğeye sürüklenmesine olanak tanır bir seçenek için iki durum arasında geçiş yapmak üzere iki durum arasında geçiş yapın.

Metni belirtmek için android:textOn ve android:textOff özelliklerini kullanabilirsiniz açık ve kapalı ayarındayken anahtarda görünür. android:text özelliği de anahtarın yanına etiket yerleştirmenize olanak tanır.

Anahtarların kullanıldığı bir örnek için switches.xml düzen dosyasına bakın ve ilgili Geçişler etkinliği.

Android 3.0, belirttiğiniz bir ana noktada (genellikle seçili öğenin bulunduğu noktada) pop-up olarak açılan kısa bağlama dayalı menüler oluşturmak için PopupMenu'ü kullanıma sundu. Android 4.0'ın kapsamı PopupMenu, bazı faydalı özelliklere sahip:

Tercihler

İki durumlu seçim seçeneği sunan tercihler için temel olarak yeni bir TwoStatePreference soyut sınıf kullanılır. Yeni SwitchPreference, TwoStatePreference öğesinin bir uzantısıdır veSwitch kullanıcıların ek bir veya iletişim kutusunu seçin. Örneğin, Ayarlar uygulamasında kablosuz bağlantı ve Bluetooth ayarları için SwitchPreference simgesi kullanılır.

Sistem temaları

Android 4.0'ı hedefleyen tüm uygulamalar için varsayılan tema (targetSdkVersion veya minSdkVersion - “14" veya üzeri) artık "cihaz varsayılanı" tema: Theme.DeviceDefault. Bu, koyu Holo teması veya söz konusu cihaz tarafından tanımlanan farklı bir koyu tema.

Android'in aynı sürümünü çalıştıran cihazlarda Theme.Holo tema ailesinin değişmemesi garanti edilir. Theme.Holo temalarından herhangi birini işlemlerinize açıkça uygularsanız bu temaların aynı platform sürümünün farklı cihazlarında karakterinin değişmeyeceğinden emin olabilirsiniz.

Uygulamanızın genel cihaz temasıyla uyumlu olmasını istiyorsanız (ör. farklı OEM'ler sistem için farklı varsayılan temalar sağladığında) Theme.DeviceDefault ailesindeki temaları açıkça uygulamanız gerekir.

Seçenekler menüsü düğmesi

Android 4.0'dan itibaren, cep telefonlarında artık Menü donanım düğmesine ihtiyaç duyulmadığını fark edeceksiniz. Ancak, mevcut uygulamanız bir seçenek menüsü sunuyorsa ve bir güncellemenin olmasını bekliyorsa, bu konuda endişelenmenize gerek yoktur Menü düğmesi. Mevcut uygulamaların beklendiği gibi çalışmaya devam etmesini sağlamak için sistem, Android'in eski sürümleri için tasarlanmış uygulamalara ilişkin ekrandaki Menü düğmesi.

En iyi kullanıcı deneyimi için, yeni ve güncellenmiş uygulamalarda menü öğelerine erişim izni vermek üzere ActionBar kullanılmalı ve targetSdkVersion şuna ayarlanmalıdır: "14" gibi en yeni çerçeve varsayılan davranışlarından yararlanabilirsiniz.

Sistem kullanıcı arayüzü görünürlüğüyle ilgili kontroller

Android'in kullanıma sunulduğu ilk günlerden beri sistem, Android'de durum çubuğu, operatör gibi bilgileri sağlamak için telefon cihazlarının üst kısmında bulunur sinyal, saat, bildirimler vb. Android 3.0, tablet cihazlar için sistem çubuğu ekledi. Bu çubuk, sistem gezinme kontrolleri (Ana Sayfa, Geri vb.) sağlamak için ekranın alt kısmında bulunur ve geleneksel olarak durum çubuğu tarafından sağlanan öğeler için bir arayüz sunar. Android 4.0'ta sistem, gezinme çubuğu adı verilen yeni bir sistem kullanıcı arayüzü sağlar. Siz gezinme çubuğunu, sistem çubuğunun yeniden ayarlanmış bir sürümü olarak mobil cihazlar - gezinme denetimleri sağlar cihazlar için sistemde gezinmeye yönelik donanım eşdeğerlerine sahip olmayan ancak Android'i kontrol edebilirsiniz. Bu nedenle, gezinme çubuğu sunan bir cihazda üstte durum çubuğu da bulunur.

Bugüne kadar, FLAG_FULLSCREEN işaretini kullanarak mobil cihazlarda durum çubuğunu gizleyebilirsiniz. Android 4.0'ta, sistem çubuğunun görünürlüğünü kontrol eden API'ler hem sistem çubuğunun hem de gezinme çubuğunun davranışını daha iyi yansıtacak şekilde güncellendi:

  • SYSTEM_UI_FLAG_LOW_PROFILE işareti, STATUS_BAR_HIDDEN işaretinin yerini alır. Bu işaret ayarlandığında sistem çubuğu veya gezinme çubuğu için "düşük profil" modu etkinleştirilir. Gezinme düğmeleri kararır ve sistem çubuğundaki diğer öğeler de gizlenir. Bu özelliği etkinleştirmek, sistem gezinme düğmelerinin dikkat dağıtmasını önleyerek daha sürükleyici oyunlar oluşturmanıza yardımcı olur.
  • SYSTEM_UI_FLAG_VISIBLE işareti, sistem çubuğunun veya gezinme çubuğunun görünür olmasını istemek için STATUS_BAR_VISIBLE işaretinin yerini alır.
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION, istenen yeni bir işarettir tamamen gizlenir. Bunun yalnızca gezinme çubuğu için çalıştığını unutmayın (tabletlerdeki sistem çubuğunu gizlemez). Gezinme sistem kullanıcı girişini alır almaz çubuğu görünüme geri döner. Bu nedenle, bu mod birincil olarak video oynatma veya tüm ekranın gerekli olduğu, ancak kullanıcı girişinin olduğu diğer durumlarda gerekmez.

Etkinliğinizdeki herhangi bir görünümde setSystemUiVisibility() çağrısı yaparak bu işaretlerin her birini sistem çubuğu ve gezinme çubuğu için ayarlayabilirsiniz. Pencere yöneticisi, pencerenizdeki tüm görünümlerdeki tüm işaretleri birleştirir (VEYA birlikte) ve pencerenizde giriş odağı olduğu sürece bunları sistem kullanıcı arayüzüne uygular. Pencerenizde giriş olmadığında odaklanılırsa (kullanıcı uygulamanızdan ayrılırsa veya bir iletişim kutusu görüntülenirse) işaretlemelerinizin geçerliliğini yitirmesi gerekir. Benzer şekilde, bu görünümleri görünüm hiyerarşisinden kaldırırsanız işaretleri artık geçerli olmaz.

Etkinliğinizdeki diğer etkinlikleri, sistem arayüzünde yapılan görünürlük değişiklikleriyle ( kullanıcı arayüzü gizlendiğinde işlem çubuğunu veya diğer kullanıcı arayüzü kontrollerini gizlemek için bir View.OnSystemUiVisibilityChangeListener görünür olduğunda bilgilendirileceksiniz veya gezinme çubuğundaki değişikliklerin özetini görebilirsiniz.

Farklı sistem kullanıcı arayüzü seçeneklerinin gösterildiği OverscanActivity sınıfına bakın.

Giriş Çerçevesi

Android 4.0, fareyle üzerine gelme etkinlikleri, yeni ekran kalemi ve fare düğmesi etkinlikleri için destek sağlar.

Fareyle öğelerin üzerine gelerek yapılan etkinlikler

View sınıfı artık işaretçi cihazlar (fare veya ekranda imleci hareket ettiren diğer cihazlar gibi) kullanılarak daha zengin etkileşimler sağlamak için "fareyle üzerine gelme" etkinliklerini destekliyor.

Bir görünümde fareyle üzerine gelme etkinliklerini almak için View.OnHoverListener ve setOnHoverListener() ile kaydettirin. Görüntüleme sırasında fareyle üzerine gelme etkinliği gerçekleştiğinde dinleyiciniz, etkinliği alan View öğesini ve gerçekleşen fareyle üzerine gelme etkinliğinin türünü açıklayan bir MotionEvent öğesini sağlayan onHover() çağrısı alır. Fareyle üzerine gelme etkinliği aşağıdakilerden biri olabilir:

Fareyle üzerine gelme etkinliğini ele alıyorsa View.OnHoverListener, onHover()'ten true değerini döndürmelidir. Dinleyiciniz yanlış döndürürse fareyle üzerine gelme etkinliği her zamanki gibi üst görünüme gönderilir.

Uygulamanızda, görünümünü mevcut duruma göre değiştiren düğmeler veya başka widget'lar kullanılıyorsa artık imleç görünümün üzerine geldiğinde farklı bir arka plan çizilebilir öğesi sağlamak için durum listesi çizilebilir öğesinde android:state_hovered özelliğini kullanabilirsiniz.

Yeni fareyle üzerine gelme etkinliklerinin bir demosu için Fover sınıfına bakın ApiDemos.

Ekran kalemi ve fare düğmesi etkinlikleri

Android artık dijitalleştirici gibi bir ekran kalemi giriş cihazından giriş almak için API'ler sağlıyor. tablet çevre birimi veya ekran kalemi özellikli dokunmatik ekran.

Ekran kalemi girişi, dokunmatik veya fare girişine benzer şekilde çalışır. Dokunmatik kalem sayısallaştırıcıyla temas halindeyken uygulamalar, ekrana dokunmak için parmak kullanıldığında olduğu gibi dokunma etkinlikleri alır. Ekran kalemi dijitalleştiricinin üzerine geldiğinde uygulamalar fareyle üzerine gelindiğinde Etkinlikleri, herhangi bir düğme yokken fare işaretçisi ekranda hareket ettirildiğinde olduğu gibi tuşuna basıldığından emin olun.

Uygulamanız, "araç türü" getToolType() kullanılarak MotionEvent içindeki her bir işaretçiyle ilişkilendirilmiştir. Şu anda tanımlı olan araç türleri şunlardır: TOOL_TYPE_UNKNOWN, TOOL_TYPE_FINGER, TOOL_TYPE_MOUSE, TOOL_TYPE_STYLUS, ve TOOL_TYPE_ERASER. Uygulamanız, araç türünü sorguladığında ekran kalemi girişini parmak veya fare girişinden farklı şekillerde işlemeyi seçebilir.

Uygulamanız ayrıca "düğmesini" sorgulayarak hangi fare veya ekran kalemi düğmelerine basıldığını da durum" getButtonState() kullanan bir MotionEvent. Şu anda tanımlanmış düğme durumları şunlardır: BUTTON_PRIMARY, BUTTON_SECONDARY, BUTTON_TERTIARY, BUTTON_BACK ve BUTTON_FORWARD. Kolaylık sağlamak için geri ve ileri fare düğmeleri otomatik olarak KEYCODE_BACK ve KEYCODE_FORWARD tuşlarıyla eşlenir. Uygulamanız, fare düğmesine dayalı geri ve ileri gezinmeyi desteklemek için bu tuşları işleyebilir.

Temasın konumunu ve basıncını hassas bir şekilde ölçmenin yanı sıra ekran kalemi girişi cihazlar, ekran kalemi ucu ile dijitalleştirici arasındaki mesafeyi, ekran kaleminin yatırma açısını ve ve ekran kalemi yön açısı. Uygulamanız, AXIS_DISTANCE, AXIS_TILT ve AXIS_ORIENTATION eksen kodlarıyla getAxisValue() kullanarak bu bilgileri sorgulayabilir.

Araç türlerinin, düğme durumlarının ve yeni eksen kodlarının demosu için bkz. Dokunmatik Boya sınıfına girer.

Özellikler

Yeni Property sınıfı, herhangi bir nesnede bir mülkü belirtmenin hızlı, verimli ve kolay bir yolunu sunar. Bu yol, arayanların hedef nesnelerde değerleri genel olarak ayarlamalarına/almasına olanak tanır. Aynı zamanda Alan/yöntem referanslarının üzerinden geçme işlevine olanak tanır ve kodun değer ayarlamasına/almasına olanak tanır bilmeden bir mülkle uyumlu hale getirmeyi amaçlıyoruz.

Örneğin, foo nesnesindeki bar alanının değerini ayarlamak için şunları yapmıştı:

Kotlin

foo.bar = value

Java

foo.bar = value;

Temel bir özel alan bar için ayarlayıcıyı çağırmak istiyorsanız daha önce bunu yapardınız:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

Ancak foo örneğini iletmek ve başka bir kodun bar değerini ayarlamasını istiyorsanız Android 4.0'tan önce bunu yapmanın bir yolu yoktur.

Property sınıfını kullanarak bir Property tanımlayabilirsiniz. Foo sınıfındaki BAR nesnesini görüntüler. Böylece alanı, foo örneğindeki alanı ayarlayabilirsiniz. Foo sınıfı şuna benzer:

Kotlin

BAR.set(foo, value)

Java

BAR.set(foo, value);

View sınıfı artık Android 3.0'a eklenen dönüştürme özellikleri (ROTATION, ROTATION_X, TRANSLATION_X vb.) gibi çeşitli alanları ayarlamanıza olanak tanımak için Property sınıfından yararlanıyor.

ObjectAnimator sınıfı da Property alanını kullanır. sınıfını kullanmak için, dizeye göre daha hızlı, daha verimli ve tür açısından daha güvenli olan Property içeren bir ObjectAnimator oluşturabilirsiniz. bahsedeceğiz.

Donanım Hızlandırma

Android 4.0 sürümünden itibaren, uygulaması targetSdkVersion veya minSdkVersion - “14" veya daha yüksek. Donanım hızlandırma genellikle daha akıcı animasyonlar sağlar. ve genel olarak daha iyi performans ve kullanıcı etkileşimine yanıt sağlar.

Gerekirse hardwareAccelerated ile donanım hızlandırmayı manuel olarak devre dışı bırakabilirsiniz bağımsız <activity> öğeleri veya <application> için özelliği öğesine dokunun. Alternatif olarak, setLayerType(LAYER_TYPE_SOFTWARE) öğesini çağırarak donanım hızlandırmayı tek tek görünümler için devre dışı bırakabilirsiniz.

Desteklenmeyen çizim işlemlerinin listesi de dahil olmak üzere donanım hızlandırması hakkında daha fazla bilgi için Donanım Hızlandırması belgesine bakın.

JNI Değişiklikleri

Android'in önceki sürümlerinde JNI yerel referansları dolaylı tutamak değildi; Android doğrudan işaretçiler kullanıyordu. Çöp toplayıcı nesneleri hareket ettirmediği sürece bu sorun işe yarıyormuş gibi görünüyordu, çünkü hatalı kod yazmayı mümkün kılıyordu. Android 4.0'da sistem artık dolaylı referanslar da alabilir.

JNI yerel referanslarıyla ilgili tüm ayrıntılar "Yerel ve Küresel Referanslar" bölümünde açıklanmıştır. JNI İpuçları'na bakın. Android 4.0'da, CheckJNI, bu hataları algılayacak şekilde geliştirilmiştir. Yakında yayınlanacak bir gönderi için Android Geliştiricileri Blogu'nu izleyin JNI referanslarında sık karşılaşılan hatalar ve bunları nasıl düzeltebileceğiniz hakkında daha fazla bilgi edinin.

JNI uygulamasındaki bu değişiklik yalnızca targetSdkVersion veya minSdkVersion - “14" veya daha yüksek. Bu özellikleri daha düşük bir değere ayarlarsanız JNI yerel referansları önceki sürümlerdekiyle aynı şekilde çalışır.

WebKit

  • WebKit 534.30 sürümüne güncellendi
  • WebView ve yerleşik tarayıcıda Hint yazı tipleri (glifleri birleştirmek için gereken karmaşık karakter desteği dahil olmak üzere Devanagari, Bengalce ve Tamil) için destek
  • WebView ve yerleşik tarayıcıda Etiyopya, Gürcüce ve Ermenice yazı tipleri için destek
  • WebDriver desteği, WebView

Android Tarayıcı

Tarayıcı uygulaması, web uygulamalarını desteklemek için aşağıdaki özellikleri ekler:

İzinler

Yeni izinler şunlardır:

Cihaz Özellikleri

Yeni cihaz özellikleri şunlardır:

  • FEATURE_WIFI_DIRECT: Uygulamanın eşler arası iletişim için kablosuz ağ kullandığını belirtir.

Android 4.0'daki (API Düzeyi) tüm API değişikliklerinin ayrıntılı görünümü için 14) API Farklılıkları Raporu'na bakın.

Önceki API'ler

Yukarıdaki her şeye ek olarak, Android 4.0 önceki sürümlerdeki tüm API'leri doğal olarak destekler. Android 3.x platformu yalnızca büyük ekranlı cihazlarda kullanılabildiğinden, öncelikle cep telefonları için geliştirme yapıyorsanız son sürümlerde Android'e eklenen tüm API'lerden haberdar olmayabilirsiniz.

Atlamış olabileceğiniz ve artık cep telefonlarında da kullanılabilen en önemli API'lerden bazılarına göz atın:

Android 3.0
  • Fragment: Bir etkinliğin farklı öğelerini, kendi kullanıcı arayüzlerini ve yaşam döngülerini tanımlayan bağımsız modüllere ayırmanıza olanak tanıyan bir çerçeve bileşeni. Bkz. Parçalar geliştirici kılavuzu.
  • ActionBar: Ekranın üst kısmındaki geleneksel başlık çubuğunun yerini alan işlem penceresi açılır. Sol köşede uygulama logosunu içerir ve yeni bir menü öğeleri arayüzü. Bkz. İşlem Çubuğu geliştirici kılavuzu.
  • Loader: Eşzamansız özelliği kolaylaştıran bir çerçeve bileşeni JavaScript'i engellemeden verileri dinamik olarak yüklemek için kullanıcı arayüzü bileşenleriyle birlikte ana ileti dizisidir. Yükleyiciler geliştirici kılavuzuna bakın.
  • Sistem panosu: Uygulamalar, sistem genelindeki panosuna veri (yalnızca metin dışında) kopyalayıp yapıştırabilir. Kırpılan veriler düz metin, URI veya intent olabilir. Kopyala ve Yapıştır geliştirici kılavuzuna bakın.
  • Sürükle ve bırak: Görüntü çerçevesine yerleştirilmiş ve sürükle ve bırak işlemlerini kolaylaştıran bir API grubu. Bkz. Sürükle ve Bırak geliştirici kılavuzu.
  • Yepyeni ve esnek bir animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çizimlenebilir, Kırıntı, Nesne veya başka bir şey) rastgele özelliklerini canlandırmanıza ve süre, kesme, tekrarlama gibi animasyon özelliklerini tanımlamanıza olanak tanır. Yeni çerçeve, Android'de Animasyonlar'ı sağlar hiç olmadığı kadar kolay hale geldi. Bkz. Mülk Animasyonu geliştiricisi rehberini inceleyin.
  • RenderScript grafik ve işlem motoru: RenderScript, yüksek performanslı bir 3D sunar C (C99 standardı) dilinde yazdığınız yerel düzeyde grafik oluşturma ve hesaplama API'si hem yerel ortamdan beklediğiniz performansı sunarken hem de taşınabilir ve GPU'larda kullanılıyor. Bkz. RenderScript geliştiricisi rehberini inceleyin.
  • Donanım hızlandırmalı 2D grafikler: Artık manifest öğenizin <application> öğesinde veya tek tek <activity> öğelerinde {android:hardwareAccelerated="true"} ayarını yaparak uygulamanız için OpenGL oluşturma aracını etkinleştirebilirsiniz. Bu sonuç daha akıcı animasyonlar, daha yumuşak kaydırma ve genel olarak daha iyi performans ve kullanıcıya yanıt bahsedeceğim.

    Not: Uygulamanızın minSdkVersion veya targetSdkVersion değerini "14" veya daha yüksek bir değere ayarlarsanız donanım hızlandırma varsayılan olarak etkinleştirilir.

  • Ve çok, çok daha fazlası. Android 3.0 Platformu'na bakın notlarına bakın.
Android 3.1
  • USB API'leri: Bağlı çevre birimlerini Android uygulamalarıyla entegre etmek için güçlü yeni API'ler. API'ler, hem USB ana makine hem de cihaz etkileşimleri için destek de dahil olmak üzere platforma yerleştirilmiş bir USB yığınını ve hizmetlerini temel alır. USB Ana Makine ve Aksesuar geliştirici kılavuzunu inceleyin.
  • MTP/PTP API'leri: Uygulamalar, bağlı kameralar ve diğer PTP cihazlarıyla doğrudan etkileşime geçerek cihazlar bağlandığında ve cihazlar kaldırıldığında bildirim alabilir, bu cihazlardaki dosyaları ve depolama alanını yönetebilir, ayrıca bu cihazlara dosya ve meta veri aktarabilir. MTP API, MTP (Medya Aktarım Protokolü) spesifikasyonunun PTP (Resim Aktarım Protokolü) alt kümesini uygular. Bkz. android.mtp belgeleri.
  • RTP API'leri: Android, bir API'yi yerleşik RTP (Gerçek Zamanlı Aktarım Protokolü) yığınına sunar. hangi uygulamaların isteğe bağlı veya etkileşimli veri akışını yönetmek için kullanabileceğini belirler. Özellikle, uygulamalar VOIP, bas ve konuş, konferans ve ses akışı gibi özelliklere sahip olan başka yayıncılarla çalışmaya başlamak için mevcut bir ağ üzerinden veri akışı alıp alma adımını gerçekleştirebilir. android.net.rtp dokümanlarına bakın.
  • Kontrol çubuğu ve diğer genel hareket girişleri için destek.
  • Android 3.1 Platformu'na bakın notlarına göz atmanızı öneririm.
Android 3.2
  • Yeni ekranlar, uygulamalarınızın farklı ekran boyutlarında nasıl gösterileceği konusunda size daha fazla kontrol sağlayan API'leri destekler. API, mevcut ekran desteği modelini belirli ekran boyutu aralıklarını, boyutlara göre hassas bir şekilde hedefleme olanağı, genelleştirilmiş piksel birimleri yerine (600 dp veya 720 dp genişlik gibi) yoğunluktan bağımsız piksel birimleri ekran boyutları (büyük veya x büyük gibi). Örneğin, bu bilgi, geleneksel olarak "büyük" ekran olarak sınıflandırılan 5 inçlik bir cihaz ile 7 inçlik bir cihazı ayırt etmenize yardımcı olur. başlıklı blog yayınına bakın Ekran Boyutlarını Yönetmek İçin Yeni Araçlar.
  • <uses-feature> için yeni sabit değerler yatay veya dikey ekran yönü gereksinimlerinizi tanımlamalısınız.
  • Cihazın "ekran boyutu" Ekran yönü sırasında yapılandırma artık değişiyor unutmayın. Uygulamanız API düzeyi 13 veya üstünü hedefliyorsa "orientation" yapılandırma değişikliğini de yapmak istiyorsanız "screenSize" yapılandırma değişikliğini yapmanız gerekir. Görüntüleyin Daha fazla bilgi için android:configChanges.
  • Diğer yeni API'ler için Android 3.2 Platform notlarına bakın.

API düzeyi

Android 4.0 API'ye, sistemde depolanan bir tam sayı tanımlayıcı (14) atanır. "API düzeyi" olarak adlandırılan bu tanımlayıcı, sistemin uygulamayı yüklemeden önce uygulamanın sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.

Android 4.0'ta kullanıma sunulan API'leri uygulamanızda kullanmak için uygulamayı API düzeyi 14 veya üstünü destekleyen bir Android platformu için derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, bir veya daha fazla android:minSdkVersion="14" özelliğini <uses-sdk> öğesine dokunun.

Daha fazla bilgi için API nedir? Düzey mi?