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 getirdiğinden önemli bir platform sürümüdür. Bir uygulama geliştiricisi olarak artık aynı Android 4.0 (API düzeyi 14) veya sonraki sürümünü çalıştırırken mobil cihazlar, 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 açısından 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 görünümü ve daha fazlası yer alır. Android 4.0'a yönelik uygulama geliştirmeye veya test etmeye başlamak için Android SDK Manager'ı kullanarak platformu SDK'nıza indirin.

API'ye Genel Bakış

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

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

ContactsContract sağlayıcısı tarafından tanımlanan kişi API'ları, cihaz sahibi için kişisel profil ve kullanıcıların kişileri cihazda yüklü sosyal ağlara tek tek davet edebilmeleri gibi yeni sosyal odaklı özellikleri destekleyecek şekilde genişletilmiştir.

Kullanıcı Profili

Android artık ContactsContract.Profile tablosunda tanımlandığı gibi, 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'sı 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. Daha sonra bu tablodaki ham kişiler, kullanıcının görebildiği "Ben" etiketli 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 veri okuyabilmek 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 izni isteyen uygulamalara şüpheyle yaklaşmalarını beklemelisiniz.

Davet Amacı

INVITE_CONTACT intent işlemi, bir uygulamanın, kullanıcının sosyal ağa kişi eklemek istediğini belirten bir işlem 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 People 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 edecek bir senkronizasyon bağdaştırıcısı sağlaması gerekir. Daha sonra, uygulamanızın senkronizasyon yapılandırma dosyasına inviteContactActivity özelliğini ve davet amacını gönderirken sistemin başlatması gereken etkinliğin tam nitelikli adını ekleyerek uygulamanızın INVITE_CONTACT amacına yanıt verdiğini sisteme belirtmeniz gerekir. Başlatılan etkinlik, daha sonra söz konusu kişinin URI'sini niyetin verilerinden alabilir ve o kişiyi ağa davet etmek veya 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ı destekliyor. Artık bir fotoğrafı kişi kaydına aktardığınızda sistem bu fotoğrafı hem 96x96 boyutunda küçük resim olarak (önceden olduğu gibi) hem de dosya tabanlı yeni bir fotoğraf deposunda saklanan 256x256 boyutunda bir "görüntülü fotoğraf" olarak işler (sistemin seçeceği kesin boyutlar gelecekte değişiklik gösterebilir). Bir kişiye büyük bir fotoğraf eklemek için veri satırının normal PHOTO sütununa 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ının belirli telefon numaralarını veya e-posta adreslerini kullanma sıklığı gibi belirli iletişim yöntemlerini ne sıklıkla kullandığını izlemenize yardımcı olur. Bu bilgiler her bir kişiyle ilişkili her iletişim yöntemi için sıralamanın iyileştirilmesine ve her bir kişiyle iletişim kurma konusunda 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ı, kullanıcının tüm 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 Calendar Sync Adapter kullanılarak Takvim Sağlayıcı ile senkronize edilir. Böylece bu etkinlikler, Android'in yerleşik Takvim uygulamasıyla görüntülenebilir.

Takvim Sağlayıcı'daki takvimlerin ve etkinlikle ilgili bilgilerin veri modeli CalendarContract tarafından tanımlanır. Kullanıcının tüm takvim verileri, CalendarContract öğesinin çeşitli alt sınıfları tarafından tanımlanan çeşitli tablolarda saklanır:

  • CalendarContract.Calendars tablosu takvime özel bilgileri içerir. Bu tablodaki her satırda, tek bir takvimle ilgili ad, renk, senkronizasyon bilgileri gibi ayrıntılar bulunur.
  • CalendarContract.Events tablosu, etkinliğe özel bilgileri içerir. Bu tablodaki her satırda, tek bir etkinlikle ilgili bilgiler (ör. etkinlik başlığı, konum, başlangıç zamanı, bitiş zamanı vb.) bulunur. Etkinlik bir kez gerçekleşebileceği gibi, birçok kez yinelenebilir. Katılımcılar, hatırlatıcılar ve genişletilmiş özellikler ayrı tablolarda depolanır ve onları etkinliğe bağlamak için etkinliğin _ID özelliği kullanılır.
  • CalendarContract.Instances tablosu, bir etkinliğin tekrarlanma zamanının başlangıç ve bitiş zamanını barındırır. Bu tablodaki her satır tek bir geçtiği yeri temsil eder. Tek seferlik etkinlikler için örneklerin etkinliklere bire bir eşlenmesi gerekir. Düzenli etkinliklerde, söz konusu etkinliğin birden fazla kez gerçekleşmesine karşılık gelecek şekilde otomatik olarak birden fazla satır oluşturulur.
  • CalendarContract.Attendees tablosunda etkinlik katılımcısı veya davetli bilgileri bulunur. Her satır, bir etkinliğin tek bir davetlisini temsil eder. Kişinin konuk türünü ve o kişinin etkinliğe verdiği yanıtı belirtir.
  • CalendarContract.Reminders tablosunda uyarı/bildirim verileri bulunur. Her satır, bir etkinlikle ilgili tek bir uyarıyı temsil eder. Bir etkinliğin birden fazla hatırlatıcısı 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 dakika olarak kaç dakika önce ve kullanıcıya hatırlatmak için uyarı, e-posta veya SMS kullanmak 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ı ile bir kullanıcının takvim verilerine erişmek için uygulamanızın READ_CALENDAR izni (okuma erişimi için) ve WRITE_CALENDAR (yazma erişimi için) iznini istemesi gerekir.

