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 ana platform sürümüdür. Aşağıda açıklanan tüm yeni özellikler ve API'lerin yanı sıra Android 4.0, Android 3.x'teki kapsamlı API'ler ve Holografik temalar kümesini daha küçük ekranlara taşıdığı için önemli bir platform sürümüdür. Uygulama geliştirici olarak artık, aynı Android sürümünü (Android 4.0 (API seviyesi 14) veya üzerini çalıştırırken), cep telefonları, tabletler ve diğer cihazlar için optimize edilmiş kullanıcı deneyimi sağlayan tek bir APK ile uygulamanızı geliştirip yayınlamanıza olanak tanıyan birleşik bir API çerçevesine sahipsiniz.

Android 4.0 platformu, geliştiriciler için Android SDK'sı için indirilebilir bir bileşen olarak mevcuttur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör dış görünümü ve daha fazlası bulunur. Android 4.0 sürümünü geliştirmeye veya test etmeye başlamak için Android SDK Yöneticisi'ni kullanarak platformu SDK'nıza indirin.

API'ye Genel Bakış

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

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

ContactsContract sağlayıcısı tarafından tanımlanan kişi API'leri, cihaz sahibinin kişisel profili ve kullanıcıların cihazda yüklü sosyal ağlara bireysel kişileri davet etme özelliği gibi sosyal odaklı yeni özellikleri destekleyecek şekilde genişletilmiştir.

Kullanıcı Profili

Android artık ContactsContract.Profile tablosunda tanımlandığı şekilde cihaz sahibini temsil eden kişisel bir profil içeriyor. Kullanıcı kimliği sağlayan sosyal uygulamalar, ContactsContract.Profile içinde yeni bir ContactsContract.RawContacts girişi oluşturarak kullanıcının profil verilerine katkıda bulunabilir. Diğer bir deyişle, cihaz kullanıcısını temsil eden ham kişiler ContactsContract.RawContacts URI'si tarafından tanımlanan geleneksel ham kişiler tablosuna ait değildir. Bunun yerine, CONTENT_RAW_CONTACTS_URI adresindeki tabloya profil ham kişisi eklemeniz gerekir. Bu tablodaki ham kişiler daha sonra "Ben" etiketli, kullanıcı tarafından görülebilen tek bir profilde toplanır.

Profil için yeni bir ham kişi eklemek için android.Manifest.permission#WRITE_PROFILE izni gerekir. Benzer şekilde, profil tablosundan okumak için android.Manifest.permission#READ_PROFILE iznini istemeniz gerekir. Ancak çoğu uygulamanın, profile veri katkıda bulunurken bile kullanıcı profilini okuması gerekmez. Kullanıcı profilini okumak hassas bir izindir ve kullanıcıların bu profili isteyen uygulamalara şüpheyle yaklaşmalarını beklemelisiniz.

Davet Amacı

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

Uygulamanızı "Bağlantı ekle" listesinde olduğu gibi görünür hale getirmek için uygulamanızın, sosyal ağınızdaki kişi bilgilerini senkronize etmek üzere bir senkronizasyon adaptörü sağlaması gerekir. Daha sonra sisteme, uygulamanızın senkronizasyon yapılandırma dosyasına inviteContactActivity özelliğini ekleyerek INVITE_CONTACT amacına yanıt verdiğini sisteme, davet amacını gönderirken sistemin başlatması gereken etkinliğin tam adıyla birlikte belirtmeniz gerekir. Başlatılan etkinlik, daha sonra söz konusu kişinin URI'sını niyetin verilerinden alıp o kişiyi ağa davet etmek veya o kişiyi kullanıcının bağlantılarına eklemek için gerekli çalışmayı yapabilir.

Büyük boyutlu fotoğraflar

Android artık kişiler için yüksek çözünürlüklü fotoğrafları desteklemektedir. Artık, kişi kaydına bir fotoğraf aktardığınızda sistem bu fotoğrafı hem 96x96 boyutunda küçük resim (önceden olduğu gibi) hem de dosya tabanlı yeni bir fotoğraf deposunda saklanan 256x256 "görüntülü fotoğraf" olarak işler (sistemin seçtiği tam boyutlar gelecekte değişebilir). Veri satırındaki normal PHOTO sütununa büyük bir fotoğraf ekleyerek bir kişiye büyük bir fotoğraf ekleyebilirsiniz. Sistem daha sonra bu fotoğrafı uygun küçük resme işler ve fotoğraf kayıtlarını görüntüler.

İletişim Kullanımı Geri Bildirimi

Yeni ContactsContract.DataUsageFeedback API'leri, kullanıcıların belirli iletişim yöntemlerini (ör. her bir telefon numarasını veya e-posta adresini ne sıklıkta kullandığı) ne sıklıkta kullandığını izlemenize yardımcı olur. Bu bilgiler, her bir kullanıcıyla ilişkilendirilen her iletişim yöntemi için sıralamanın iyileştirilmesine ve her bir kullanıcıyla iletişime geçmek için daha iyi öneriler sağlanmasına yardımcı olur.

Takvim Sağlayıcı

Yeni takvim API'ları, Takvim Sağlayıcı'da depolanan takvimleri, etkinlikleri, katılımcıları, hatırlatıcıları ve uyarıları okumanıza, eklemenize, değiştirmenize ve silmenize olanak tanır.

Çeşitli uygulamalar ve widget'lar, takvim etkinliklerini okumak ve değiştirmek için bu API'leri kullanabilir. Ancak en cazip kullanım alanlarından bazıları, tüm kullanıcının etkinlikleri için birleşik bir konum sunmak amacıyla kullanıcının diğer takvim hizmetlerindeki takvimini Takvim Sağlayıcısı ile senkronize eden senkronizasyon bağdaştırıcılarıdır. Örneğin, Google Takvim etkinlikleri Google Takvim Senkronizasyon Bağdaştırıcısı tarafından Takvim Sağlayıcı ile senkronize edilir. Böylece bu etkinlikler, Android'in yerleşik Takvim uygulaması ile görüntülenebilir.

Takvim Sağlayıcı'daki takvimler ve etkinlikle ilgili bilgiler için veri modeli CalendarContract tarafından tanımlanır. Kullanıcının tüm takvim verileri, çeşitli CalendarContract alt sınıfları tarafından tanımlanan çeşitli tablolarda depolanır:

  • CalendarContract.Calendars tablosu, takvime özel bilgileri içerir. Bu tablodaki her satır, tek bir takvimle ilgili ad, renk, senkronizasyon bilgileri gibi ayrıntıları içerir.
  • CalendarContract.Events tablosu, etkinliğe özel bilgileri içerir. Bu tablodaki her satırda, tek bir etkinlikle ilgili bilgiler (ör. etkinlik başlığı, konumu, başlangıç zamanı, bitiş zamanı vb.) bulunur. Etkinlik bir kez gerçekleşebilir veya birden çok kez yinelenebilir. Katılımcılar, hatırlatıcılar ve genişletilmiş özellikler ayrı tablolarda depolanır ve etkinliğe bağlamak için etkinliğin _ID özelliği kullanılır.
  • CalendarContract.Instances tablosu, bir etkinliğin gerçekleşme zamanını gösterir. Bu tablodaki her satır, tek bir olayı temsil eder. Tek seferlik etkinliklerde örnekler ile etkinlikler bire bir eşlenir. Düzenli etkinliklerde, söz konusu etkinliğin birden fazla kez gerçekleşmesine karşılık gelecek şekilde birden fazla satır otomatik olarak oluşturulur.
  • CalendarContract.Attendees tablosunda etkinlik katılımcısı veya davetli bilgileri yer alır. Her satır, bir etkinliğin tek bir davetlisini temsil eder. Kişinin türünü ve etkinlikteki kişinin yanıtını belirtir.
  • Uyarı/bildirim verileri CalendarContract.Reminders tablosunda yer alır. 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ı, belirtilen takvimin sahibi olan senkronizasyon bağdaştırıcısı tarafından ayarlanan MAX_REMINDERS politikasında belirtilir. Hatırlatıcılar, etkinlik planlanmadan birkaç dakika önce belirtilir ve kullanıcıya hatırlatma yapmak için uyarı, e-posta veya SMS kullanma gibi bir alarm yöntemi belirtir.
  • CalendarContract.ExtendedProperties tablosu, senkronizasyon bağdaştırıcısı tarafından kullanılan opak veri alanlarını içerir. Sağlayıcı, ilgili etkinlikleri silindiğinde bu öğeleri silmek dışında bu tablodaki öğelerle ilgili herhangi bir işlem yapmaz.

Takvim Sağlayıcısı ile bir kullanıcının takvim verilerine erişmek için uygulamanızın READ_CALENDAR (okuma erişimi için) ve WRITE_CALENDAR (yazma erişimi için) iznini istemesi gerekir.

Etkinlik amacı

Yapmak istediğiniz tek şey kullanıcının takvimine bir etkinlik eklemekse Takvim uygulamasında yeni etkinlikler oluşturan bir etkinlik başlatmak için Events.CONTENT_URI tarafından tanımlanan verilerle bir ACTION_INSERT amacı kullanabilirsiniz. Niyeti kullanmak herhangi bir izin gerektirmez ve aşağıdaki ekstra özelliklerle etkinlik ayrıntılarını belirtebilirsiniz:

