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 ayarlananMAX_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:
Events.TITLE
: Etkinliğin adıCalendarContract.EXTRA_EVENT_BEGIN_TIME
: Dönemden itibaren milisaniye cinsinden etkinlik başlangıç zamanıCalendarContract.EXTRA_EVENT_END_TIME
: Dönemden itibaren milisaniye cinsinden etkinlik bitiş zamanıEvents.EVENT_LOCATION
: Etkinliğin konumuEvents.DESCRIPTION
: Etkinlik açıklamasıIntent.EXTRA_EMAIL
: Davet edilecek kişilerin e-posta adresleriEvents.RRULE
: Etkinliğin yinelenme kuralıEvents.ACCESS_LEVEL
: Etkinliğin gizli mi yoksa herkese açık mı olduğuEvents.AVAILABILITY
: Bu etkinliğin zamanının başka etkinliklerin aynı saate planlanmasına izin verip vermediği
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:
- Bir
GL_TEXTURE_2D
doku görüntüsüne bağlı olmalıdırlar. - 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ışı:
- OpenGL ES 2.0 içeriğinizden
EffectContext.createWithCurrentGlContext()
çağrısı yapın. EffectContext.getFactory()
öğesini çağırmak için döndürülenEffectContext
işlevini kullanın. Bu işlem,EffectFactory
öğesinin bir örneğini döndürür.- @link android.media.effect.EffectFactory} adresinden
EFFECT_FISHEYE
veyaEFFECT_VIGNETTE
gibi bir efekt adı ileterekcreateEffect()
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ıkINTERNET
izni gerekiyor. İnternetten içerik oynatmak içinMediaPlayer
uygulamasını kullanıyorsanız manifest dosyanızaINTERNET
iznini eklediğinizden emin olun. Aksi takdirde, medya oynatmanız Android 4.0'dan itibaren çalışmaz.setSurface()
, video havuzu olarak davranacak birSurface
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çinisVideoSnapshotSupported()
numaralı telefonu aramalısınız. - Artık bu özelliklerin değişmesini önlemek için
setAutoExposureLock()
vesetAutoWhiteBalanceLock()
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ğinizinonCreate()
yöntemi sırasındaNdefMessage
yöntemini kullanabilirsiniz. Daha sonra, etkinlik ön plandayken Android Beam başka bir cihazla etkinleştirildiğinde sistemNdefMessage
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ğinizNdefMessage
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çincreateNdefMessage()
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ındiscoverPeers()
numaralı telefonu arayarak yakındaki cihazları keşfedinconnect()
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, birWifiP2pDeviceList
sağlar. Bu nesneden kapsama alanındaki her cihaz için birWifiP2pDevice
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 birWifiP2pGroup
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 birWifiP2pInfo
nesnesi sağlar.
Wi-Fi P2P API'lerini kullanmak için uygulamanızın aşağıdaki kullanıcı izinlerini istemesi gerekir:
ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
INTERNET
(uygulamanız teknik olarak internete bağlanmasa da, standart java yuvalarıyla Wi-Fi P2P benzerleriyle iletişim kurmak için internet izni gerekir).
Android sistemi ayrıca belirli Kablosuz P2P etkinlikleri sırasında birkaç farklı işlem yayınlar:
WIFI_P2P_CONNECTION_CHANGED_ACTION
: P2P bağlantı durumu değişti. Bu,WifiP2pInfo
nesnesiyleEXTRA_WIFI_P2P_INFO
veNetworkInfo
nesnesiyleEXTRA_NETWORK_INFO
taşır.WIFI_P2P_STATE_CHANGED_ACTION
: P2P durumu, etkin ve devre dışı olarak değişti.WIFI_P2P_STATE_DISABLED
veyaWIFI_P2P_STATE_ENABLED
ileEXTRA_WIFI_STATE
taşıyorWIFI_P2P_PEERS_CHANGED_ACTION
: Benzer cihazların listesi değişti.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: Bu cihazla ilgili ayrıntılar değişti.
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:
- Çağrılduğunda,
sendAccessibilityEvent()
vesendAccessibilityEventUnchecked()
yöntemlerionInitializeAccessibilityEvent()
değerine erteler.View
özel uygulamaları,AccessibilityEvent
öğesine ek erişilebilirlik bilgileri eklemek içinonInitializeAccessibilityEvent()
öğ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. - 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 yetersizseAccessibilityEvent
öğesine ek metin içeriği eklemek içinView
özel uygulamaları genellikleonPopulateAccessibilityEvent()
öğesini uygulamalıdır.AccessibilityEvent
öğesine daha fazla metin açıklaması eklemek içingetText()
numaralı telefonu arayın.add()
- Bu noktada
View
, üst görünümderequestSendAccessibilityEvent()
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ğisendAccessibilityEvent()
ileAccessibilityManager
öğesine gönderene kadar birAccessibilityRecord
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:
- Bir uygulamadan
AccessibilityEvent
aldıktan sonra, belirli birAccessibilityRecord
öğesini almak içinAccessibilityEvent.getRecord()
çağırın (etkinliğe eklenmiş birkaç kayıt olabilir). - Bir
AccessibilityNodeInfo
nesnesini almak içinAccessibilityEvent
veya bağımsızAccessibilityRecord
öğesindengetSource()
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ülenAccessibilityNodeInfo
nesnesi etkinlik kaynağını,AccessibilityRecord
kaynağındaki kaynak ise etkinlik kaynağının öncekini tanımlar. AccessibilityNodeInfo
ile bu öğe hakkındaki bilgileri sorgulayabilir, görünüm hiyerarşisinde geçiş yapmak içingetParent()
veyagetChild()
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:
AccessibilityManager.AccessibilityStateChangeListener
, erişilebilirlik etkinleştirildiğinde veya devre dışı bırakıldığında geri arama almanıza olanak tanıyan bir arayüzdür.getEnabledAccessibilityServiceList()
, şu anda hangi erişilebilirlik hizmetlerinin etkin olduğu hakkında bilgi verir.isTouchExplorationEnabled()
, dokunarak keşfet modunun etkin olup olmadığını belirtir.
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çinstart()
yöntemini, ardından ses verilerini bir bayt arabelleğine aktarması içinaudioAvailable()
yöntemini çağırması gerekir. Motorunuz tüm sesleri arabelleğe geçtikten sonradone()
ç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:
TYPE_AMBIENT_TEMPERATURE
: Ortam (oda) sıcaklığını santigrat cinsinden sağlayan bir sıcaklık sensörü.TYPE_RELATIVE_HUMIDITY
: Göreceli ortam (oda) nemini yüzde olarak sağlayan bir nem sensörüdür.
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()
vesetLogo()
, ç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.
Pop-up menüler
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:
- Artık XML menü kaynağından bir pop-up menünün içeriğini
inflate()
ile kolayca şişirebilir ve menü kaynağı kimliğini iletebilirsiniz. - Artık menü kapatıldığında geri arama alacak bir
PopupMenu.OnDismissListener
de oluşturabilirsiniz.
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çinSTATUS_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:
- Daha hızlı performans için V8 JavaScript derleyici güncellendi
- Android 3.0'dan gelen diğer önemli geliştirmeler de artık telefonlarda kullanılabilir:
- Tüm sayfalarda sabit konumlu öğeler için destek
- HTML medya yakalama
- Cihaz yönü etkinlikleri
- CSS 3D dönüşümleri
İzinler
Yeni izinler şunlardır:
ADD_VOICEMAIL
: Bir sesli mesaj hizmetinin, cihaza sesli mesajlar eklemesine izin verir.BIND_TEXT_SERVICE
:SpellCheckerService
politikasını uygulayan bir hizmet, kendisi için bu izni almalıdır.BIND_VPN_SERVICE
:VpnService
politikasını uygulayan bir hizmet, kendisi için bu izni almalıdır.- android.Manifest.permission#READ_PROFILE:
ContactsContract.Profile
sağlayıcısına okuma erişimi sağlar. - android.Manifest.permission#WRITE_PROFILE:
ContactsContract.Profile
sağlayıcısına yazma erişimi sağlar.
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
veyatargetSdkVersion
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çinandroid: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?