Etkinlik amacı

Tek yapmanız gereken 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. Niyetin kullanımı 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ının tüm sesli mesajlarını tek bir görsel sunuda sunmak için uygulamaların cihaza sesli mesaj eklemesine olanak tanıyor. Örneğin, bir kullanıcının birden çok sesli mesaj kaynağı olabilir. Örneğin, biri telefonun servis sağlayıcısından, diğerleri de VoIP veya diğer alternatif ses hizmetlerinden yararlanabilir. Bu uygulamalar, sesli mesajlarını cihaza eklemek için Sesli Mesaj Sağlayıcı API'lerini kullanabilir. Böylece yerleşik Telefon uygulaması, tüm sesli mesajları kullanıcıya birleşik bir sunuda sunar. Sistemin Telefon uygulaması tüm sesli mesajları okuyabilen tek uygulama olsa da, sesli mesaj sağlayan her uygulama sisteme eklediklerini okuyabilir (ancak diğer hizmetlerdeki sesli mesajları okuyamaz).

API'ler şu anda üçüncü taraf uygulamalarının sistemdeki tüm sesli mesajları okumasına izin vermediğinden, sesli mesaj API'larını kullanması gereken yegâne üçü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ıyı 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ına ilişkin bir örnek için Sesli Mesaj Sağlayıcı Tanıtımı'na bakın.

Multimedya

Android 4.0; fotoğraf, video ve müzik gibi medyalarla etkileşim kuran uygulamalar için pek çok yeni API ekler.

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 daha pek çok işlemi 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, hatta kameradan bile olabilir. Ancak, dokuların karşılaması gereken belirli kısıtlamalar vardır:

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

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() öğesini çağırmak için döndürülen EffectContext işlevini kullanın. Bu işlem, EffectFactory öğesinin bir örneğini döndürür.
  3. @link android.media.effect.EffectFactory} adresinden EFFECT_FISHEYE veya EFFECT_VIGNETTE gibi bir efekt adı ileterek createEffect() numaralı telefonu arayın.

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

Bir dokuya efekt uygulamak için Effect üzerinde apply() çağrısı yapın ve giriş dokusunu, genişliğini, yüksekliğini ve çıkış dokusunu geçirin. Giriş dokusu bir 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 efekt tarafından otomatik olarak GL_TEXTURE_2D ve bir mipmap düzeyi (0) ile bağlanır. Bu seviye, girişle aynı boyutta olur.

EffectFactory'de listelenen tüm efektlerin desteklendiği garanti edilir. Ancak harici kitaplıklardaki bazı ek efektler tüm cihazlar tarafından desteklenmez. Bu yüzden, öncelikle isEffectSupported() çağrısı yaparak harici kitaplıktan istenen efektin 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österilmekte olan medyayla ilgili parça bilgileri ve albüm resmi gibi bilgileri de gösterebilir.

Medya oynatıcınız için uzaktan kumanda istemcilerini etkinleştirmek üzere kurucusuyla 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 bildirmek için RemoteControlClient cihazınızda setTransportControlFlags() çağrısı yaparak FLAG_KEY_MEDIA_PREVIOUS ve FLAG_KEY_MEDIA_NEXT gibi bir dizi FLAG_KEY_MEDIA_* işaret iletmeniz gerekir.

Ardından RemoteControlClient kartınızı MediaManager.registerRemoteControlClient() adlı tedarikçiye ileterek kaydettirmeniz gerekir. Kaydedildikten sonra, RemoteControlClient somutlaştırırken bildirdiğiniz yayın alıcısı, uzaktan kumandada bir düğmeye basıldığında ACTION_MEDIA_BUTTON etkinliği alır. Aldığınız amaç, basılan medya anahtarı 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 öğesine meta veri 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. Bu uygulama, Android 2.1'e kadarki cihazları desteklemeye devam ederken Android 4.0 cihazlarda uzaktan kumanda istemcisini etkinleştirir.

Medya oynatıcı

  • MediaPlayer cihazından online medya akışı gerçekleştirmek 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 davranacak bir Surface tanımlamanızı sağlar.
  • setDataSource(), isteğinizle birlikte ek HTTP üstbilgileri göndermenize olanak tanır ve bu, HTTP(S) canlı yayınları için yararlı olabilir
  • HTTP(S) canlı yayını artık istekler genelinde HTTP çerezlerine saygı gösteriyor

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 konusuna bakın.

Kamera

Camera sınıfı artık yüzleri 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 öznenin yüzünü değil, aynı zamanda göz 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() numaralı telefonu arayarak bir Camera.FaceDetectionListener kaydettirmeniz gerekir. Ardından 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ğırma işlevini çağırır.

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

  • Kameranın geçerli görüş alanına göre yüzün sınırlarını belirten Rect
  • Sistemin, nesnenin insan yüzü olduğundan ne kadar emin olduğunu gösteren, 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öz 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 andaki görüntüsü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 sınırlarını Rect ve alanın ağırlığını tanımlar. Bu, söz konusu alanın, ilgili diğer alanlara kıyasla önem düzeyini bir tamsayı ile temsil eder.