Sesli Mesaj Sağlayıcı

Yeni Sesli Mesaj Sağlayıcısı, kullanıcıların tüm sesli mesajlarını tek bir görsel sunuda 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. Örneğin, biri telefonun servis sağlayıcısından, diğerleri de VoIP veya diğer alternatif ses hizmetlerinden geliyor olabilir. Bu uygulamalar, sesli mesajlarını cihaza eklemek için Voicemail Provider API'lerini kullanabilir. Daha sonra yerleşik Telefon uygulaması, tüm sesli mesajları kullanıcıya birleştirilmiş bir sunuda sunar. Tüm sesli mesajları okuyabilen tek uygulama sistemin Telefon uygulaması olsa da, sesli mesaj sağlayan her uygulama sisteme eklediği mesajları okuyabilir (ancak diğer hizmetlerdeki sesli mesajları okuyamaz).

Şu anda API'ler, üçüncü taraf uygulamalarının sistemdeki tüm sesli mesajları okumasına izin vermediğinden sesli mesaj API'larını kullanması gereken yegane üçüncü taraf uygulamaları, kullanıcıya sesli mesaj teslim eden uygulamalardır.

VoicemailContract sınıfı, Sesli Mesaj Provder'ı için içerik sağlayıcısını tanımlar. VoicemailContract.Voicemails ve VoicemailContract.Status alt sınıfları, uygulamaların cihazda depolama için sesli mesaj verileri ekleyebileceği tablolar sağlar. Sesli mesaj sağlayıcı uygulaması örneği için Sesli Mesaj Sağlayıcı Demo'ya göz atın.

Multimedya

Android 4.0'da fotoğraf, video ve müzik gibi medyalarla etkileşim kuran uygulamalar için çeşitli yeni API'ler vardır.

Medya Efektleri

Yeni bir medya efektleri çerçevesi, resimlere ve videolara çeşitli görsel efektler uygulamanıza olanak tanır. Örneğin, resim efektleri kırmızı gözü kolayca düzeltmenize, bir resmi gri tonlamaya dönüştürmenize, parlaklığı ayarlamanıza, doygunluğu ayarlamanıza, resmi döndürmenize, balık gözü efekti uygulamanıza ve çok daha fazlasını yapmanıza olanak tanır. Sistem, maksimum performans elde etmek için tüm efekt işlemeyi GPU'da gerçekleştirir.

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. Efekt uyguladığınız dokular bit eşlemlerden, videolardan veya hatta kameradan olabilir. Bununla birlikte, dokuların karşılaması gereken belirli kısıtlamalar vardır:

  1. Bunlar GL_TEXTURE_2D doku görüntüsüne bağlı olmalıdır.
  2. En az bir mipmap düzeyi içermelidir

Effect nesnesi, bir resim çerçevesine uygulayabileceğiniz tek bir medya efekti tanımlar. Effect oluşturmanın temel iş akışı:

  1. OpenGL ES 2.0 içeriğinizden EffectContext.createWithCurrentGlContext() çağrısı yapın.
  2. EffectContext.getFactory() yöntemini çağırmak için döndürülen EffectContext öğesini kullanın. Bu işlem, EffectFactory öğesinin bir örneğini döndürür.
  3. createEffect() yöntemini çağırarak @link android.media.effect.EffectFactory} gibi bir efekt adı (ör. EFFECT_FISHEYE veya EFFECT_VIGNETTE) girin.

setParameter() yöntemini çağırıp parametre adı ile parametre değeri ileterek bir efektin parametrelerini ayarlayabilirsiniz. Her efekt türü, efekt adıyla belgelenen farklı parametreleri kabul eder. Örneğin, EFFECT_FISHEYE, bozulmanın scale için bir parametresine sahiptir.

Bir dokuya efekt uygulamak için Effect üzerinde apply() çağrısı yapın ve giriş dokusu ile genişliği, yüksekliği ve çıkış dokusunu geçirin. Giriş dokusu, GL_TEXTURE_2D doku görüntüsüne bağlı olmalıdır (genellikle glTexImage2D() işlevi çağrılarak yapılır). Birden fazla mipmap düzeyi sağlayabilirsiniz. Çıkış dokusu bir doku görüntüsüne bağlanmamışsa girişle aynı boyuta sahip olan GL_TEXTURE_2D efekti ve bir mipmap düzeyi (0) ile otomatik olarak bağlanır.

EffectFactory'de listelenen tüm efektlerin desteklendiği garanti edilir. Ancak harici kitaplıklarda bulunan bazı ek efektler tüm cihazlar tarafından desteklenmez. Bu nedenle öncelikle isEffectSupported() çağrısı yaparak harici kitaplıktan istenen etkinin desteklenip desteklenmediğini kontrol etmeniz gerekir.

Uzaktan kumanda istemcisi

Yeni RemoteControlClient, medya oynatıcıların cihaz kilit ekranı gibi uzaktan kumanda istemcilerinden oynatma kontrollerini etkinleştirmesine olanak tanır. Medya oynatıcılar, uzaktan kumandada gösterilmek üzere çalan medyayla ilgili parça bilgileri ve albüm kapağı gibi bilgileri de gösterebilir.

Medya oynatıcınız için uzaktan kumanda istemcilerini etkinleştirmek amacıyla, oluşturucusuyla bir RemoteControlClient örneği oluşturup ACTION_MEDIA_BUTTON yayınlayan bir PendingIntent iletin. Amaç, 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 tanımlamak için FLAG_KEY_MEDIA_PREVIOUS ve FLAG_KEY_MEDIA_NEXT gibi bir FLAG_KEY_MEDIA_* işaret grubunu ileterek RemoteControlClient cihazınızda setTransportControlFlags() işlevini çağırmanız gerekir.

Ardından RemoteControlClient kartınızı MediaManager.registerRemoteControlClient() adlı kuruluşa ileterek kaydettirmeniz gerekir. Kaydedildikten sonra, RemoteControlClient somutlaştırırken beyan ettiğiniz yayın alıcısı uzaktan kumandadan bir düğmeye basıldığında ACTION_MEDIA_BUTTON etkinliği alır. Aldığınız niyet, basılan medya tuşu için KeyEvent içerir. Bu anahtarı getParcelableExtra(Intent.EXTRA_KEY_EVENT) ile amaçtan alabilirsiniz.

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

Örnek bir uygulama için Random Music Player'a bakın.

Medya oynatıcı

  • MediaPlayer ürününden online medya oynatma için artık INTERNET izni gerekiyor. İnternetten içerik oynatmak için MediaPlayer uygulamasını kullanıyorsanız manifest dosyanıza INTERNET iznini eklediğinizden emin olun. Aksi takdirde, medya oynatmanız Android 4.0'dan itibaren çalışmaz.
  • setSurface(), video havuzu olarak davranmak için bir Surface tanımlamanıza olanak tanır.
  • setDataSource(), isteğinizle birlikte ek HTTP üstbilgileri göndermenize olanak tanır ve HTTP(S) canlı yayını için yararlı olabilir
  • HTTP(S) canlı yayın artık istekler genelinde 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 Medya Biçimleri bölümüne bakın.

Kamera

Camera sınıfı artık yüz algılamaya, odaklama ve ölçüm alanlarını kontrol etmeye yönelik API'ler içermektedir.

Yüz algılama

Kamera uygulamaları artık yalnızca kişinin yüzünü değil, aynı zamanda gözler ve ağız gibi belirli yüz özelliklerini de algılayan Android yüz algılama API'leriyle yeteneklerini geliştirebiliyor.

Kamera uygulamanızda yüzleri algılamak için setFaceDetectionListener() yöntemini çağırarak bir Camera.FaceDetectionListener kaydetmeniz gerekir. Daha sonra, startFaceDetection() numaralı telefonu arayarak kamera yüzeyinizi başlatabilir ve yüzleri algılamaya başlayabilirsiniz.

Sistem, kamera sahnesinde bir veya daha fazla yüz algıladığında, bir dizi Camera.Face nesne dahil olmak üzere Camera.FaceDetectionListener uygulamanızda onFaceDetection() geri çağırmasını çağırır.

Camera.Face sınıfının bir örneği, algılanan yüz hakkında aşağıdakiler de dahil olmak üzere çeşitli bilgiler sağlar:

  • Kameranın geçerli görüş alanına göre yüzün sınırlarını belirten bir Rect
  • Sistemin, nesnenin insan yüzü olduğundan ne kadar emin olduğunu 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 bulunduğu yeri gösteren birkaç Point nesne

Not: Bazı cihazlarda yüz algılama özelliği desteklenmeyebilir. Bu yüzden, getMaxNumDetectedFaces() yöntemini çağırarak kontrol etmeniz ve döndürülen değerin sıfırdan büyük olduğundan emin olmanız gerekir. Ayrıca bazı cihazlar gözlerin ve ağzın tanımlanmasını desteklemeyebilir. Bu durumda, Camera.Face nesnesindeki bu alanlar boş olur.

Odaklanma ve ölçüm alanları