Bir odak alanını veya ölçüm alanını 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 ölçüm alanlarını belirtmek için setFocusAreas() veya setMeteringAreas() çağrısı yapmanız yeterlidir. Her biri, odaklama veya ölçüm için dikkate alınacak alanları belirten List/Camera.Area nesne alır. Örneğin, kullanıcının önizlemenin bir alanına dokunarak odak alanını ayarlamasına olanak tanıyan bir özellik uygulayabilirsiniz. Daha sonra, bu alanı bir Camera.Area nesnesine çevirebilir ve kameranın sahnedeki bu alana odaklanmasını isteyebilirsiniz. O alandaki odak veya pozlama, alandaki 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 değerini 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 aranmayı aldıktan sonra CAF'yi devam ettirmek için cancelAutoFocus() numaralı telefonu aramanız gerekir.

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

Diğer kamera özellikleri

  • Video kaydederken artık takePicture() numaralı telefonu arayarak video oturumunu kesintiye uğratmadan fotoğraf kaydedebilirsiniz. Bunu yapmadan önce, donanımın desteklediğinden emin olmak için isVideoSnapshotSupported() numaralı telefonu aramalısınız.
  • 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() numaralı telefonu arayabilirsiniz. Önceden, 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ı bir 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ı bir video kaydedildikten sonra çağırır ve üçüncü taraf kamera uygulamaları da video çekildikten sonra bu niyeti yayınlamalıdır.

Android Beam (NFC ile NDEF Push)

Android Beam, NDEF mesajlarını bir cihazdan diğerine ("NDEF Push" olarak da bilinen bir işlem) göndermenize olanak tanıyan yeni bir NFC özelliğidir. Veri aktarımı, Android Beam'i destekleyen Android destekli iki cihaz, genellikle sırtları birbirine değecek şekilde yakında (yaklaşık 4 cm) bulunduğunda başlatılır. NDEF mesajının içindeki veriler, cihazlar arasında paylaşmak istediğiniz tüm verileri içerebilir. Örneğin, Android Beam'i 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. Daha sonra NdefMessage öğesini sisteme şu iki yöntemden birini kullanarak iletmeniz gerekir:

  • Etkinlik sırasında aktarılacak tek bir NdefMessage tanımlayın:

    Göndermek istediğiniz mesajı ayarlamak için dilediğiniz zaman setNdefPushMessage() numaralı telefonu arayın. Örneğin, bu yöntemi çağırabilir ve etkinliğinizin onCreate() yöntemi sırasında NdefMessage yöntemini kullanabilirsiniz. Daha sonra, etkinlik ön plandayken Android Beam başka bir cihazla etkinleştirildiğinde sistem NdefMessage bilgisini diğer cihaza gönderir.

  • Android Beam başlatıldığında aktarılacak NdefMessage öğesini tanımlayın:

    createNdefMessage() yöntemini uygulamanızın, göndermek istediğiniz NdefMessage değerini döndürdüğü NfcAdapter.CreateNdefMessageCallback yöntemini uygulayın. Ardından, NfcAdapter.CreateNdefMessageCallback uygulamasını setNdefPushMessageCallback() platformuna geçirin.

    Bu durumda, etkinliğiniz ön plandayken Android Beam başka bir cihazla etkinleştirildiğinde, sistem göndermek istediğiniz NdefMessage öğesini almak için createNdefMessage() yöntemini çağırır. Bu, mesajın içeriğinin etkinlik süresince değişebilmesi ihtimaline karşı NdefMessage öğesini yalnızca Android Beam başlatıldıktan sonra yayınlanacak şekilde tanımlamanıza olanak tanır.

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()'yi çağırır.

Alıcı cihazda sistem, NDEF Push mesajlarını normal NFC etiketlerine benzer bir şekilde gönderir. Sistem, NdefMessage öğesindeki ilk NdefRecord uyarınca ayarlanmış bir URL veya MIME türü ile etkinlik başlatmak için ACTION_NDEF_DISCOVERED işlemiyle bir amaç çağırır. Yanıtlamak istediğiniz etkinlik için uygulamanızın önem verdiği URL'ler veya MIME türleri için intent filtreleri tanımlayabilirsiniz. Tag Dispatch hakkında daha fazla bilgi edinmek için NFC geliştirici kılavuzuna bakın.

NdefMessage öğenizin bir URI taşımasını istiyorsanız dize veya Uri nesnesine dayalı yeni bir NdefRecord oluşturmak için artık createUri kolaylık yöntemini kullanabilirsiniz. URI, uygulamanızın 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şturmanız gerekir.

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

Uygulamanız, NDEF Push mesajları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ılırken 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. Uygulama yüklü değilse Google Play açılır ve uygulamanın yüklenmesi 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 göz atın.

Kablosuz P2P

Android artık Android destekli cihazlar ile hotspot veya internet bağlantısı olmayan 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ıyla uyumlu olarak). Android çerçevesi, her bir cihaz Wi-Fi P2P'yi desteklediğinde diğer cihazları keşfedip bağlanmanıza ve ardından Bluetooth bağlantısına göre çok daha uzun mesafelerde hızlı bir bağlantı üzerinden iletişim kurmanıza olanak tanıyan bir dizi Wi-Fi P2P API sunar.

android.net.wifi.p2p adlı yeni paket, kablosuz ağ ile eşler arası bağlantı gerçekleştirmek için kullanılan 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
  • ve daha fazla şey yapın

Diğer çeşitli 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ğırmaları almanıza olanak tanır.
  • WifiP2pManager.PeerListListener arayüzü, keşfedilen eşler hakkında bilgi almanızı sağlar. Geri çağırma işlevi, bir WifiP2pDeviceList sağlar. Bu nesneden kapsama alanındaki her cihaz için bir WifiP2pDevice nesnesi alabilir ve cihaz adı, adres, cihaz türü, cihazın desteklediği WPS yapılandırmaları vb. bilgiler alabilirsiniz.
  • WifiP2pManager.GroupInfoListener arayüzü, bir P2P grubu hakkında bilgi almanıza olanak tanır. 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, bir grubun oluşturulup oluşturulmadığı ve grubun sahibinin kim olduğu gibi bilgilere sahip bir WifiP2pInfo nesnesi sağlar.

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

Android sistemi ayrıca belirli Kablosuz P2P etkinlikleri sırasında birkaç farklı işlem yayınlar:

Daha fazla bilgi için WifiP2pManager dokümanlarına bakın. Wi-Fi P2P Demo örnek uygulamasına da göz atı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ı oluşturmak için getProfileProxy() için BluetoothProfile.ServiceListener ve HEALTH profil türü kullanmanı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ı gerekir:

  • BluetoothHealthCallback: Uygulamanın kayıt durumu 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 mevcut bağlantıları sonlandırmak gibi çeşitli işlemler 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 sağlamanıza 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şfet modu

Görme kaybı olan kullanıcılar artık içeriğin sesli açıklamalarını dinlemek için bir parmağını ekran boyunca sürükleyerek ekranı keşfedebilir. Dokunarak keşfet modu sanal bir imleç gibi çalıştığından, ekran okuyucuların, simüle edilmiş bir "fareyle üzerine gelme" etkinliğinde android:contentDescription ve setContentDescription() tarafından sağlanan bilgileri okuyarak, kullanıcı d-pad veya trackball ile gezinirken ekran okuyucuların açıklayıcı metni tanımlamasına olanak tanır. Bu nedenle, uygulamanızdaki görünümler için, özellikle de 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 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 bilgilendirilir. Önceden, sendAccessibilityEvent() uygulandığında 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öntemleri içeriyor:

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

    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 uygulamayı da çağırmalıdır. Ancak, daha sonra yapılacak olan bu geri çağırmaya ilave metin içeriği eklememeniz gerekir.

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

    android:contentDescription metni eksik veya yetersizse AccessibilityEvent öğesine ek 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() yöntemini çağırarak etkinliği görünüm hiyerarşisinin üst kısmına aktarır. Daha sonra her üst görünüm, kök görünümüne ulaşana ve etkinliği sendAccessibilityEvent() ile AccessibilityManager öğesine gönderene kadar bir AccessibilityRecord ekleyerek erişilebilirlik bilgilerini genişletme şansına sahip olur.