Kamera uygulamaları artık kameranın odaklamak ve beyaz dengesi ile otomatik pozlamayı ölçmek için kullandığı alanları kontrol edebilir. Her iki özellik de kameranın o anki görünümünün odaklanılması veya ölçülmesi gereken bölgesini belirtmek için yeni Camera.Area sınıfını kullanır. Camera.Area sınıfının bir örneği, alanın sınırlarını Rect ve alanın ağırlığını tanımlar. Bu, söz konusu alanın, ilgili diğer alanlara göre önem düzeyini bir tam sayıyla temsil eder.

Bir odak alanı veya ölçüm alanı ayarlamadan önce, ilk olarak sırasıyla getMaxNumFocusAreas() veya getMaxNumMeteringAreas() yöntemini çağırmalısınız. Bunlar sıfır döndürürse cihaz, ilgili özelliği desteklemiyor demektir.

Kullanılacak odak veya sayılacak alanları belirlemek için setFocusAreas() veya setMeteringAreas() çağrılarını yapmanız yeterlidir. Her biri, odaklama veya ölçüm için dikkate alınacak alanları belirten Camera.Area nesneden List tanesini alır. Örneğin, kullanıcının önizlemedeki bir alana dokunarak odak alanını ayarlamasına olanak tanıyan bir özellik uygulayabilirsiniz. Daha sonra, bu alanı bir Camera.Area nesnesine çevirir ve kameranın sahnedeki bu alana odaklanmasını isteyin. O alandaki odak veya pozlama, bölgedeki sahne değiştikçe sürekli olarak güncellenir.

Fotoğraflar için sürekli otomatik odak

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 parametresini setFocusMode() adresine iletin. Fotoğraf çekmeye hazır olduğunuzda autoFocus() numaralı telefonu arayın. Camera.AutoFocusCallback cihazınız, odaklanmanın gerçekleştirilip gerçekleştirilmediğini belirtmek için hemen bir geri arama alır. Geri çağırmayı aldıktan sonra CAF'yi devam ettirmek için cancelAutoFocus() numarasını aramanız gerekir.

Not: API düzeyi 9'da eklenen FOCUS_MODE_CONTINUOUS_VIDEO kullanılarak video yakalanırken sürekli otomatik odak da desteklenir.

Diğer kamera özellikleri

  • Video kaydederken artık video oturumunu kesintiye uğratmadan fotoğraf kaydetmek için takePicture() adlı kişiyi arayabilirsiniz. Bunu yapmadan önce, donanımın desteklediğinden emin olmak için isVideoSnapshotSupported() çağırmanız gerekir.
  • Artık bu özelliklerin değişmesini önlemek için setAutoExposureLock() ve setAutoWhiteBalanceLock() ile otomatik pozlama ve beyaz dengesini kilitleyebilirsiniz.
  • Artık kamera önizlemesi çalışırken setDisplayOrientation() adlı kişiyi arayabilirsiniz. Daha önce, bunu yalnızca önizlemeye başlamadan önce çağırabiliyordunuz, ancak 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ı bu yayını fotoğraf çekildikten sonra başlatır ve üçüncü taraf kamera uygulamaları da fotoğraf çekildikten sonra bu amacı yayınlamalıdır.
  • Camera.ACTION_NEW_VIDEO: Bu, kullanıcının yeni bir video yakaladığını gösterir. Yerleşik Kamera uygulaması bu yayını video kaydedildikten sonra çağırır ve üçüncü taraf kamera uygulamaları da video çekildikten sonra bu amacı yayınlamalıdır.

Android Işınlama (NFC ile NDEF Push)

Android Beam, NDEF mesajlarını bir cihazdan diğerine ("NDEF Push" olarak da bilinen bir işlem) göndermenizi sağlayan yeni bir NFC özelliğidir. Android Beam'i destekleyen Android destekli iki cihaz, genellikle sırtları birbirine değecek şekilde yakında (yaklaşık 4 cm) olduğunda veri aktarımı başlatılır. NDEF mesajındaki veriler, cihazlar arasında paylaşmak istediğiniz tüm verileri içerebilir. Örneğin, Android ışınını kullanarak Kişiler uygulaması kişileri, YouTube videoları ve Tarayıcı 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. Ardından NdefMessage öğesini sisteme şu iki yöntemden birini kullanarak iletmeniz gerekir:

Sistem NDEF mesajınızı diğer cihaza başarıyla teslim ettikten sonra belirli bir kod çalıştırmak isterseniz NfcAdapter.OnNdefPushCompleteCallback kodunu uygulayabilir ve setNdefPushCompleteCallback() ile ayarlayabilirsiniz. Mesaj teslim edildiğinde sistem onNdefPushComplete() değerini çağırır.

Alıcı cihazda, sistem NDEF Push mesajlarını normal NFC etiketlerine benzer bir şekilde gönderir. Sistem, etkinlik başlatmak için ACTION_NDEF_DISCOVERED işlemiyle bir amaç çağırır. Bu amaç için URL veya MIME türü, NdefMessage içindeki ilk NdefRecord öğesine göre ayarlanır. Yanıtlamak istediğiniz etkinlik için uygulamanızın önemsediği URL'lere veya MIME türlerine yönelik intent filtreleri beyan edebilirsiniz. Etiket Gönderme hakkında daha fazla bilgi için NFC geliştirici kılavuzuna bakın.

NdefMessage öğenizin bir URI taşımasını istiyorsanız artık bir dizeye veya Uri nesnesine dayalı yeni bir NdefRecord oluşturmak için createUri kolaylık yöntemini kullanabilirsiniz. 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 aynı URI şemasını kullanarak etkinliğiniz için bir intent filtresi oluşturmalısınız.

Diğer uygulamalar aynı intent işlemi için filtre uygulasa bile uygulamanızın gelen NDEF mesajını işlediğinden emin olmak için NdefMessage ile bir "Android uygulama kaydı" iletmeniz gerekir. createApplicationRecord() yöntemini çağırıp uygulamanızın paket adını ileterek Android uygulama kaydı oluşturabilirsiniz. Diğer cihaz, uygulama kaydını içeren NDEF mesajını aldığında ve birden fazla uygulama, belirtilen amacı işleyen etkinlikler içerdiğinde, sistem mesajı her zaman uygulamanızdaki etkinliğe iletir (eşleşen uygulama kaydına göre). Hedef cihazda uygulamanız yüklü değilse sistem, Google Play'i başlatmak için Android uygulama kaydını kullanır ve yükleme için kullanıcıyı uygulamaya yönlendirir.

Uygulamanız NDEF Push mesajlaşmasını gerçekleştirmek için NFC API'lerini kullanmıyorsa Android varsayılan davranışı sağlar: Uygulamanız bir cihazda ön plandayken ve Android Beam, Android destekli başka bir cihazla çağrıldığında diğer cihaz, uygulamanızı tanımlayan Android uygulama kaydı içeren bir NDEF mesajı alır. Alıcı cihazda uygulama yüklüyse sistem uygulamayı başlatır. Yüklü değilse Google Play açılır ve yüklemesi için kullanıcıyı uygulamanıza yönlendirir.

NFC ile İlgili Temel Bilgiler geliştirici kılavuzunda Android Beam ve diğer NFC özellikleri hakkında daha fazla bilgi edinebilirsiniz. Android Beam kullanan bazı örnek kodlar için Android Beam Demosu'na bakın.

Kablosuz P2P