View sınıfının genişletilmesinde yararlı olan yukarıdaki yeni yöntemlere ek olarak, AccessibilityDelegate öğesini genişletip setAccessibilityDelegate() ile görünümde ayarlayarak bu etkinlik geri çağırmalarını herhangi bir View cihazda engelleyebilirsiniz. Bunu yaptığınızda, görünümdeki her bir erişilebilirlik yöntemi, çağrıyı yetki verilmiş kullanıcıdaki karşılık gelen yönteme erteler. Örneğin, görünüm onPopulateAccessibilityEvent() için bir çağrı aldığında bunu View.AccessibilityDelegate içindeki aynı yönteme iletir. Yetki verilmiş kullanıcı tarafından işlenmeyen tüm 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 Accessibility API'leri desteklemenin yanı sıra 4.0'dan önceki Android sürümleriyle uyumluluğu sürdürmek istiyorsanız yeni erişilebilirlik API'lerini geriye dönük uyumlu bir tasarımla sağlayan bir dizi yardımcı program sınıfını kullanarak bunu v4 destek kitaplığının en son sürümüyle (Uyumluluk Paketi, r4'te) yapabilirsiniz.

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 bildirimleri sağlayabilmek için önemli ölçüde genişletilmiştir. Etkinlikler özellikle de görünüm bileşimine göre oluşturulur. Böylece, daha iyi bağlam bilgisi sağlanır ve erişilebilirlik hizmetleri, ek görüntüleme bilgileri elde etmek ve özel durumlarda anlaşma sağlamak için görünüm hiyerarşilerini dolaşabilir.

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şileri arasında geçiş yapabilirsiniz:

  1. Bir uygulamadan AccessibilityEvent aldıktan sonra, belirli bir AccessibilityRecord öğesini almak için AccessibilityEvent.getRecord() çağırın (etkinliğe eklenmiş 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ü, bu 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 öncekini tanımlar.

  3. AccessibilityNodeInfo ile bu öğe hakkındaki bilgileri sorgulayabilir, görünüm hiyerarşisinde geçiş yapmak için getParent() veya getChild() yöntemini çağırabilir ve hatta düğüme alt görünümler ekleyebilirsiniz.

Uygulamanızın kendini sistemde bir erişilebilirlik hizmeti olarak yayınlaması için AccessibilityServiceInfo'ye karşılık gelen bir XML yapılandırma dosyası tanımlaması gerekir. Erişilebilirlik hizmeti oluşturma hakkında daha fazla bilgi edinmek için XML yapılandırması ile ilgili bilgileri AccessibilityService ve SERVICE_META_DATA sayfalarında bulabilirsiniz.

Diğer erişilebilirlik API'leri

Cihazın erişilebilirlik durumuyla ilgileniyorsanız, AccessibilityManager aşağıdaki gibi bazı yeni API'lere sahiptir:

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 denetleyicisi oluşturmak için arayüzün geri çağırma yöntemleriyle sağlanan metinlere dayalı yazım önerilerinde bulunmak üzere 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 hizmetin gerektirdiği şekilde 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 Yazım Denetleyici Hizmeti uygulaması ve örnek kod için örnek Yazım Denetleyici İstemci uygulamasına bakın.

Metin-Konuşma Motorları

Android'in metin okuma (TTS) API'leri, uygulamaların özel TTS motorlarını daha kolay uygulamasına olanak tanıyacak şekilde önemli ölçüde genişletilmiştir. TTS motoru kullanmak isteyen uygulamalarda, motor seçmek için kullanılan birkaç yeni API bulunmaktadır.

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.

Ayrıca, kullanılabilir TTS motorlarını getEngines() ile 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ş bir yerel üstbilgi dosyası kullanılarak derlenmesini gerektiriyordu. Android 4.0'da, TTS motorları oluşturmak için eksiksiz bir çerçeve API'ları seti vardır.

Temel kurulum, INTENT_ACTION_TTS_SERVICE amacına karşılık gelen bir TextToSpeechService uygulaması gerektirir. TTS motorunun birincil çalışması, TextToSpeechService alanını kapsayan bir hizmetteki onSynthesizeText() geri çağırma işlemi sırasında gerçekleşir. Sistem bu yönteme iki nesne sunar:

  • SynthesisRequest: Sentezlenecek metin, yerel ayar, konuşma hızı ve ses tonu gibi çeşitli verileri içerir.
  • SynthesisCallback: Bu, TTS motorunuzun sonuçta elde edilen konuşma verilerini ses akışı olarak teslim ettiği arayüzdür. Önce motorun, sesi göndermeye hazır olduğunu belirtmek için start() yöntemini, ardından ses verilerini bir bayt arabelleğine aktarması için audioAvailable() yöntemini çağırması gerekir. Motorunuz tüm sesleri arabelleğe geçtikten sonra done() çağrısı yapın.

Ç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ığına dair net görünürlük sağlar. 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 kontroller sunar. Kullanıcıların, uygulamanızın arka planda verilere erişimini devre dışı bırakmalarını önlemek için veri bağlantısını verimli bir şekilde kullanacak stratejiler geliştirmeli ve mevcut bağlantı türüne göre kullanımınızı ayarlamalısınız.

Uygulamanız çok sayıda ağ işlemi gerçekleştiriyorsa kullanıcıların, uygulamanızın veri kullanma sıklığını kontrol etmelerine olanak tanıyan kullanıcı ayarları sağlamalısınız. Örneğin, uygulamanızın veri senkronizasyonunu ne sıklıkta gerçekleştireceğinizi, yükleme/indirme işlemlerini yalnızca kablosuz ağa bağlıyken gerçekleştirip gerçekleştirmeyeceği, dolaşım sırasında veri kullanıp kullanmayacağı gibi. 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. Ö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, sisteme bu etkinliğin, uygulamanızın veri kullanımını kontrol eden etkinlik olduğunu belirtir. Böylece kullanıcı, uygulamanızın ne kadar veri kullandığını Ayarlar uygulamasından incelediğ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, her zaman geçerli ağı temsil eden NetworkInfo değerini almak için getActiveNetworkInfo() yöntemini çağırmalı ve isConnected()'yi sorgulayarak cihazın bir bağlantısı olup olmadığını kontrol etmelisiniz. Ardından, cihazın dolaşımda veya kablosuz ağa bağlı olup olmadığı gibi diğer bağlantı özelliklerini kontrol edebilirsiniz.

Kurumsal

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

VPN hizmetleri

Yeni VpnService, uygulamaların Service olarak çalışan kendi VPN'lerini (Sanal Özel Ağ) oluşturmaları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() yöntemini çağırarak arayüzü kurabilirsiniz.

VPN hizmeti paketlere müdahale edebildiği için güvenlik etkileri olabilir. Bu nedenle, VpnService politikasını uygularsanız hizmetiniz yalnızca sistemin ona bağlayabilmesini sağlamak için BIND_VPN_SERVICE öğesini zorunlu kılmalıdır (bu izin yalnızca sisteme verilir, uygulamalar bu izni isteyemez). Daha sonra VPN hizmetinizi kullanmak için kullanıcıların hizmeti sistem ayarlarında 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ındaki 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 kimliklerini doğrulamak için yüklü sertifikalara erişebilir. Daha fazla bilgi için KeyChain belgelerine göz atın.

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 bunları kullanarak çiy noktasını ve mutlak nemi hesaplayabilirsiniz.

Ö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ü büyük ölçüde iyileştirilmiştir. Bu sayede artık daha düşük gecikme süresine ve daha düzgün çıkışa sahip olurlar. 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, telefon 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, ekran dar olduğunda tüm işlem öğelerini 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şlemi çubuğu

İşlem çubuğunuzda birkaç işlem öğesi varsa bunların tümü dar ekrandaki işlem çubuğuna sığmaz. Dolayısıyla, sistem daha fazla işlem öğesini taşma menüsüne yerleştirir. Ancak Android 4.0 "bölünme işlem çubuğunu" etkinleştirmenize olanak tanır. Böylece, ekranın alt kısmındaki ayrı bir çubukta, ekranda daha fazla işlem öğesi görünebilir. Bölme işlem çubuğunu etkinleştirmek için android:uiOptions etiketini "splitActionBarWhenNarrow" ile birlikte <application> etiketinize veya manifest dosyanızdaki her bir <activity> etiketine ekleyin. Etkinleştirildiğinde, ekran dar olduğunda sistem tüm işlem öğeleri için ekranın altı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 üstteki ana işlem çubuğuna ihtiyacınız yoksa (yalnızca sekmelerin üstte görünmesini istiyorsanız) bölme işlem ç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 öğe kaybolur. Geriye yalnızca ekranın üst kısmındaki gezinme sekmeleri ve ekranın alt kısmındaki işlem öğeleri gelir.

İşlem çubuğu stilleri

İşlem çubuğuna özel stil uygulamak istiyorsanız yığın çubuğa ve bölme çubuğa sırasıyla arka plan çekilebilir 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. Bir işlem sağlayıcısı, ilişkili olduğu her işlem öğesi için bir işlem görünümü, varsayılan işlem davranışı ve bir 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, ActionProvider öğesini genişletmek, parçanızdaki veya etkinliğinizdeki çeşitli işlem öğesi dönüşümlerini işlemek yerine yeniden kullanılabilir bir bileşen oluşturmak için iyi bir çözüm olur.

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

Bir işlem öğesi için işlem sağlayıcı bildirmek amacıyla etkinliğinizin seçenekler menüsündeki <item> öğesine android:actionProviderClass özelliğini, değer olarak işlem sağlayıcının sınıf adını girin. Örnek:

<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ıldığı bir örnek için ApiDemos'taki ActionBarShareActionProviderActivity öğesine bakın.

Daraltılabilir işlem görüntülemeleri

İşlem görünümü sağlayan işlem öğeleri, artık işlem görünümü durumları 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 bir 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 bildirmek 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 çağırması 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'lar

  • setHomeButtonEnabled(), simgenin/logonun ana ekrana gitmek için mi, yoksa "yukarıya gitmek için" düğme olarak mı davranacağını ("doğru" değerini geçirerek düğme olarak mı davranacağını) belirtmenize olanak tanır.
  • setIcon() ve setLogo(), çalışma zamanında işlem çubuğu simgesi veya logo 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. Parça etkinliğe eklenmişse ancak görünür değilse bu yararlı olur. Bu nedenle menü öğelerinin gizlenmesi gerekir.
  • FragmentManager.invalidateOptionsMenu(), Activity işlevindeki eşdeğer yöntemin kullanılamayacağı 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.

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şenlerini kullanıma sunuyor.

Izgara Düzeni

GridLayout, çocuklar için görünümleri dikdörtgen bir ızgaraya yerleştiren yeni bir görünüm 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 öğeler hangi satırları ve sütunları kaplayacaklarını belirtir (hücreler birden çok satır ve/veya sütun kapsayabilir) ve varsayılan olarak ızgaranın satırları ve sütunları boyunca sıralı olarak yerleştirilir. GridLayout yönü, sıralı alt öğelerin varsayılan olarak yatay mı yoksa dikey mi olacağını belirler. Alt öğeler arasındaki boşluk, yeni Space görünümünün örnekleri kullanılarak veya alt öğelerde ilgili kenar boşluğu 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ışı 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 sayede onu diğer View nesneleri gibi düşünebilirsiniz. Örneğin, dönüşümler uygulayabilir, ViewPropertyAnimator kullanarak animasyon oluşturabilir veya opaklığını setAlpha() ile ayarlayabilirsiniz.

TextureView yalnızca donanım hızlandırmalı bir pencerede çalışır.

Daha fazla bilgi için TextureView belgelerine 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 sürükleyip bırakabilecekleri (veya dokunarak) iki durumlu bir geçiştir.

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 sabitleme noktasında (genellikle seçili öğenin olduğu yerde) açılan kısa içerik menüleri oluşturmak için PopupMenu özelliğini kullanıma sundu. Android 4.0, PopupMenu uygulamasını birkaç faydalı özellikle zenginleştirir:

Tercihler

Yeni bir TwoStatePreference soyut sınıfı, iki durumlu seçim seçeneği sunan tercihlerin temelini oluşturur. Yeni SwitchPreference, kullanıcıların ek bir tercih ekranı veya iletişim kutusu açmaya gerek kalmadan bir ayarı açıp kapatmalarına olanak tanımak için tercih görünümünde Switch widget'ı sağlayan bir TwoStatePreference 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 ayarlayarak) artık "cihaz varsayılanı" teması: Theme.DeviceDefault. Bu, koyu Holo teması veya ilgili cihaz tarafından tanımlanan farklı bir koyu tema olabilir.

Aynı Android sürümünü çalıştırırken Theme.Holo tema ailesinin bir cihazdan diğerine geçmenin mümkün olmadığı 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 karakterlerini 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 sunduğunda) açık bir şekilde Theme.DeviceDefault ailesinden temalar uygulamanız gerekir.