Android artık hotspot veya internet bağlantısı olmadan Android destekli cihazlar ile diğer cihaz türleri arasındaki kablosuz ağ eşler arası (P2P) bağlantılarını desteklemektedir (Wi-Fi Alliance'ın Wi-Fi DirectTM sertifika programına uygun olarak). Android çerçevesi, her biri Wi-Fi P2P özelliğini desteklediğinde diğer cihazları keşfedip bunlara bağlanmanıza ve ardından Bluetooth bağlantısından çok daha uzun mesafelerde hızlı bir bağlantı üzerinden iletişim kurmanıza olanak tanıyan bir dizi Wi-Fi P2P API sunar.

Yeni android.net.wifi.p2p paketi, kablosuz ağ ile eşler arası bağlantı kurmaya yönelik tüm API'leri içerir. Birlikte çalışmanız gereken birincil sınıf WifiP2pManager. Bu sınıfı getSystemService(WIFI_P2P_SERVICE) numaralı telefonu arayarak edinebilirsiniz. WifiP2pManager, aşağıdakileri yapmanıza olanak tanıyan API'ler içerir:

  • initialize() numaralı telefonu arayarak P2P bağlantılar için uygulamanızı başlatın
  • discoverPeers() numaralı telefonu arayarak yakındaki cihazları keşfedin
  • connect() numaralı telefonu arayarak P2P bağlantısı başlatın
  • Daha birçok avantaj

Diğer arayüzler ve sınıflar da gereklidir, örneğin:

  • WifiP2pManager.ActionListener arayüzü, eşleri keşfetme veya bunlara bağlanma gibi işlemler başarılı ya da başarısız olduğunda geri çağırma yapmanızı sağlar.
  • WifiP2pManager.PeerListListener arayüzü, keşfedilen benzerler hakkında bilgi almanıza olanak tanır. Geri çağırma işlevi bir WifiP2pDeviceList sağlar. Buradan aralık içindeki her cihaz için bir WifiP2pDevice nesnesi alabilir ve cihaz adı, adres, cihaz türü, cihazın desteklediği WPS yapılandırmaları gibi bilgilere ulaşabilirsiniz.
  • WifiP2pManager.GroupInfoListener arayüzü, P2P grubu hakkında bilgi almanızı sağlar. Geri çağırma işlevi; sahip, ağ adı ve parola gibi grup bilgilerini sağlayan bir WifiP2pGroup nesnesi sağlar.
  • WifiP2pManager.ConnectionInfoListener arayüzü, mevcut bağlantı hakkında bilgi almanızı sağlar. Geri çağırma, grubun oluşturulup oluşturulmadığı ve grup sahibinin kim olduğu gibi bilgileri içeren bir WifiP2pInfo nesnesi sağlar.

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

Android sistemi, belirli Kablosuz 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 Wi-Fi P2P Demo örnek uygulamasına da bakın.

Bluetooth Sağlık Cihazları

Android artık Bluetooth Sağlık Profili cihazlarını desteklemektedir. Böylece nabız monitörleri, kan ölçüm cihazları, termometreler ve tartılar gibi Bluetooth'u destekleyen sağlık cihazlarıyla iletişim kurmak için Bluetooth'u kullanan uygulamalar oluşturabilirsiniz.

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

Sağlık Profili proxy'sini (BluetoothHealth nesnesi) edindikten sonra, eşlenen 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: Uygulamanın kayıt durumundaki ve Bluetooth kanal durumundaki değişikliklerle ilgili güncellemeleri almak için bu sınıfı genişletmeniz ve geri çağırma yöntemlerini uygulamanız gerekir.
  • BluetoothHealthAppConfiguration: BluetoothHealthCallback cihazınıza yapılan geri çağırmalar sırasında bu nesnenin bir örneğini alırsınız. Bu örnekte, kullanılabilir Bluetooth sağlık cihazı hakkında yapılandırma bilgileri sağlanır. Bu bilgileri, BluetoothHealth API'leriyle bağlantı başlatmak ve sonlandırmak gibi çeşitli işlemleri gerçekleştirmek için 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, yeni "dokunarak keşfet" modu ve içeriği görüntüleme hakkında daha fazla bilgi edinmenize veya gelişmiş erişilebilirlik hizmetleri geliştirmenize olanak tanıyan genişletilmiş API'lerle, görme engelli kullanıcılar için erişilebilirliği iyileştirir.

Dokunarak keşfetme modu

Görme kaybı olan kullanıcılar artık içeriğin sesli açıklamalarını duymak için bir parmaklarına dokunup ekran boyunca sürükleyerek ekranı keşfedebilir. Dokunarak keşfetme modu, sanal bir imleç gibi çalıştığından, kullanıcı d-pad veya iztopu ile gezindiğinde ekran okuyucuların açıklayıcı metni belirlediği gibi, simüle edilmiş bir "fareyle üzerine gelme" etkinliği üzerine android:contentDescription ve setContentDescription() tarafından sağlanan bilgileri okuyarak, açıklayıcı metni tanımlamasına olanak tanır. Bu nedenle, özellikle ImageButton, EditText, ImageView ve doğal olarak açıklayıcı metin içermeyebilecek diğer widget'lar için uygulamanızdaki görünümler hakkında açıklayıcı metin sağlamanız gerektiğini hatırlatmak isteriz.

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

Ekran okuyucular gibi erişilebilirlik hizmetlerinin kullanabileceği bilgileri geliştirmek için özel View bileşenlerinizde erişilebilirlik etkinlikleri için yeni geri çağırma yöntemleri uygulayabilirsiniz.

Öncelikle, sendAccessibilityEvent() yönteminin davranışının Android 4.0'da değiştiğini unutmayın. Android'in önceki sürümünde olduğu gibi, kullanıcı cihazda erişilebilirlik hizmetlerini etkinleştirdiğinde ve tıklama veya fareyle üzerine gelme gibi bir giriş etkinliği gerçekleştiğinde ilgili görünüm sendAccessibilityEvent() çağrısıyla bildirilir. Önceden, sendAccessibilityEvent() uygulaması ile bir AccessibilityEvent başlatılır ve AccessibilityManager adresine gönderilir. Yeni davranış, görünümün ve üst öğelerinin etkinliğe daha fazla bağlamsal bilgi eklemesine olanak tanıyan bazı ek geri çağırma yöntemlerini içeriyor:

  1. Çağrılduğunda sendAccessibilityEvent() ve sendAccessibilityEventUnchecked() yöntemleri onInitializeAccessibilityEvent() değerine ertelenir.

    View özel uygulamaları, AccessibilityEvent öğesine ek erişilebilirlik bilgileri eklemek için onInitializeAccessibilityEvent() öğesini uygulamak isteyebilir, ancak standart içerik açıklaması, öğe dizini ve daha fazlası gibi varsayılan bilgileri sağlamak için süper uygulama çağrısı da yapmalıdır. Ancak, bu geri çağırmaya ilave metin içeriği eklememeniz gerekir (bu işlem daha sonra gerçekleşir).

  2. Başlatıldıktan sonra etkinlik, metin bilgileriyle doldurulması gereken çeşitli türlerden biriyse görünüm, onPopulateAccessibilityEvent() geri çağırmasına karşılık dispatchPopulateAccessibilityEvent() çağrısı alır.

    android:contentDescription metni eksik veya yetersizse AccessibilityEvent öğesine ilave metin içeriği eklemek için View özel uygulamaları genellikle onPopulateAccessibilityEvent() öğesini uygulamalıdır. AccessibilityEvent öğesine daha fazla metin açıklaması eklemek için getText() numaralı telefonu arayın.add()

  3. Bu noktada View, üst görünümde requestSendAccessibilityEvent() çağrısı yaparak etkinliği görünüm hiyerarşisinden yukarıya aktarır. Daha sonra her üst görünüm, kök görünümüne ulaşana kadar bir AccessibilityRecord ekleyerek erişilebilirlik bilgilerini artırabilir. Böylece etkinlik, sendAccessibilityEvent() ile AccessibilityManager öğesine gönderilir.

View sınıfını genişletirken yararlı olan yukarıdaki yeni yöntemlere ek olarak, AccessibilityDelegate kapsamını genişletip setAccessibilityDelegate() ile görünümde ayarlayarak bu etkinlik geri çağırmalarını herhangi bir View üzerinde devre dışı bırakabilirsiniz. Bunu yaptığınızda, görünümdeki her erişilebilirlik yöntemi, çağrıyı yetki verilmiş kullanıcıdaki ilgili yönteme erteler. Örneğin, görünüm bir onPopulateAccessibilityEvent() çağrısı aldığında, bunu View.AccessibilityDelegate içindeki aynı yönteme iletir. Yetki verilmiş kullanıcı tarafından ele alınmayan yöntemler, varsayılan davranış için doğrudan görünüme geri verilir. Bu, View sınıfını genişletmeden yalnızca belirli bir görünüm için gerekli yöntemleri geçersiz kılmanıza olanak tanır.

Yeni erişilebilirlik API'lerini desteklemenin yanı sıra 4.0'dan önceki Android sürümleriyle uyumluluğu sürdürmek istiyorsanız v4 destek kitaplığının en son sürümüyle (Uyumluluk Paketi, r4'te) geriye dönük olarak uyumlu bir tasarımda yeni erişilebilirlik API'leri sunan bir dizi yardımcı program sınıfını kullanabilirsiniz.

Erişilebilirlik hizmetleri

Bir erişilebilirlik hizmeti geliştiriyorsanız çeşitli erişilebilirlik etkinlikleriyle ilgili bilgiler, kullanıcılara daha gelişmiş erişilebilirlik geri bildirimi sağlamak amacıyla önemli ölçüde genişletilmiştir. Etkinlikler özellikle görünüm bileşimine 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 durumlar hakkında anlaşma sağlamak için görünüm hiyerarşilerini geçmesine olanak tanır.

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

  1. Bir uygulamadan AccessibilityEvent aldıktan sonra, belirli bir AccessibilityRecord almak için AccessibilityEvent.getRecord() çağrılarını yapın (etkinliğe eklenen birkaç kayıt olabilir).
  2. Bir AccessibilityNodeInfo nesnesini almak için AccessibilityEvent veya bağımsız AccessibilityRecord öğesinden getSource() yöntemini çağırabilirsiniz.

    AccessibilityNodeInfo, pencere içeriğinin tek bir düğümünü, o düğüm hakkındaki erişilebilirlik bilgilerini sorgulamanıza olanak tanıyan biçimde temsil eder. AccessibilityEvent öğesinden döndürülen AccessibilityNodeInfo nesnesi etkinlik kaynağını, AccessibilityRecord kaynağındaki kaynak ise etkinlik kaynağının önceki öğesini tanımlar.

  3. AccessibilityNodeInfo ile bu alanla ilgili bilgileri sorgulayabilir, görünüm hiyerarşisinde bilgi edinmek için getParent() veya getChild() yöntemini çağırabilir, hatta düğüme alt görünümler ekleyebilirsiniz.

Uygulamanızın kendisini sistemde bir erişilebilirlik hizmeti olarak yayınlaması 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 edinmek için XML yapılandırmasıyla ilgili bilgiler için AccessibilityService ve SERVICE_META_DATA bölümlerine bakın.

Diğer erişilebilirlik API'leri

Cihazın erişilebilirlik durumuyla ilgileniyorsanız AccessibilityManager aşağıdaki gibi bazı yeni API'ler sunar:

Yazım Denetleyici Hizmetleri

Yeni bir yazım denetleyici çerçevesi, uygulamaların giriş yöntemi çerçevesine (IME'ler için) benzer bir şekilde yazım denetleyicileri oluşturmasına olanak tanır. Yeni bir yazım denetleyici oluşturmak için arayüzün geri çağırma yöntemleri tarafından sağlanan metinlere dayalı yazım önerilerinde bulunmak amacıyla SpellCheckerService ve SpellCheckerService.Session sınıfını genişleten bir hizmet uygulamanız gerekir. SpellCheckerService.Session geri çağırma yöntemlerinde yazım önerilerini SuggestionsInfo nesneleri olarak döndürmeniz gerekir.

Yazım denetleyici hizmeti olan uygulamalar, BIND_TEXT_SERVICE iznini hizmet için gerekli olduğu gibi beyan etmelidir. Hizmet ayrıca amacın işlemi olarak <action android:name="android.service.textservice.SpellCheckerService" /> ile bir intent filtresi beyan etmeli ve yazım denetleyici için yapılandırma bilgilerini açıklayan bir <meta-data> öğesi içermelidir.

Örnek kod için örnek Yazım Denetleyici Hizmeti uygulamasına ve örnek Yazım Denetleyici İstemcisi uygulamasına göz atın.

Metin Okuma Motorları

Android'in metin okuma (TTS) API'leri, uygulamaların özel TTS motorlarını daha kolay uygulayabilmesi için önemli ölçüde genişletilmiştir. TTS motoru kullanmak isteyen uygulamalar ise motor seçimi için yeni birkaç API'ye sahiptir.

Metin okuma motorlarını kullanma

Android'in önceki sürümlerinde, sistem tarafından sağlanan TTS motorunu kullanarak metin okuma (TTS) işlemleri gerçekleştirmek veya setEngineByPackageName() ile özel bir motor ayarlamak için TextToSpeech sınıfını kullanabiliyordunuz. Android 4.0'da setEngineByPackageName() yöntemi kullanımdan kaldırılmıştır ve artık TTS motorunun paket adını kabul eden yeni bir TextToSpeech oluşturucuyla kullanılacak motoru belirtebilirsiniz.

Mevcut TTS motorlarını getEngines() ile de sorgulayabilirsiniz. Bu yöntem; motorun simgesi, etiketi ve paket adı gibi meta verileri içeren TextToSpeech.EngineInfo nesnelerinin bir listesini döndürür.

Metin okuma motorları oluşturma

Önceden özel motorlar, motorun belgelenmemiş yerel başlık dosyası kullanılarak derlenmesini gerektiriyordu. Android 4.0'da, TTS motorları oluşturmaya yönelik eksiksiz bir çerçeve API'leri grubu vardır.

Temel kurulumda, INTENT_ACTION_TTS_SERVICE amacına uygun TextToSpeechService uygulaması gerekir. TTS motorunun birincil çalışması, TextToSpeechService aralığını genişleten bir hizmette onSynthesizeText() geri çağırması sırasında gerçekleşir. Sistem bu yöntemle iki nesne teslim eder:

  • SynthesisRequest: Bu, sentezlenecek metin, yerel ayar, konuşma hızı ve ses perdesi gibi çeşitli verileri içerir.
  • SynthesisCallback: Bu, TTS motorunuzun elde edilen konuşma verilerini akışlı ses olarak ilettiği arayüzdür. Motor, öncelikle motorun sesi iletmeye hazır olduğunu belirtmek için start() yöntemini, ardından audioAvailable() yöntemini çağırarak ses verilerini bir bayt arabelleğine iletmelidir. Motorunuz tüm sesi arabelleğe geçirdikten sonra done() çağrısı yapın.

Artık bu çerçeve, TTS motorları oluşturmak için gerçek bir API'yi desteklediğinden yerel kod uygulama desteği kaldırılmıştır. Eski TTS motorlarınızı yeni çerçeveye dönüştürmek için kullanabileceğiniz bir uyumluluk katmanıyla ilgili blog yayınını arayın.

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ı net bir şekilde görme imkanı tanır. Ayarlar uygulaması, kullanıcıların ağ veri kullanımı için belirlenen sınırları yönetmelerine ve hatta tek tek uygulamalar için arka plan veri kullanımını devre dışı bırakmalarına olanak tanıyan denetimler sunar. 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 kullanma konusunda stratejiler geliştirmeniz ve mevcut bağlantı türüne göre kullanımınızı 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 etmesini sağlayan kullanıcı ayarları sağlamanız gerekir. Bu ayarlar, uygulamanızın veri senkronizasyonu, yükleme/indirme işlemlerini yalnızca kablosuz ağa bağlıyken gerçekleştirip gerçekleştirmeme ve dolaşımdayken veri kullanma gibi seçenekleri içerir. Bu kontroller sayesinde kullanıcıların, kendi sınırlarına yaklaştığında uygulamanızın veri erişimini devre dışı bırakma olasılığı çok daha düşüktür. Bu ayarlarla bir tercih etkinliği sağlarsanız manifest beyanına ACTION_MANAGE_NETWORK_USAGE işlemi için bir amaç filtresi eklemeniz gerekir. Örneğin:

<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, sisteme bu etkinliğin uygulamanızın veri kullanımını kontrol eden etkinlik olduğunu belirtir. Bu sayede kullanıcı, uygulamanızın ne kadar veri kullandığını Ayarlar uygulamasından kontrol ettiğinde, tercih etkinliğinizi başlatan bir "Uygulama ayarlarını görüntüle" düğmesi sunulur. Böylece kullanıcı, uygulamanızın kullandığı veri miktarını hassaslaştırabilir.

Ayrıca, getBackgroundDataSetting() öğesinin artık kullanılmadığını ve her zaman doğru değerini döndürdüğünü unutmayın. Bunun yerine getActiveNetworkInfo() politikasını kullanın. Herhangi bir ağ işlemini denemeden önce, geçerli ağı temsil eden NetworkInfo öğesini almak ve cihazın bağlı olup olmadığını kontrol etmek için isConnected() sorgusunu her zaman getActiveNetworkInfo() çağırmanız gerekir. Daha sonra cihazın dolaşımda veya kablosuz ağa bağlı olup olmadığı gibi diğer bağlantı özelliklerini kontrol edebilirsiniz.

Kurumsal

Android 4.0, kurumsal uygulamanın özelliklerini aşağıdaki özelliklerle genişletmektedir.

VPN hizmetleri

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

VPN hizmeti oluşturmak için ağ adresini, DNS sunucusunu, ağ rotasını ve daha fazlasını belirtmenize olanak tanıyan VpnService.Builder hizmetini kullanın. İşlem tamamlandığında, ParcelFileDescriptor döndüren establish() çağrısıyla arayüzü oluşturabilirsiniz.

VPN hizmeti paketlere müdahale edebildiği için güvenlik etkileri olabilir. Bu nedenle VpnService politikasını uygularsanız hizmetinizin, yalnızca sistemin bağlanmasını sağlamak için BIND_VPN_SERVICE öğesini gerektirmesi gerekir (bu izni yalnızca sisteme verilir; uygulamalar bu izni isteyemez). Daha sonra VPN hizmetinizi kullanmak isteyen kullanıcıların sistem ayarlarında hizmeti manuel olarak etkinleştirmesi gerekir.

Cihaz politikaları

Cihaz kısıtlamalarını yöneten uygulamalar artık setCameraDisabled() ve USES_POLICY_DISABLE_CAMERA özelliğini (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ı, sistem anahtarı deposundaki sertifikaları içe aktarmanıza ve bunlara erişmenize olanak tanıyan API'ler sağlar. Sertifikalar hem istemci sertifikalarının (kullanıcının kimliğini doğrulamak için) hem de sertifika yetkilisi sertifikalarının (sunucu kimliğini doğrulamak için) yüklenmesini kolaylaştırır. 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. Daha fazla bilgi için KeyChain dokümanlarını inceleyin.

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ı ve mutlak nemi hesaplamak için bunları kullanabilirsiniz.

Önceki sıcaklık sensörü (TYPE_TEMPERATURE) kullanımdan kaldırıldı. Bunun yerine TYPE_AMBIENT_TEMPERATURE sensörünü kullanmanız gerekir.

Buna ek olarak, Android'in üç sentetik sensörü önemli ölçüde iyileştirilmiştir. Böylece artık daha düşük gecikme ve daha akıcı çıkış olanağı sunulmaktadır. Bu sensörler arasında yer çekimi sensörü (TYPE_GRAVITY), döndürme vektör sensörü (TYPE_ROTATION_VECTOR) ve doğrusal ivme sensörü (TYPE_LINEAR_ACCELERATION) bulunur. İyileştirilmiş sensörler, çıkışını iyileştirmek için jiroskop sensörüne ihtiyaç duyar. Bu nedenle sensörler yalnızca jiroskop bulunan cihazlarda görünür.

İşlem Çubuğu

ActionBar bazı yeni davranışları destekleyecek şekilde güncellendi. En önemlisi, sistem tüm ekran boyutlarında optimum kullanıcı deneyimi sağlamak için daha küçük ekranlarda çalışırken işlem çubuğunun boyutunu ve yapılandırmasını sorunsuz bir şekilde yönetir. Örneğin, ekran dar olduğunda (örneğin, cihaz dikey yönde olduğunda), işlem çubuğunun gezinme sekmeleri, ana işlem çubuğunun hemen altında görünen bir "yığın çubuk" içinde görünür. Ayrıca, tüm işlem öğelerini ekran dar olduğunda ekranın alt kısmındaki ayrı bir çubuğa yerleştiren "bölünmüş işlem çubuğunu" da etkinleştirebilirsiniz.

Bölme işlem çubuğu

İşlem çubuğunuz birkaç işlem öğesi içeriyorsa bunların tümü dar bir ekrandaki işlem çubuğuna sığmaz. Bu nedenle sistem, bu öğelerin daha fazlasını taşma menüsüne yerleştirir. Ancak Android 4.0, ekranın alt kısmındaki ayrı bir çubukta, ekranda daha fazla işlem öğesinin görünmesi için "bölünmüş işlem çubuğunu" etkinleştirmenize olanak tanır. Bölünme işlem çubuğunu etkinleştirmek için manifest dosyanızdaki <application> etiketinize veya tek tek <activity> etiketlerinden birine "splitActionBarWhenNarrow" içeren android:uiOptions ekleyin. Bu seçenek etkinleştirildiğinde, ekran dar olduğunda sistem tüm işlem öğeleri için ekranın alt kısmına 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 istiyor ancak en üstteki ana işlem çubuğuna ihtiyacınız yoksa (yalnızca sekmelerin üstte görünmesini istiyorsanız) bölme işlemi çubuğunu yukarıda açıklandığı gibi etkinleştirin ve işlem çubuğundaki uygulama simgesini devre dışı bırakmak için setDisplayShowHomeEnabled(false) yöntemini çağırın. Ana işlem çubuğunda hiçbir şey kalmadığında bu çubuk kaybolur. Geriye yalnızca ekranın üst kısmındaki gezinme sekmeleri ve ekranın alt kısmındaki işlem öğeleri eklenir.

İşlem çubuğu stilleri

İşlem çubuğuna özel stil uygulamak isterseniz yığın çubuğa ve bölünmüş çubuğa arka plan çizimi veya renk uygulamak için yeni backgroundStacked ve backgroundSplit stil özelliklerini kullanabilirsiniz. Bu stilleri setStackedBackgroundDrawable() ve setSplitBackgroundDrawable() ile çalışma zamanında da ayarlayabilirsiniz.

İşlem sağlayıcı

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

Örneğin ShareActionProvider, ActionProvider uzantısının işlem çubuğundan bir "paylaş" işlemini kolaylaştıran bir uzantısıdır. ACTION_SEND amacını çağıran geleneksel işlem öğesi kullanmak yerine, ACTION_SEND amacını işleyen uygulamaların açılır listesini içeren bir işlem görünümü sunmak için bu işlem sağlayıcısını kullanabilirsiniz. Kullanıcı, işlem için kullanmak üzere bir uygulama seçtiğinde, ShareActionProvider bu seçimi hatırlar ve bu uygulamayla paylaşıma daha hızlı erişim için işlemi işlem görünümünde sunar.

Bir işlem öğesi için işlem sağlayıcı bildirmek istiyorsanız etkinliğinizin seçenekler menüsünün <item> öğesine android:actionProviderClass özelliğini ve değer olarak işlem sağlayıcının sınıf adını ekleyin. Örneğin:

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

Etkinliğinizin onCreateOptionsMenu() geri çağırma 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 öğesinin kullanımıyla ilgili 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ü durumu ile geleneksel işlem öğesi durumları arasında geçiş yapabilir. Önceden yalnızca SearchView, işlem görünümü olarak kullanıldığında daraltmayı destekliyordu, ancak artık herhangi bir işlem öğesi için işlem görünümü ekleyebilir ve genişletilmiş durum (işlem görünümü görünür) ile daraltılmış durum (işlem öğesi görünür) arasında geçiş yapabilirsiniz.

İşlem görünümü içeren bir işlem öğesinin daraltılabilir olduğunu belirtmek için menünün XML dosyasındaki <item> öğesi için 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() yöntemini çağırarak ilgili MenuItem ile bir MenuItem.OnActionExpandListener örneğini kaydedin. Bu işlemi genellikle onCreateOptionsMenu() geri arama 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() ç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(), simgenin/logonun ana ekrana gitmek için mi yoksa "yukarı" gitmek için bir düğme olarak mı davranacağını (düğme gibi davranması için "true" değerini) belirtmenize olanak tanır.
  • setIcon() ve setLogo(), çalışma zamanında işlem çubuğu simgesini veya logosunu tanımlamanıza olanak tanır.
  • Fragment.setMenuVisibility(), parça tarafından tanımlanan seçenekler menüsü öğelerinin görünürlüğünü etkinleştirmenize veya devre dışı bırakmanıza olanak tanır. Bu, parça etkinliğe eklenmişse ancak görünmüyorsa menü öğelerinin gizlenmesi gerekiyorsa yararlı olur.
  • 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. Bu durumlarda Activity eşdeğer yöntemi kullanılamaz.

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

Android 4.0, çeşitli yeni görünümleri ve diğer kullanıcı arayüzü bileşenlerini kullanıma sunuyor.

Izgara Düzeni

GridLayout, alt öğeleri dikdörtgen bir tabloya yerleştiren yeni bir görüntüleme grubudur. TableLayout'den farklı olarak GridLayout, düz bir hiyerarşiye dayanır ve yapı sağlamak için tablo satırları gibi ara görünümlerden yararlanmaz. Bunun yerine, alt birimleri hangi satır ve sütunları doldurmaları gerektiğini belirtir (hücreler birden çok satır ve/veya sütun kaplayabilir) ve varsayılan olarak, tablodaki satırlara ve sütunlara sıralı olarak yerleştirilir. GridLayout yönü, sıralı alt öğelerin varsayılan olarak yatay mı yoksa dikey olarak mı düzenleneceğini belirler. Alt öğeler arasındaki boşluk, yeni Space görünümü örnekleri kullanılarak veya alt öğelerde ilgili marj parametreleri ayarlanarak belirtilebilir.

GridLayout kullanan örnekler için ApiDemos'a bakın.

Doku Görünümü

TextureView, video veya OpenGL sahnesi gibi bir içerik akışını görüntülemenize olanak tanıyan yeni bir görünümdür. SurfaceView ile benzer olsa da, TextureView ayrı bir pencere oluşturmak yerine normal bir görünüm gibi davranması açısından benzersizdir. Bu nedenle onu diğer View nesneleri gibi düşünebilirsiniz. Örneğin, dönüşümler uygulayabilir, ViewPropertyAnimator kullanarak animasyon yapabilir veya opaklığını setAlpha() ile ayarlayabilirsiniz.

TextureView politikasının yalnızca donanım hızlandırmalı penceresinde çalıştığını unutmayın.

Daha fazla bilgi için TextureView dokümanlarına bakın.

Widget'ı değiştir

Yeni Switch widget'ı, kullanıcıların bir seçeneği iki durum arasında değiştirmek için bir tarafa veya diğerine sürükleyebilir (ya da sadece dokunarak) iki durumlu bir açma/kapatma düğmesidir.

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

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

Android 3.0, belirttiğiniz bir sabitleme noktasında (genellikle seçilen öğenin noktasında) açılan kısa içerik menüleri oluşturmak için PopupMenu uygulamasını kullanıma sundu. Android 4.0, PopupMenu oyununu birkaç faydalı özellikle genişletiyor:

Tercihler

Yeni bir TwoStatePreference soyut sınıfı, iki durumlu seçim seçeneği sunan tercihlerin temelini oluşturur. Yeni SwitchPreference, TwoStatePreference eklentisinin, tercih görünümünde kullanıcıların ek bir tercih ekranı veya iletişim kutusu açmaya gerek kalmadan ayarı açıp kapatmalarına olanak tanıyan bir Switch widget'ı sağlayan bir uzantısıdır. Örneğin, Ayarlar uygulaması kablosuz ve Bluetooth ayarları için bir SwitchPreference kullanır.

Sistem temaları

Android 4.0'ı hedefleyen tüm uygulamalar için varsayılan tema (targetSdkVersion veya minSdkVersion “14" veya sonraki bir sürüme ayarlandığında) artık "cihaz varsayılanı" temasıdır: Theme.DeviceDefault. Bu, koyu Holo teması veya cihaz tarafından tanımlanan farklı bir koyu tema olabilir.

Aynı Android sürümünü çalıştırırken Theme.Holo tema ailesinin cihazlar arasında değişmeyecekleri garanti edilir. Etkinliklerinize Theme.Holo temalarından herhangi birini açıkça uygularsanız bu temaların aynı platform sürümündeki farklı cihazlarda karakterleri değiştirmeyeceğinden emin olabilirsiniz.

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

Seçenekler menüsü düğmesi

Android 4.0 sürümünden başlayarak, telefonlarda artık bir Menü donanımı düğmesi olmadığını fark edeceksiniz. Ancak, mevcut uygulamanız bir seçenekler menüsü sunuyorsa ve bir Menü düğmesi olmasını bekliyorsa bu konuda endişelenmenize gerek yoktur. Sistem, mevcut uygulamaların beklendiği gibi çalışmaya devam etmesini sağlamak amacıyla Android'in eski sürümleri için tasarlanmış uygulamalara yönelik bir ekranda Menü düğmesi sağlar.

En iyi kullanıcı deneyimi için, yeni ve güncellenmiş uygulamalarda menü öğelerine erişim sağlamak amacıyla ActionBar kullanılmalı ve en son çerçeve varsayılan davranışlarından yararlanmak için targetSdkVersion değeri "14" olarak ayarlanmalıdır.

Sistem kullanıcı arayüzü görünürlüğü kontrolleri

Android'in kullanıma sunulduğu ilk günlerden beri sistem, durum çubuğu olarak bilinen ve operatör sinyali, saat, bildirimler gibi bilgileri sunmak için cihazın üst kısmında bulunan bir kullanıcı arayüzü bileşenini yönetmektedir. Android 3.0, tablet cihazlar için sistem çubuğunu ekledi. Bu çubuk, sistem gezinme denetimleri (Ana Sayfa, Geri vb.) sağlamak için ekranın en altında yer alır. Ayrıca, geleneksel olarak durum çubuğu tarafından sağlanan öğeler için bir arayüz sunar. Android 4.0'da sistem, gezinme çubuğu olarak adlandırılan yeni bir sistem kullanıcı arayüzü türü sağlar. Gezinme çubuğunu, sistem çubuğunun mobil cihazlar için tasarlanmış, yeniden ayarlanmış bir versiyonu olarak düşünebilirsiniz. Bu çubuk, sistemde gezinmek için gereken donanıma sahip olmayan cihazlar için gezinme denetimleri sağlar, ancak sistem çubuğunun bildirim kullanıcı arayüzünü ve ayar kontrollerini içermez. Benzer şekilde, gezinme çubuğunu sağlayan cihazın üst kısmında da durum çubuğu bulunur.

Şu ana kadar telefonlarda FLAG_FULLSCREEN işaretini kullanarak durum çubuğunu gizleyebilirsiniz. Android 4.0'da, 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. Ayarlandığında bu işaret, sistem çubuğu veya gezinme çubuğu için "düşük profil" modunu etkinleştirir. Ayrıca, gezinme düğmeleri karartılır ve sistem çubuğundaki diğer öğeler gizlenir. Bu özelliğin etkinleştirilmesi, sistem gezinme düğmeleriyle dikkatinizi dağıtmadan daha sürükleyici oyunlar oluşturmak için yararlıdır.
  • SYSTEM_UI_FLAG_VISIBLE işareti, STATUS_BAR_VISIBLE işaretinin yerini alarak sistem çubuğunun veya gezinme çubuğunun görünür olmasını sağlar.
  • SYSTEM_UI_FLAG_HIDE_NAVIGATION, gezinme çubuğunun tamamen gizlenmesini isteyen yeni bir işarettir. Bu özelliğin yalnızca bazı telefonlarda kullanılan gezinme çubuğu ile kullanılabileceğini unutmayın (tabletlerde sistem çubuğunu gizlemez). Sistem kullanıcı girişi alır almaz gezinme çubuğu görünüme geri döner. Bu nedenle bu mod, özellikle video oynatma veya tüm ekranın gerektiği ancak kullanıcı girişinin gerekli olmadığı diğer durumlarda yararlıdır.

Etkinliğinizdeki herhangi bir görünümde setSystemUiVisibility() yöntemini çağırarak sistem çubuğu ve gezinme çubuğu için bu işaretlerin her birini ayarlayabilirsiniz. Pencere yöneticisi, pencerenizdeki tüm görünümlerden gelen tüm işaretleri birleştirir (VEYA ile birlikte) ve pencerenizde giriş odağı olduğu sürece bunları sistem kullanıcı arayüzüne uygular. Pencerenizde giriş odağı kaybolduğunda (kullanıcı uygulamanızdan uzaklaşır veya bir iletişim kutusu görünürse) işaretlemelerinizin etkisi kalmaz. Benzer şekilde, görünüm hiyerarşisinden bu görünümleri kaldırırsanız işaretleri de artık geçerli olmaz.

Etkinliğinizdeki diğer etkinlikleri, sistem kullanıcı arayüzündeki görünürlük değişiklikleriyle senkronize etmek için (örneğin, sistem kullanıcı arayüzü gizlendiğinde işlem çubuğunu veya diğer kullanıcı arayüzü kontrollerini gizleme) sistem çubuğunun veya gezinme çubuğunun görünürlüğü değiştiğinde bildirim almak için bir View.OnSystemUiVisibilityChangeListener kaydettirmeniz gerekir.

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

Giriş Çerçevesi

Android 4.0'da fareyle üzerine gelme etkinlikleri ve yeni ekran kalemi ile fare düğmesi etkinlikleri desteklenir.

Fareyle üzerine gelme etkinlikleri

View sınıfı, artık işaretçi cihazları (ör. fare veya ekranda imleç gönderen başka cihazlar) kullanarak daha zengin etkileşimler sağlamak için "hover" etkinliklerini desteklemektedir.

Bir görünümde fareyle üzerine gelme etkinliklerini almak için View.OnHoverListener özelliğini uygulayın ve setOnHoverListener() ile kaydedin. Görünümde bir fareyle üzerine gelme etkinliği gerçekleştiğinde, işleyiciniz onHover() çağrısı alır. Bu çağrı, etkinliği alan View ve gerçekleşen fareyle üzerine gelme etkinliğinin türünü açıklayan bir MotionEvent sağlar. Fareyle üzerine gelme etkinliği aşağıdakilerden biri olabilir:

View.OnHoverListener, fareyle üzerine gelme etkinliğini gerçekleştiriyorsa onHover() öğesinden true (doğru) değerini döndürecektir. İşleyiciniz false değerini döndürürse fareyle üzerine gelme etkinliği her zamanki gibi üst görünüme gönderilir.

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

Yeni fareyle üzerine gelme etkinliklerinin gösterimi için ApiDemos'taki Hover sınıfına bakın.

Ekran kalemi ve fare düğmesi etkinlikleri

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

Ekran kalemi girişi, dokunma veya fare girişine benzer şekilde çalışır. Ekran kalemi, dijitalleştiriciyle temas ettiğinde uygulamalar, dokunma etkinliklerini bir parmakla ekrana dokunduğunda aldıkları gibi alır. Ekran kalemi, dijitalleştiricinin üzerinde durduğunda uygulamalar, herhangi bir düğmeye basılmadığında bir fare işaretçisi ekranda hareket ettirildiğinde olduğu gibi fareyle üzerine gelme etkinliklerini alır.

Uygulamanız, getToolType() kullanarak MotionEvent içindeki her işaretçiyle ilişkili "araç türünü" sorgulayarak parmak, fare, ekran kalemi ve silgi girişini birbirinden ayırt edebilir. Şu anda tanımlanmış 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ü sorgulayarak ekran kalemi girişini parmak veya fare girişinden farklı şekillerde işlemeyi seçebilir.

Uygulamanız, getButtonState() kullanarak MotionEvent öğesinin "düğme durumunu" sorgulayarak hangi fare veya ekran kalemi düğmelerine basıldığını sorgulayabilir. Şu anda tanımlanmış düğme durumları şunlardır: BUTTON_PRIMARY, BUTTON_SECONDARY, BUTTON_TERTIARY, BUTTON_BACK ve BUTTON_FORWARD. Kolaylık sağlaması açısından geri ve ileri fare düğmeleri otomatik olarak KEYCODE_BACK ve KEYCODE_FORWARD tuşlarıyla eşlenir. Uygulamanız, geri ve ileri gezinmeye dayalı fare düğmesini desteklemek için bu tuşları kullanabilir.

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

Araç türleri, düğme durumları ve yeni eksen kodlarının tanıtımı için ApiDemos'taki TouchPaint sınıfına bakın.

Kod

Yeni Property sınıfı, herhangi bir nesnede özellik belirtmenin hızlı, verimli ve kolay bir yolunu sunar. Bu özellik, arayanların hedef nesneler üzerinde genel olarak değer ayarlamasına/almasına olanak tanır. Ayrıca alan/yöntem referanslarını iletme işlevine olanak tanır ve alanların/yöntemlerin ayrıntılarını bilmeden mülkün değerlerini belirlemesini/almasını sağlar.

Örneğin, foo nesnesinde bar alanının değerini ayarlamak istiyorsanız daha önce şunu yaparsınız:

Kotlin

foo.bar = value

Java

foo.bar = value;

Temel özel alan bar için ayarlayıcıyı çağırmak istiyorsanız önceden şunu yaparsınız:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

Ancak, foo örneğini aktarmak ve başka bir kodla bar değerini ayarlamak istiyorsanız bunu Android 4.0'dan önce yapmanın hiçbir yolu yoktur.

Property sınıfını kullanarak Foo sınıfında BAR bir Property nesnesi tanımlayabilirsiniz. Böylece, Foo sınıfının foo örneğindeki alanı aşağıdaki gibi ayarlayabilirsiniz:

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ı ayarlayabilmeniz için Property sınıfından yararlanmaktadır.

ObjectAnimator sınıfı da Property sınıfını kullanır. Böylece, Property ile bir ObjectAnimator oluşturabilirsiniz. Bu yöntem, dize tabanlı yaklaşımdan daha hızlı, verimli ve tür açısından daha güvenlidir.

Donanım Hızlandırma

Android 4.0'dan itibaren, uygulamanız targetSdkVersion veya minSdkVersion ayarlarından birini “14" ya da daha yüksek bir sürüme ayarladıysa tüm pencereler için donanım hızlandırma varsayılan olarak etkindir. Donanım hızlandırma genellikle daha düzgün animasyonlar ve daha akıcı kaydırmanın yanı sıra genel olarak daha iyi performans ve kullanıcı etkileşimine yanıt sağlar.

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

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

JNI Değişiklikleri

Android'in önceki sürümlerinde JNI yerel referansları dolaylı herkese açık kullanıcı adları değildi; Android doğrudan işaretçiler kullanıyordu. Çöp toplayıcı nesneleri hareket ettirmediği sürece bu bir sorun değildi. Ancak hatalı kod yazmayı mümkün kıldığından işe yaradı. Android 4.0'da sistem artık bu hataları algılamak için dolaylı referanslar kullanıyor.

JNI yerel referanslarının tüm ayrıntıları JNI İpuçları bölümündeki "Yerel ve Global Referanslar" bölümünde açıklanmıştır. Android 4.0'da, CheckJNI bu hataları algılayacak şekilde geliştirilmiştir. JNI referanslarında sık karşılaşılan hatalar ve bunları nasıl düzeltebileceğiniz hakkında bir sonraki yayın için Android Geliştiricileri Blogu'nu izleyin.

JNI uygulamasındaki bu değişiklik yalnızca targetSdkVersion veya minSdkVersion özelliğini “14" ya da daha yüksek bir değere ayarlayarak Android 4.0'ı hedefleyen uygulamaları etkiler. Bu özellikleri daha düşük bir değere ayarlarsanız JNI yerel referansları önceki sürümlerde olduğu gibi davranır.

WebKit

  • WebKit 534.30 sürümüne güncellendi
  • WebView ve yerleşik Tarayıcıda glifleri birleştirmek için gereken karmaşık karakter desteği de dahil olmak üzere Hintçe yazı tipleri (Devanagari, Bengalce ve Tamilce) desteği
  • WebView dilinde ve yerleşik Tarayıcı için Etiyopya dili, Gürcüce ve Ermenice yazı tipleri
  • WebDriver desteği, WebView kullanan uygulamaları test etmenizi kolaylaştırır

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şimler için kablosuz bağlantı kullandığını beyan eder.

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

Önceki API'ler

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

Şimdi mobil cihazlarda da kullanılabilen ve gözden kaçırmış olabileceğiniz en önemli API'lardan bazılarına bir genel bakış:

Android 3.0
  • Fragment: Bir etkinliğin farklı öğelerini, kendi kullanıcı arayüzünü ve yaşam döngüsünü tanımlayan bağımsız modüllere ayırmanızı sağlayan bir çerçeve bileşenidir. Fragments geliştirici kılavuzuna bakın.
  • ActionBar: Etkinlik penceresinin üst kısmındaki geleneksel başlık çubuğunun yerini alır. Sol köşede uygulama logosu yer alıyor ve menü öğeleri için yeni bir arayüz sağlıyor. İşlem Çubuğu geliştirici kılavuzuna bakın.
  • Loader: Ana iş parçacığını engellemeden verileri dinamik olarak yüklemek için kullanıcı arayüzü bileşenleriyle birlikte eşzamansız veri yüklemeyi kolaylaştıran çerçeve bileşeni. Yükleyiciler geliştirici kılavuzuna bakın.
  • Sistem panosu: Uygulamalar, sistem genelindeki panodan (metin dışındaki) verileri kopyalayıp yapıştırabilir. Kırpılmış veriler düz metin, URI veya amaç olabilir. Kopyala ve Yapıştır geliştirici kılavuzuna bakın.
  • Sürükle ve bırak: Sürükle ve bırak işlemlerini kolaylaştıran görünüm çerçevesine yerleştirilmiş bir API grubudur. Sürükle ve Bırak geliştirici kılavuzuna bakın.
  • Tamamen yeni olan esnek animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çekilebilir, Parça, Nesne veya başka herhangi bir şey) rastgele özelliklerini canlandırmanıza ve süre, interpolasyon ve tekrar gibi animasyon özelliklerini tanımlamanıza olanak tanır. Yeni çerçeve, Android'deki Animasyonları her zamankinden daha basit hale getiriyor. Mülk Animasyonu geliştirici kılavuzuna bakın.
  • RenderScript grafikleri ve bilgi işlem motoru: RenderScript, C (C99 standardı) olarak yazdığınız yerel düzeyde yüksek performanslı 3D grafik oluşturma ve işlem API'si sunar. Böylece çeşitli CPU ve GPU'lar arasında taşınabilir kalırken yerel ortamdan beklediğiniz performansı sunar. RenderScript geliştirici kılavuzuna bakın.
  • Donanım hızlandırmalı 2D grafik: Artık manifest öğenizin <application> öğesinde veya tek tek <activity> öğeleri için {android:hardwareAccelerated="true"} ayarlayarak uygulamanız için OpenGL oluşturucuyu etkinleştirebilirsiniz. Bu, daha yumuşak animasyonlar, daha düzgün kaydırma ve genel olarak daha iyi performans ile kullanıcı etkileşimine yanıt sağlar.

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

  • Ve çok daha fazlası. Daha fazla bilgi için Android 3.0 Platformu notlarına bakın.
Android 3.1
  • USB API'leri: Bağlı çevre birimlerini Android uygulamalarıyla entegre etmek için yeni ve güçlü API'ler. API'ler hem USB ana makinesi hem de cihaz etkileşimleri desteği dahil olmak üzere platformda yerleşik olarak bulunan bir USB yığınına ve hizmetlere dayanır. USB Ana Makine ve Aksesuarı geliştirici kılavuzuna bakın.
  • MTP/PTP API'leri: Uygulamalar, cihazlar takıldığında ve kaldırıldığında bildirim almak, bu cihazlardaki dosyaları ve depolama alanlarını yönetmek ve dosyalar ile meta verileri bu cihazlar arasında aktarmak için doğrudan bağlı kameralar ve diğer PTP cihazlarıyla etkileşim kurabilir. MTP API, MTP (Medya Aktarım Protokolü) spesifikasyonunun PTP (Resim Aktarım Protokolü) alt kümesini uygular. android.mtp belgelerini inceleyin.
  • RTP API'leri: Android, bir API'yi uygulamaların isteğe bağlı veya etkileşimli veri akışını yönetmek için kullanabileceği yerleşik RTP (Gerçek Zamanlı Aktarım Protokolü) yığınına sunar. Özellikle VOIP, push-to-talk, konferans ve ses akışı sağlayan uygulamalar API'yi kullanarak oturumları başlatabilir ve mevcut herhangi bir ağ üzerinden veri akışlarını iletebilir veya alabilir. android.net.rtp belgelerini inceleyin.
  • Kontrol çubukları ve diğer genel hareket girişleri için destek.
  • Daha pek çok yeni API için Android 3.1 Platformu notlarına bakın.
Android 3.2
  • Yeni ekranlar, uygulamalarınızın farklı ekran boyutlarında nasıl görüntülendiği konusunda size daha fazla kontrol sağlayan API'leri destekler. API, mevcut ekran desteği modelinin kapsamını genişleterek, belirli ekran boyutu aralıklarını genelleştirilmiş ekran boyutları (büyük veya xlarge gibi) yerine yoğunluktan bağımsız piksel birimleriyle (600 dp veya 720 dp genişlik gibi) ölçülen boyutlara göre hassas bir şekilde hedefleme imkanı sağlar. Örneğin bu, geleneksel olarak "büyük" ekranlar olarak gruplanan 5 inçlik cihazlar ile 7 inçlik cihazlar arasındaki farkları belirtmenize yardımcı olması açısından önemlidir. Ekran Boyutlarını Yönetmek için Yeni Araçlar başlıklı blog yayınına bakın.
  • <uses-feature> için yatay veya dikey ekran yönü gereksinimlerini belirtmek üzere yeni sabit değerler.
  • Cihazın "ekran boyutu" yapılandırması artık ekran yönü değiştiğinde değişmektedir. Uygulamanız API düzeyi 13 veya üstünü hedefliyorsa "orientation" yapılandırma değişikliğini de gerçekleştirmek istiyorsanız "screenSize" yapılandırma değişikliğini sizin gerçekleştirmeniz gerekir. Daha fazla bilgi için android:configChanges sayfasını inceleyin.
  • Diğer yeni API'ler için Android 3.2 Platformu notlarına bakın.

API Düzeyi

Android 4.0 API'ye, sistemin kendisinde 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 sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.

Uygulamanızda Android 4.0'da sunulan API'leri kullanmak için uygulamayı API düzeyi 14 veya üstünü destekleyen bir Android platformuna göre derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, <uses-sdk> öğesine bir android:minSdkVersion="14" özelliği de eklemeniz gerekebilir.

Daha fazla bilgi için API Düzeyi nedir?