Seçenekler menüsü düğmesi

Android 4.0 sürümünden itibaren, telefonlarda bir Menü donanımı düğmesinin artık gerekli olmadığını fark edeceksiniz. Ancak, mevcut uygulamanız bir seçenekler menüsü sağlıyorsa 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 tasarlanan uygulamalara yönelik bir ekran Menü düğmesi sağlar.

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

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

Sistem, Android'in ilk günlerinden bu yana durum çubuğu olarak bilinen ve operatör sinyali, saat, bildirimler gibi bilgileri sağlamak için telefon cihazlarının üst kısmında bulunan bir kullanıcı arayüzü bileşenini yönetmiştir. 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 altında yer alır ve geleneksel olarak durum çubuğu tarafından sağlanan öğeler için bir arayüz sağlar. Android 4.0'da sistem, gezinme çubuğu adı verilen yeni bir sistem kullanıcı arayüzü türü sağlar. Gezinme çubuğunu, sistem çubuğunun mobil cihazlara yönelik tasarlanmış bir versiyonu olarak düşünebilirsiniz. Sistemde gezinmek için gereken donanıma sahip olmayan cihazlar için gezinme kontrolleri sağlar, ancak sistem çubuğunun bildirim kullanıcı arayüzünü ve ayar kontrollerini içermez. Örneğin, gezinme çubuğunu sağlayan cihazın üst tarafında durum çubuğu da bulunur.

Şu an için mobil cihazlarda durum çubuğunu FLAG_FULLSCREEN işaretini kullanarak 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üncellenmiştir:

  • 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. Gezinme düğmeleri kararır ve sistem çubuğundaki diğer öğeler de gizlenir. Bu özelliği etkinleştirmek, sistemde gezinme düğmelerinin dikkatlerini dağıtmadan daha sürükleyici oyunlar oluşturmak için yararlıdır.
  • 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, gezinme çubuğunun tamamen gizlenmesini isteyen yeni bir işarettir. Bunun yalnızca bazı telefonlarda kullanılan gezinme çubuğunda işe yaradığını unutmayın (tabletlerde sistem çubuğunu gizlemez). Sistem kullanıcı girişini alır almaz gezinme çubuğu görünüme geri döner. Dolayısıyla bu mod, özellikle video oynatma veya tüm ekranın gerekli olduğu, ancak kullanıcı girişinin gerekli olmadığı diğer durumlarda yararlıdır.

Etkinliğinizdeki herhangi bir görünümde setSystemUiVisibility() komutunu ç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ümlerdeki tüm işaretleri birleştirir (VEYA) ve pencerenizde giriş odağı olduğu sürece bunları sistem kullanıcı arayüzüne uygular. Pencereniz giriş odağını kaybettiğinde (kullanıcı uygulamanızdan ayrılırsa veya bir iletişim kutusu görünür), işaretlerin etkisi kalmaz. Benzer şekilde, bu görünümleri görünüm hiyerarşisinden 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 gizlemek) sistem çubuğunun veya gezinme çubuğunun görünürlüğü değiştiğinde bildirim almak için bir View.OnSystemUiVisibilityChangeListener kaydetmeniz gerekir.

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

Giriş Çerçevesi

Android 4.0'da fareyle üzerine gelme etkinlikleri, yeni ekran kalemi ve fare düğmesi etkinlikleri için destek sunulmaktadır.

Fareyle öğelerin üzerine gelerek olan etkinlikler

View sınıfı, işaretçi cihazların (fare veya ekranda imleç çalıştıran başka cihazlar gibi) kullanımıyla daha zengin etkileşimler sağlamak için artık "fareyle üzerine gelme" etkinliklerini destekliyor.

Bir görünümde fareyle üzerine gelme etkinlikleri 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 öğelerin üzerine gelerek yapılan etkinlik aşağıdakilerden biri olabilir:

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

Uygulamanız, mevcut duruma göre görünümünü 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 tanıtımı 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ş almayı sağlayan API'ler sunuyor.

Ekran kalemi girişi, dokunma veya fare girişine benzer şekilde çalışır. Ekran kalemi, dijitalleştiriciyle temas ettiğinde uygulamalar, dokunma etkinliklerini, ekrana bir parmak kullanılarak dokunarak aldıkları gibi alır. Ekran kalemi, dijitalleştiricinin üzerinde durduğunda uygulamalar, fareyle üzerine gelme etkinliklerini tıpkı herhangi bir düğmeye basılmadığında bir fare işaretçisi ekranda hareket ettirildiğinde olduğu gibi 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 kalemiyle girişi parmak veya fare girişinden farklı şekillerde işlemeyi seçebilir.

Uygulamanız ayrıca getButtonState() ile bir 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 kişinin 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, AXIS_DISTANCE, AXIS_TILT ve AXIS_ORIENTATION eksen kodlarıyla getAxisValue() kullanarak bu bilgileri sorgulayabilir.

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

Kod

Yeni Property sınıfı, çağrı yapanların hedef nesnelere ilişkin değerleri genel olarak belirlemesine/almasına olanak tanıyan herhangi bir nesne üzerinde özellik belirtmenin hızlı, etkili ve kolay bir yolunu sunar. Ayrıca alan/yöntem referanslarını iletme işlevine izin verir 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;

Bir temel özel alan bar için ayarlayıcıyı çağırmak isterseniz daha önce şunu yaparsınız:

Kotlin

foo.setBar(value)

Java

foo.setBar(value);

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

Property sınıfını kullanarak Foo sınıfında BAR bir Property nesnesi tanımlayarak 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 özellikleri dönüştürme (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 sınıfını kullanır. Bu sayede, Property ile bir ObjectAnimator oluşturabilirsiniz. Bu yöntem, dize tabanlı yaklaşımdan daha hızlı, verimli ve tür açısından güvenlidir.

Donanım Hızlandırma

Android 4.0'dan itibaren, uygulamanız targetSdkVersion veya minSdkVersion ayarını “14" ya da daha yüksek bir değere ayarladıysanız tüm pencereler için donanım hızlandırma varsayılan olarak etkindir. Donanım hızlandırma genellikle daha yumuşak animasyonlar ve daha düzgün 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ğiyle donanım hızlandırmayı manuel olarak devre dışı bırakabilirsiniz. Alternatif olarak, setLayerType(LAYER_TYPE_SOFTWARE) işlevini çağırarak donanım hızlandırmayı tek tek görünümler için devre dışı bırakabilirsiniz.

Desteklenmeyen çizim işlemlerinin bir listesi de 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ı kullanıcı adı değildi; Android doğrudan işaretçiler kullanıyordu. Çöp toplayıcı nesneleri taşımadığı sürece bu bir sorun değildi. Ancak hatalı kodlar yazmayı mümkün kıldığı için görünüyordu. Android 4.0'da sistem artık bu hataları tespit etmek için dolaylı referanslar kullanıyor.

JNI yerel referanslarının tüm ayrıntıları, JNI İpuçları'nın "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ıyla ilgili sık karşılaşılan hatalar ve bunları nasıl düzeltebileceğiniz hakkında yakında yayınlanacak bir 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 içinde ve yerleşik Tarayıcıda Hintçe yazı tipleri (Devanagari, Bengalce ve Tamilce (glifleri birleştirmek için gereken karmaşık karakter desteği dahil) desteği)
  • WebView ürününde ve yerleşik Tarayıcıda Etiyopyaca, Gürcüce ve Ermenice yazı tipleri desteği
  • 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şim 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 Farkları Raporu'na bakın.

Önceki API'ler

Yukarıdaki tüm özelliklere ek olarak 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, birincil olarak cep telefonları için geliştirme yapıyorsanız bu son sürümlerde Android'e eklenen tüm API'ları bilmiyor olabilirsiniz.

Şu anda telefonlarda da kullanılabilen, gözünüzden kaçmış olabilecek en önemli API'lardan bazılarına göz atın:

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ıza olanak tanıyan bir çerçeve bileşeni. Fragments geliştirici kılavuzuna bakın.
  • ActionBar: Etkinlik penceresinin üst kısmındaki geleneksel başlık çubuğunun yerine. 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 verilerin eşzamansız olarak yüklenmesini kolaylaştıran bir çerçeve bileşeni. Yükleyiciler geliştirici kılavuzuna bakın.
  • Sistem panosu: Uygulamalar, verileri (metinlerin ötesinde) sistem genelindeki panoya 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: Görünüm çerçevesine yerleştirilmiş, sürükle ve bırak işlemlerini kolaylaştıran bir dizi API'dir. Sürükle ve Bırak geliştirici kılavuzuna bakın.
  • Yepyeni bir 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, tekrar ve daha fazlası 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 hesaplama API'si sunar. Bu API, çeşitli CPU ve GPU'lar arasında taşınabilir kalırken yerel ortamdan bekleyeceğiniz performans türünü sağlar. RenderScript geliştirici kılavuzuna bakın.
  • 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şturucuyu etkinleştirebilirsiniz. Bu, daha düzgün animasyonlar ve daha sorunsuz kaydırmanın yanı sıra genel olarak daha iyi performans ve kullanıcı etkileşimine yanıt sağlar.

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

  • Ve çok, ç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ına entegre etmek için yeni, güçlü API'ler. API'ler, hem USB ana makinesi hem de cihaz etkileşimleri desteği de dahil olmak üzere USB yığınını ve platformda yerleşik olarak bulunan hizmetleri temel alır. USB Ana Makine ve Aksesuarı geliştirici kılavuzuna bakın.
  • MTP/PTP API'leri: Uygulamalar, cihaz takıldığında ve kaldırıldığında bildirim almak, bu cihazlardaki dosyaları ve depolama alanını yönetmek, dosyalar ile meta verileri bu cihazlara ve bu cihazlara meta veri aktarmak için doğrudan bağlı kameralarla 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 maruz bırakır. Özellikle VOIP, push-to-talk, konferans ve ses akışı sağlayan uygulamalar, oturumları başlatmak ve mevcut herhangi bir ağ üzerinden veri akışı iletmek ya da almak için API'yi kullanabilir. android.net.rtp dokümanlarına göz atın.
  • Gezinme çubukları ve diğer genel hareket girişleri için destek.
  • Daha fazla 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 birimleri (600 dp veya 720 dp gibi) ile ölçülen boyutlara göre hassas bir şekilde hedefleyebilir. Örneğin, geleneksel olarak "büyük" ekranlar şeklinde gruplanan 5 inç ile 7 inç cihazlar arasında ayrım yapmanıza yardımcı olması açısından bu önemlidir. Ekran Boyutlarını Yönetmek için Yeni Araçlar adlı blog yayınına bakın.
  • <uses-feature> için yatay veya dikey ekran yönü gereksinimlerini bildirmek için yeni sabit değerler.
  • Cihazın "ekran boyutu" yapılandırması artık ekran yönü değişikliği sırasında 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 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" adı verilen bu tanımlayıcı, sistemin bir uygulamanın sistemle uyumlu olup olmadığını uygulamayı yüklemeden önce 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 eklemeniz de gerekebilir.

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