API Düzeyi: 14
Android 4.0 (ICE_CREAM_SANDWICH
), kullanıcılar ve uygulama geliştiriciler için çeşitli yeni özellikler ekleyen ana platform sürümüdür. Aşağıda açıklanan tüm yeni özellikler ve API'lerin yanı sıra Android 4.0, Android 3.x'teki kapsamlı API'ler ve Holografik temalar kümesini daha küçük ekranlara taşıdığı için önemli bir platform sürümüdür. Uygulama geliştirici olarak artık, aynı Android sürümünü (Android 4.0 (API seviyesi 14) veya üzerini çalıştırırken), cep telefonları, tabletler ve diğer cihazlar için optimize edilmiş kullanıcı deneyimi sağlayan tek bir APK ile uygulamanızı geliştirip yayınlamanıza olanak tanıyan birleşik bir API çerçevesine sahipsiniz.
Android 4.0 platformu, geliştiriciler için Android SDK'sı için indirilebilir bir bileşen olarak mevcuttur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör dış görünümü ve daha fazlası bulunur. Android 4.0 sürümünü geliştirmeye veya test etmeye başlamak için Android SDK Yöneticisi'ni kullanarak platformu SDK'nıza indirin.
API'ye Genel Bakış
Aşağıdaki bölümlerde, Android 4.0'daki yeni API'ler için teknik bir genel bakış sunulmaktadır.
Kişi Sağlayıcıdaki Sosyal API'lar
ContactsContract
sağlayıcısı tarafından tanımlanan kişi API'leri, cihaz sahibinin kişisel profili ve kullanıcıların cihazda yüklü sosyal ağlara bireysel kişileri davet etme özelliği gibi sosyal odaklı yeni özellikleri destekleyecek şekilde genişletilmiştir.
Kullanıcı Profili
Android artık ContactsContract.Profile
tablosunda tanımlandığı şekilde cihaz sahibini temsil eden kişisel bir profil içeriyor. Kullanıcı kimliği sağlayan sosyal uygulamalar, ContactsContract.Profile
içinde yeni bir ContactsContract.RawContacts
girişi oluşturarak kullanıcının profil verilerine katkıda bulunabilir. Diğer bir deyişle, cihaz kullanıcısını temsil eden ham kişiler ContactsContract.RawContacts
URI'si tarafından tanımlanan geleneksel ham kişiler tablosuna ait değildir. Bunun yerine, CONTENT_RAW_CONTACTS_URI
adresindeki tabloya profil ham kişisi eklemeniz gerekir. Bu tablodaki ham kişiler daha sonra "Ben" etiketli, kullanıcı tarafından görülebilen tek bir profilde toplanır.
Profil için yeni bir ham kişi eklemek için android.Manifest.permission#WRITE_PROFILE izni gerekir. Benzer şekilde, profil tablosundan okumak için android.Manifest.permission#READ_PROFILE iznini istemeniz gerekir. Ancak çoğu uygulamanın, profile veri katkıda bulunurken bile kullanıcı profilini okuması gerekmez. Kullanıcı profilini okumak hassas bir izindir ve kullanıcıların bu profili isteyen uygulamalara şüpheyle yaklaşmalarını beklemelisiniz.
Davet Amacı
INVITE_CONTACT
intent işlemi, bir uygulamanın, kullanıcının sosyal ağa bir kişi eklemek istediğini belirten bir işlemi başlatmasına olanak tanır. Uygulamayı alan uygulama, belirtilen kişiyi bu sosyal ağa davet etmek için bu uygulamayı kullanır. Çoğu uygulama bu işlemin alıcı tarafında olacaktır. Örneğin, kullanıcı bir kişinin iletişim bilgilerinde listelenen belirli bir sosyal uygulama için "Bağlantı ekle"yi seçtiğinde yerleşik Kişiler uygulaması davet amacını çağırır.
Uygulamanızı "Bağlantı ekle" listesinde olduğu gibi görünür hale getirmek için uygulamanızın, sosyal ağınızdaki kişi bilgilerini senkronize etmek üzere bir senkronizasyon adaptörü sağlaması gerekir. Daha sonra sisteme, uygulamanızın senkronizasyon yapılandırma dosyasına inviteContactActivity
özelliğini ekleyerek INVITE_CONTACT
amacına yanıt verdiğini sisteme, davet amacını gönderirken sistemin başlatması gereken etkinliğin tam adıyla birlikte belirtmeniz gerekir.
Başlatılan etkinlik, daha sonra söz konusu kişinin URI'sını niyetin verilerinden alıp o kişiyi ağa davet etmek veya o kişiyi kullanıcının bağlantılarına eklemek için gerekli çalışmayı yapabilir.
Büyük boyutlu fotoğraflar
Android artık kişiler için yüksek çözünürlüklü fotoğrafları desteklemektedir. Artık, kişi kaydına bir fotoğraf aktardığınızda sistem bu fotoğrafı hem 96x96 boyutunda küçük resim (önceden olduğu gibi) hem de dosya tabanlı yeni bir fotoğraf deposunda saklanan 256x256 "görüntülü fotoğraf" olarak işler (sistemin seçtiği tam boyutlar gelecekte değişebilir). Veri satırındaki normal PHOTO
sütununa büyük bir fotoğraf ekleyerek bir kişiye büyük bir fotoğraf ekleyebilirsiniz. Sistem daha sonra bu fotoğrafı uygun küçük resme işler ve fotoğraf kayıtlarını görüntüler.
İletişim Kullanımı Geri Bildirimi
Yeni ContactsContract.DataUsageFeedback
API'leri, kullanıcıların belirli iletişim yöntemlerini (ör. her bir telefon numarasını veya e-posta adresini ne sıklıkta kullandığı) ne sıklıkta kullandığını izlemenize yardımcı olur. Bu bilgiler, her bir kullanıcıyla ilişkilendirilen her iletişim yöntemi için sıralamanın iyileştirilmesine ve her bir kullanıcıyla iletişime geçmek için daha iyi öneriler sağlanmasına yardımcı olur.
Takvim Sağlayıcı
Yeni takvim API'ları, Takvim Sağlayıcı'da depolanan takvimleri, etkinlikleri, katılımcıları, hatırlatıcıları ve uyarıları okumanıza, eklemenize, değiştirmenize ve silmenize olanak tanır.
Çeşitli uygulamalar ve widget'lar, takvim etkinliklerini okumak ve değiştirmek için bu API'leri kullanabilir. Ancak en cazip kullanım alanlarından bazıları, tüm kullanıcının etkinlikleri için birleşik bir konum sunmak amacıyla kullanıcının diğer takvim hizmetlerindeki takvimini Takvim Sağlayıcısı ile senkronize eden senkronizasyon bağdaştırıcılarıdır. Örneğin, Google Takvim etkinlikleri Google Takvim Senkronizasyon Bağdaştırıcısı tarafından Takvim Sağlayıcı ile senkronize edilir. Böylece bu etkinlikler, Android'in yerleşik Takvim uygulaması ile görüntülenebilir.
Takvim Sağlayıcı'daki takvimler ve etkinlikle ilgili bilgiler için veri modeli CalendarContract
tarafından tanımlanır. Kullanıcının tüm takvim verileri, çeşitli CalendarContract
alt sınıfları tarafından tanımlanan çeşitli tablolarda depolanır:
CalendarContract.Calendars
tablosu, takvime özel bilgileri içerir. Bu tablodaki her satır, tek bir takvimle ilgili ad, renk, senkronizasyon bilgileri gibi ayrıntıları içerir.CalendarContract.Events
tablosu, etkinliğe özel bilgileri içerir. Bu tablodaki her satırda, tek bir etkinlikle ilgili bilgiler (ör. etkinlik başlığı, konumu, başlangıç zamanı, bitiş zamanı vb.) bulunur. Etkinlik bir kez gerçekleşebilir veya birden çok kez yinelenebilir. Katılımcılar, hatırlatıcılar ve genişletilmiş özellikler ayrı tablolarda depolanır ve etkinliğe bağlamak için etkinliğin_ID
özelliği kullanılır.CalendarContract.Instances
tablosu, bir etkinliğin gerçekleşme zamanını gösterir. Bu tablodaki her satır, tek bir olayı temsil eder. Tek seferlik etkinliklerde örnekler ile etkinlikler bire bir eşlenir. Düzenli etkinliklerde, söz konusu etkinliğin birden fazla kez gerçekleşmesine karşılık gelecek şekilde birden fazla satır otomatik olarak oluşturulur.CalendarContract.Attendees
tablosunda etkinlik katılımcısı veya davetli bilgileri yer alır. Her satır, bir etkinliğin tek bir davetlisini temsil eder. Kişinin türünü ve etkinlikteki kişinin yanıtını belirtir.- Uyarı/bildirim verileri
CalendarContract.Reminders
tablosunda yer alır. Her satır, bir etkinlikle ilgili tek bir uyarıyı temsil eder. Bir etkinlikte birden fazla hatırlatıcı olabilir. Etkinlik başına hatırlatıcı sayısı, belirtilen takvimin sahibi olan senkronizasyon bağdaştırıcısı tarafından ayarlananMAX_REMINDERS
politikasında belirtilir. Hatırlatıcılar, etkinlik planlanmadan birkaç dakika önce belirtilir ve kullanıcıya hatırlatma yapmak için uyarı, e-posta veya SMS kullanma gibi bir alarm yöntemi belirtir. CalendarContract.ExtendedProperties
tablosu, senkronizasyon bağdaştırıcısı tarafından kullanılan opak veri alanlarını içerir. Sağlayıcı, ilgili etkinlikleri silindiğinde bu öğeleri silmek dışında bu tablodaki öğelerle ilgili herhangi bir işlem yapmaz.
Takvim Sağlayıcısı ile bir kullanıcının takvim verilerine erişmek için uygulamanızın READ_CALENDAR
(okuma erişimi için) ve WRITE_CALENDAR
(yazma erişimi için) iznini istemesi gerekir.
Etkinlik amacı
Yapmak istediğiniz tek şey kullanıcının takvimine bir etkinlik eklemekse Takvim uygulamasında yeni etkinlikler oluşturan bir etkinlik başlatmak için Events.CONTENT_URI
tarafından tanımlanan verilerle bir ACTION_INSERT
amacı kullanabilirsiniz. Niyeti kullanmak herhangi bir izin gerektirmez ve aşağıdaki ekstra özelliklerle etkinlik ayrıntılarını belirtebilirsiniz:
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 tekrarlama 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ğini belirtir
Sesli Mesaj Sağlayıcı
Yeni Sesli Mesaj Sağlayıcısı, kullanıcıların tüm sesli mesajlarını tek bir görsel sunuda sunmak için uygulamaların cihaza sesli mesaj eklemesine olanak tanır. Örneğin, bir kullanıcının birden fazla sesli mesaj kaynağı olabilir. Örneğin, biri telefonun servis sağlayıcısından, diğerleri de VoIP veya diğer alternatif ses hizmetlerinden geliyor olabilir. Bu uygulamalar, sesli mesajlarını cihaza eklemek için Voicemail Provider API'lerini kullanabilir. Daha sonra yerleşik Telefon uygulaması, tüm sesli mesajları kullanıcıya birleştirilmiş bir sunuda sunar. Tüm sesli mesajları okuyabilen tek uygulama sistemin Telefon uygulaması olsa da, sesli mesaj sağlayan her uygulama sisteme eklediği mesajları okuyabilir (ancak diğer hizmetlerdeki sesli mesajları okuyamaz).
Şu anda API'ler, üçüncü taraf uygulamalarının sistemdeki tüm sesli mesajları okumasına izin vermediğinden sesli mesaj API'larını kullanması gereken yegane üçüncü taraf uygulamaları, kullanıcıya sesli mesaj teslim eden uygulamalardır.
VoicemailContract
sınıfı, Sesli Mesaj Provder'ı için içerik sağlayıcısını tanımlar. VoicemailContract.Voicemails
ve VoicemailContract.Status
alt sınıfları, uygulamaların cihazda depolama için sesli mesaj verileri ekleyebileceği tablolar sağlar. Sesli mesaj sağlayıcı uygulaması örneği için Sesli Mesaj Sağlayıcı Demo'ya göz atın.
Multimedya
Android 4.0'da fotoğraf, video ve müzik gibi medyalarla etkileşim kuran uygulamalar için çeşitli yeni API'ler vardır.
Medya Efektleri
Yeni bir medya efektleri çerçevesi, resimlere ve videolara çeşitli görsel efektler uygulamanıza olanak tanır. Örneğin, resim efektleri kırmızı gözü kolayca düzeltmenize, bir resmi gri tonlamaya dönüştürmenize, parlaklığı ayarlamanıza, doygunluğu ayarlamanıza, resmi döndürmenize, balık gözü efekti uygulamanıza ve çok daha fazlasını yapmanıza olanak tanır. Sistem, maksimum performans elde etmek için tüm efekt işlemeyi GPU'da gerçekleştirir.
Maksimum performans için efektler doğrudan OpenGL dokularına uygulanır. Bu nedenle uygulamanızın efekt API'lerini kullanabilmesi için geçerli bir OpenGL bağlamına sahip olması gerekir. Efekt uyguladığınız dokular bit eşlemlerden, videolardan veya hatta kameradan olabilir. Bununla birlikte, dokuların karşılaması gereken belirli kısıtlamalar vardır:
- Bunlar
GL_TEXTURE_2D
doku görüntüsüne bağlı olmalıdır. - En az bir mipmap düzeyi içermelidir
Effect
nesnesi, bir resim çerçevesine uygulayabileceğiniz tek bir medya efekti tanımlar. Effect
oluşturmanın temel iş akışı:
- OpenGL ES 2.0 içeriğinizden
EffectContext.createWithCurrentGlContext()
çağrısı yapın. EffectContext.getFactory()
yöntemini çağırmak için döndürülenEffectContext
öğesini kullanın. Bu işlem,EffectFactory
öğesinin bir örneğini döndürür.createEffect()
yöntemini çağırarak @link android.media.effect.EffectFactory} gibi bir efekt adı (ör.EFFECT_FISHEYE
veyaEFFECT_VIGNETTE
) girin.
setParameter()
yöntemini çağırıp parametre adı ile parametre değeri ileterek bir efektin parametrelerini ayarlayabilirsiniz. Her efekt türü, efekt adıyla belgelenen farklı parametreleri kabul eder. Örneğin, EFFECT_FISHEYE
, bozulmanın scale
için bir parametresine sahiptir.
Bir dokuya efekt uygulamak için Effect
üzerinde apply()
çağrısı yapın ve giriş dokusu ile genişliği, yüksekliği ve çıkış dokusunu geçirin. Giriş dokusu, GL_TEXTURE_2D
doku görüntüsüne bağlı olmalıdır (genellikle glTexImage2D()
işlevi çağrılarak yapılır). Birden fazla mipmap düzeyi sağlayabilirsiniz. Çıkış dokusu bir doku görüntüsüne bağlanmamışsa girişle aynı boyuta sahip olan GL_TEXTURE_2D
efekti ve bir mipmap düzeyi (0) ile otomatik olarak bağlanır.
EffectFactory
'de listelenen tüm efektlerin desteklendiği garanti edilir.
Ancak harici kitaplıklarda bulunan bazı ek efektler tüm cihazlar tarafından desteklenmez. Bu nedenle öncelikle isEffectSupported()
çağrısı yaparak harici kitaplıktan istenen etkinin desteklenip desteklenmediğini kontrol etmeniz gerekir.
Uzaktan kumanda istemcisi
Yeni RemoteControlClient
, medya oynatıcıların cihaz kilit ekranı gibi uzaktan kumanda istemcilerinden oynatma kontrollerini etkinleştirmesine olanak tanır. Medya oynatıcılar, uzaktan kumandada gösterilmek üzere çalan medyayla ilgili parça bilgileri ve albüm kapağı gibi bilgileri de gösterebilir.
Medya oynatıcınız için uzaktan kumanda istemcilerini etkinleştirmek amacıyla, oluşturucusuyla bir RemoteControlClient
örneği oluşturup ACTION_MEDIA_BUTTON
yayınlayan bir PendingIntent
iletin. Amaç, uygulamanızda ACTION_MEDIA_BUTTON
etkinliğini işleyen açık BroadcastReceiver
bileşenini de beyan etmelidir.
Oynatıcınızın hangi medya kontrolü girişlerini işleyebileceğini tanımlamak için FLAG_KEY_MEDIA_PREVIOUS
ve FLAG_KEY_MEDIA_NEXT
gibi bir FLAG_KEY_MEDIA_*
işaret grubunu ileterek RemoteControlClient
cihazınızda setTransportControlFlags()
işlevini çağırmanız gerekir.
Ardından RemoteControlClient
kartınızı MediaManager.registerRemoteControlClient()
adlı kuruluşa ileterek kaydettirmeniz gerekir.
Kaydedildikten sonra, RemoteControlClient
somutlaştırırken beyan ettiğiniz yayın alıcısı uzaktan kumandadan bir düğmeye basıldığında ACTION_MEDIA_BUTTON
etkinliği alır. Aldığınız niyet, basılan medya tuşu için KeyEvent
içerir. Bu anahtarı getParcelableExtra(Intent.EXTRA_KEY_EVENT)
ile amaçtan alabilirsiniz.
Uzaktan kumandada oynatılan medyayla ilgili bilgileri görüntülemek için editMetaData()
yöntemini çağırın ve döndürülen RemoteControlClient.MetadataEditor
meta verisine meta verileri ekleyin. Medya posteri için bit eşlem, geçen süre gibi sayısal bilgiler ve parça başlığı gibi metin bilgileri sağlayabilirsiniz. Kullanılabilir anahtarlar hakkında bilgi için MediaMetadataRetriever
içindeki METADATA_KEY_*
işaretlerine bakın.
Örnek bir uygulama için Random Music Player'a bakın.
Medya oynatıcı
MediaPlayer
ürününden online medya oynatma için artı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 davranmak için birSurface
tanımlamanıza olanak tanır.setDataSource()
, isteğinizle birlikte ek HTTP üstbilgileri göndermenize olanak tanır ve HTTP(S) canlı yayını için yararlı olabilir- HTTP(S) canlı yayın artık istekler genelinde HTTP çerezlerine uyuyor
Medya türleri
Android 4.0 aşağıdakiler için destek sağlar:
- HTTP/HTTPS canlı yayın protokolü sürüm 3
- ADTS ham AAC ses kodlaması
- WEBP resimleri
- Matroska videosu
Daha fazla bilgi için Desteklenen Medya Biçimleri bölümüne bakın.
Kamera
Camera
sınıfı artık yüz algılamaya, odaklama ve ölçüm alanlarını kontrol etmeye yönelik API'ler içermektedir.
Yüz algılama
Kamera uygulamaları artık yalnızca kişinin yüzünü değil, aynı zamanda gözler ve ağız gibi belirli yüz özelliklerini de algılayan Android yüz algılama API'leriyle yeteneklerini geliştirebiliyor.
Kamera uygulamanızda yüzleri algılamak için setFaceDetectionListener()
yöntemini çağırarak bir Camera.FaceDetectionListener
kaydetmeniz gerekir. Daha sonra, startFaceDetection()
numaralı telefonu arayarak kamera yüzeyinizi başlatabilir ve yüzleri algılamaya başlayabilirsiniz.
Sistem, kamera sahnesinde bir veya daha fazla yüz algıladığında, bir dizi Camera.Face
nesne dahil olmak üzere Camera.FaceDetectionListener
uygulamanızda onFaceDetection()
geri çağırmasını çağırır.
Camera.Face
sınıfının bir örneği, algılanan yüz hakkında aşağıdakiler de dahil olmak üzere çeşitli bilgiler sağlar:
- Kameranın geçerli görüş alanına göre yüzün sınırlarını belirten bir
Rect
- Sistemin, nesnenin insan yüzü olduğundan ne kadar emin olduğunu belirten 1 ile 100 arasında bir tam sayı
- Birden fazla yüzü izleyebilmeniz için benzersiz bir kimlik
- Gözlerin ve ağzın bulunduğu yeri gösteren birkaç
Point
nesne
Not: Bazı cihazlarda yüz algılama özelliği desteklenmeyebilir. Bu yüzden, getMaxNumDetectedFaces()
yöntemini çağırarak kontrol etmeniz ve döndürülen değerin sıfırdan büyük olduğundan emin olmanız gerekir. Ayrıca bazı cihazlar gözlerin ve ağzın tanımlanmasını desteklemeyebilir. Bu durumda, Camera.Face
nesnesindeki bu alanlar boş olur.
Odaklanma ve ölçüm alanları
Kamera uygulamaları artık kameranın odaklamak ve beyaz dengesi ile otomatik pozlamayı ölçmek için kullandığı alanları kontrol edebilir. Her iki özellik de kameranın o anki görünümünün odaklanılması veya ölçülmesi gereken bölgesini belirtmek için yeni Camera.Area
sınıfını kullanır. Camera.Area
sınıfının bir örneği, alanın sınırlarını Rect
ve alanın ağırlığını tanımlar. Bu, söz konusu alanın, ilgili diğer alanlara göre önem düzeyini bir tam sayıyla temsil eder.
Bir odak alanı veya ölçüm alanı ayarlamadan önce, ilk olarak sırasıyla getMaxNumFocusAreas()
veya getMaxNumMeteringAreas()
yöntemini çağırmalısınız. Bunlar sıfır döndürürse cihaz, ilgili özelliği desteklemiyor demektir.
Kullanılacak odak veya sayılacak alanları belirlemek için setFocusAreas()
veya setMeteringAreas()
çağrılarını yapmanız yeterlidir. Her biri, odaklama veya ölçüm için dikkate alınacak alanları belirten Camera.Area
nesneden List
tanesini alır. Örneğin, kullanıcının önizlemedeki bir alana dokunarak odak alanını ayarlamasına olanak tanıyan bir özellik uygulayabilirsiniz. Daha sonra, bu alanı bir Camera.Area
nesnesine çevirir ve kameranın sahnedeki bu alana odaklanmasını isteyin.
O alandaki odak veya pozlama, bölgedeki sahne değiştikçe sürekli olarak güncellenir.
Fotoğraflar için sürekli otomatik odak
Artık fotoğraf çekerken sürekli otomatik odaklamayı (CAF) etkinleştirebilirsiniz. Kamera uygulamanızda CAF'yi etkinleştirmek için FOCUS_MODE_CONTINUOUS_PICTURE
parametresini setFocusMode()
adresine iletin. Fotoğraf çekmeye hazır olduğunuzda
autoFocus()
numaralı telefonu arayın. Camera.AutoFocusCallback
cihazınız, odaklanmanın gerçekleştirilip gerçekleştirilmediğini belirtmek için hemen bir geri arama alır. Geri çağırmayı aldıktan sonra CAF'yi devam ettirmek için cancelAutoFocus()
numarasını aramanız gerekir.
Not: API düzeyi 9'da eklenen FOCUS_MODE_CONTINUOUS_VIDEO
kullanılarak video yakalanırken sürekli otomatik odak da desteklenir.
Diğer kamera özellikleri
- Video kaydederken artık video oturumunu kesintiye uğratmadan fotoğraf kaydetmek için
takePicture()
adlı kişiyi arayabilirsiniz. Bunu yapmadan önce, donanımın desteklediğinden emin olmak içinisVideoSnapshotSupported()
çağırmanız gerekir. - 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()
adlı kişiyi arayabilirsiniz. Daha önce, bunu yalnızca önizlemeye başlamadan önce çağırabiliyordunuz, ancak artık yönü istediğiniz zaman değiştirebilirsiniz.
Kamera yayın amaçları
Camera.ACTION_NEW_PICTURE
: Bu, kullanıcının yeni bir fotoğraf çektiğini gösterir. Yerleşik Kamera uygulaması bu yayını fotoğraf çekildikten sonra başlatır ve üçüncü taraf kamera uygulamaları da fotoğraf çekildikten sonra bu amacı yayınlamalıdır.Camera.ACTION_NEW_VIDEO
: Bu, kullanıcının yeni bir video yakaladığını gösterir. Yerleşik Kamera uygulaması bu yayını video kaydedildikten sonra çağırır ve üçüncü taraf kamera uygulamaları da video çekildikten sonra bu amacı yayınlamalıdır.
Android Işınlama (NFC ile NDEF Push)
Android Beam, NDEF mesajlarını bir cihazdan diğerine ("NDEF Push" olarak da bilinen bir işlem) göndermenizi sağlayan yeni bir NFC özelliğidir. Android Beam'i destekleyen Android destekli iki cihaz, genellikle sırtları birbirine değecek şekilde yakında (yaklaşık 4 cm) olduğunda veri aktarımı başlatılır. NDEF mesajındaki veriler, cihazlar arasında paylaşmak istediğiniz tüm verileri içerebilir. Örneğin, Android ışınını kullanarak Kişiler uygulaması kişileri, YouTube videoları ve Tarayıcı URL'leri paylaşır.
Android Beam'i kullanarak cihazlar arasında veri aktarmak için, etkinliğiniz ön plandayken paylaşmak istediğiniz bilgileri içeren bir NdefMessage
oluşturmanız
gerekir. Ardından NdefMessage
öğesini sisteme şu iki yöntemden birini kullanarak iletmeniz gerekir:
- Etkinlik sırasında aktarılacak tek bir
NdefMessage
tanımlayın:Göndermek istediğiniz mesajı ayarlamak için
setNdefPushMessage()
numaralı telefonu arayın. Örneğin, bu yöntemi çağırabilir ve etkinliğinizinonCreate()
yöntemi sırasındaNdefMessage
olarak iletebilirsiniz. Daha sonra, etkinlik ön plandayken Android Beam başka bir cihazla etkinleştirildiğinde sistemNdefMessage
bilgisini diğer cihaza gönderir. - Android Beam'in başlatıldığı anda aktarılacak
NdefMessage
öğesini tanımlayın:createNdefMessage()
yöntemini uyguladığınızda, göndermek istediğinizNdefMessage
değerini döndürenNfcAdapter.CreateNdefMessageCallback
yöntemini uygulayın. Ardından,NfcAdapter.CreateNdefMessageCallback
uygulamasınısetNdefPushMessageCallback()
adlı CSS'ye geçirin.Bu durumda, etkinliğiniz ön plandayken Android Beam başka bir cihazla etkinleştirildiğinde sistem, göndermek istediğiniz
NdefMessage
öğeyi almak içincreateNdefMessage()
yöntemini çağırır. Bu,NdefMessage
öğesini, mesajın içeriğinin etkinlik süresince değişebileceği ihtimaline karşı yalnızca Android Işınlama başlatıldığında 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()
değerini çağırır.
Alıcı cihazda, sistem NDEF Push mesajlarını normal NFC etiketlerine benzer bir şekilde gönderir. Sistem, etkinlik başlatmak için ACTION_NDEF_DISCOVERED
işlemiyle bir amaç çağırır. Bu amaç için URL veya MIME türü, NdefMessage
içindeki ilk NdefRecord
öğesine göre ayarlanır. Yanıtlamak istediğiniz etkinlik için uygulamanızın önemsediği URL'lere veya MIME türlerine yönelik intent filtreleri beyan edebilirsiniz. Etiket Gönderme hakkında daha fazla bilgi için NFC geliştirici kılavuzuna bakın.
NdefMessage
öğenizin bir URI taşımasını istiyorsanız artık bir dizeye veya Uri
nesnesine dayalı yeni bir NdefRecord
oluşturmak için createUri
kolaylık yöntemini kullanabilirsiniz. URI, uygulamanızın bir Android Beam etkinliği sırasında da almasını istediğiniz özel bir biçimse, gelen NDEF mesajını almak için aynı URI şemasını kullanarak etkinliğiniz için bir intent filtresi oluşturmalısınız.
Diğer uygulamalar aynı intent işlemi için filtre uygulasa bile uygulamanızın gelen NDEF mesajını işlediğinden emin olmak için NdefMessage
ile bir "Android uygulama kaydı" iletmeniz gerekir. createApplicationRecord()
yöntemini çağırıp uygulamanızın paket adını ileterek Android uygulama kaydı oluşturabilirsiniz. Diğer cihaz, uygulama kaydını içeren NDEF mesajını aldığında ve birden fazla uygulama, belirtilen amacı işleyen etkinlikler içerdiğinde, sistem mesajı her zaman uygulamanızdaki etkinliğe iletir (eşleşen uygulama kaydına göre). Hedef cihazda uygulamanız yüklü değilse sistem, Google Play'i başlatmak için Android uygulama kaydını kullanır ve yükleme için kullanıcıyı uygulamaya yönlendirir.
Uygulamanız NDEF Push mesajlaşmasını gerçekleştirmek için NFC API'lerini kullanmıyorsa Android varsayılan davranışı sağlar: Uygulamanız bir cihazda ön plandayken ve Android Beam, Android destekli başka bir cihazla çağrıldığında diğer cihaz, uygulamanızı tanımlayan Android uygulama kaydı içeren bir NDEF mesajı alır. Alıcı cihazda uygulama yüklüyse sistem uygulamayı başlatır. Yüklü değilse Google Play açılır ve yüklemesi için kullanıcıyı uygulamanıza yönlendirir.
NFC ile İlgili Temel Bilgiler geliştirici kılavuzunda Android Beam ve diğer NFC özellikleri hakkında daha fazla bilgi edinebilirsiniz. Android Beam kullanan bazı örnek kodlar için Android Beam Demosu'na bakın.
Kablosuz P2P
Android artık hotspot veya internet bağlantısı olmadan Android destekli cihazlar ile diğer cihaz türleri arasındaki kablosuz ağ eşler arası (P2P) bağlantılarını desteklemektedir (Wi-Fi Alliance'ın Wi-Fi DirectTM sertifika programına uygun olarak). Android çerçevesi, her biri Wi-Fi P2P özelliğini desteklediğinde diğer cihazları keşfedip bunlara bağlanmanıza ve ardından Bluetooth bağlantısından çok daha uzun mesafelerde hızlı bir bağlantı üzerinden iletişim kurmanıza olanak tanıyan bir dizi Wi-Fi P2P API sunar.
Yeni android.net.wifi.p2p
paketi, kablosuz ağ ile eşler arası bağlantı kurmaya yönelik tüm API'leri içerir. Birlikte çalışmanız gereken birincil sınıf WifiP2pManager
. Bu sınıfı getSystemService(WIFI_P2P_SERVICE)
numaralı telefonu arayarak edinebilirsiniz. WifiP2pManager
, aşağıdakileri yapmanıza olanak tanıyan API'ler içerir:
initialize()
numaralı telefonu arayarak P2P bağlantılar için uygulamanızı başlatındiscoverPeers()
numaralı telefonu arayarak yakındaki cihazları keşfedinconnect()
numaralı telefonu arayarak P2P bağlantısı başlatın- Daha birçok avantaj
Diğer arayüzler ve sınıflar da gereklidir, örneğin:
WifiP2pManager.ActionListener
arayüzü, eşleri keşfetme veya bunlara bağlanma gibi işlemler başarılı ya da başarısız olduğunda geri çağırma yapmanızı sağlar.WifiP2pManager.PeerListListener
arayüzü, keşfedilen benzerler hakkında bilgi almanıza olanak tanır. Geri çağırma işlevi birWifiP2pDeviceList
sağlar. Buradan aralık içindeki her cihaz için birWifiP2pDevice
nesnesi alabilir ve cihaz adı, adres, cihaz türü, cihazın desteklediği WPS yapılandırmaları gibi bilgilere ulaşabilirsiniz.WifiP2pManager.GroupInfoListener
arayüzü, P2P grubu hakkında bilgi almanızı sağlar. Geri çağırma işlevi; sahip, ağ adı ve parola gibi grup bilgilerini sağlayan birWifiP2pGroup
nesnesi sağlar.WifiP2pManager.ConnectionInfoListener
arayüzü, mevcut bağlantı hakkında bilgi almanızı sağlar. Geri çağırma, grubun oluşturulup oluşturulmadığı ve grup sahibinin kim olduğu gibi bilgileri içeren birWifiP2pInfo
nesnesi sağlar.
Kablosuz 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ı olan Wi-Fi P2P benzerleriyle iletişim kurmak için internet izni gerekir).
Android sistemi, belirli Kablosuz P2P etkinlikleri sırasında birkaç farklı işlem de yayınlar:
WIFI_P2P_CONNECTION_CHANGED_ACTION
: P2P bağlantı durumu değişti. Bu,EXTRA_WIFI_P2P_INFO
öğesiniWifiP2pInfo
nesnesiyle veEXTRA_NETWORK_INFO
öğesiniNetworkInfo
nesnesiyle 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şırWIFI_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. Ayrıca Wi-Fi P2P Demo örnek uygulamasına da bakın.
Bluetooth Sağlık Cihazları
Android artık Bluetooth Sağlık Profili cihazlarını desteklemektedir. Böylece nabız monitörleri, kan ölçüm cihazları, termometreler ve tartılar gibi Bluetooth'u destekleyen sağlık cihazlarıyla iletişim kurmak için Bluetooth'u kullanan uygulamalar oluşturabilirsiniz.
Normal mikrofonlu kulaklık ve A2DP profili cihazlarına benzer şekilde, profil proxy nesnesiyle bağlantı kurmak için getProfileProxy()
alanını BluetoothProfile.ServiceListener
ve HEALTH
profil türüyle çağırmanız gerekir.
Sağlık Profili proxy'sini (BluetoothHealth
nesnesi) edindikten sonra, eşlenen sağlık cihazlarına bağlanmak ve bu cihazlarla iletişim kurmak için aşağıdaki yeni Bluetooth sınıfları kullanılır:
BluetoothHealthCallback
: Uygulamanın kayıt durumundaki ve Bluetooth kanal durumundaki değişikliklerle ilgili güncellemeleri almak için bu sınıfı genişletmeniz ve geri çağırma yöntemlerini uygulamanız gerekir.BluetoothHealthAppConfiguration
:BluetoothHealthCallback
cihazınıza yapılan geri çağırmalar sırasında bu nesnenin bir örneğini alırsınız. Bu örnekte, kullanılabilir Bluetooth sağlık cihazı hakkında yapılandırma bilgileri sağlanır. Bu bilgileri,BluetoothHealth
API'leriyle bağlantı başlatmak ve sonlandırmak gibi çeşitli işlemleri gerçekleştirmek için kullanmanız gerekir.
Bluetooth Sağlık Profili'ni kullanma hakkında daha fazla bilgi için BluetoothHealth
dokümanlarına bakın.
Erişilebilirlik
Android 4.0, yeni "dokunarak keşfet" modu ve içeriği görüntüleme hakkında daha fazla bilgi edinmenize veya gelişmiş erişilebilirlik hizmetleri geliştirmenize olanak tanıyan genişletilmiş API'lerle, görme engelli kullanıcılar için erişilebilirliği iyileştirir.
Dokunarak keşfetme modu
Görme kaybı olan kullanıcılar artık içeriğin sesli açıklamalarını duymak için bir parmaklarına dokunup ekran boyunca sürükleyerek ekranı keşfedebilir. Dokunarak keşfetme modu, sanal bir imleç gibi çalıştığından, kullanıcı d-pad veya iztopu ile gezindiğinde ekran okuyucuların açıklayıcı metni belirlediği gibi, simüle edilmiş bir "fareyle üzerine gelme" etkinliği üzerine android:contentDescription
ve setContentDescription()
tarafından sağlanan bilgileri okuyarak, açıklayıcı metni tanımlamasına olanak tanır. Bu nedenle, özellikle ImageButton
, EditText
, ImageView
ve doğal olarak açıklayıcı metin içermeyebilecek diğer widget'lar için uygulamanızdaki görünümler hakkında açıklayıcı metin sağlamanız gerektiğini hatırlatmak isteriz.
Görüntülemeler için erişilebilirlik
Ekran okuyucular gibi erişilebilirlik hizmetlerinin kullanabileceği bilgileri geliştirmek için özel View
bileşenlerinizde erişilebilirlik etkinlikleri için yeni geri çağırma yöntemleri uygulayabilirsiniz.
Öncelikle, sendAccessibilityEvent()
yönteminin davranışının Android 4.0'da değiştiğini unutmayın. Android'in önceki sürümünde olduğu gibi, kullanıcı cihazda erişilebilirlik hizmetlerini etkinleştirdiğinde ve tıklama veya fareyle üzerine gelme gibi bir giriş etkinliği gerçekleştiğinde ilgili görünüm sendAccessibilityEvent()
çağrısıyla bildirilir. Önceden, sendAccessibilityEvent()
uygulaması ile bir AccessibilityEvent
başlatılır ve AccessibilityManager
adresine gönderilir. Yeni davranış, görünümün ve üst öğelerinin etkinliğe daha fazla bağlamsal bilgi eklemesine olanak tanıyan bazı ek geri çağırma yöntemlerini içeriyor:
- Çağrılduğunda
sendAccessibilityEvent()
vesendAccessibilityEventUnchecked()
yöntemlerionInitializeAccessibilityEvent()
değerine ertelenir.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 uygulama çağrısı da yapmalıdır. Ancak, bu geri çağırmaya ilave metin içeriği eklememeniz gerekir (bu işlem daha sonra gerçekleşir). - Başlatıldıktan sonra etkinlik, metin bilgileriyle doldurulması gereken çeşitli türlerden biriyse görünüm,
onPopulateAccessibilityEvent()
geri çağırmasına karşılıkdispatchPopulateAccessibilityEvent()
çağrısı alır.android:contentDescription
metni eksik veya yetersizseAccessibilityEvent
öğesine ilave 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()
çağrısı yaparak etkinliği görünüm hiyerarşisinden yukarıya aktarır. Daha sonra her üst görünüm, kök görünümüne ulaşana kadar birAccessibilityRecord
ekleyerek erişilebilirlik bilgilerini artırabilir. Böylece etkinlik,sendAccessibilityEvent()
ileAccessibilityManager
öğesine gönderilir.
View
sınıfını genişletirken yararlı olan yukarıdaki yeni yöntemlere ek olarak, AccessibilityDelegate
kapsamını genişletip setAccessibilityDelegate()
ile görünümde ayarlayarak bu etkinlik geri çağırmalarını herhangi bir View
üzerinde devre dışı bırakabilirsiniz.
Bunu yaptığınızda, görünümdeki her erişilebilirlik yöntemi, çağrıyı yetki verilmiş kullanıcıdaki ilgili yönteme erteler. Örneğin, görünüm bir onPopulateAccessibilityEvent()
çağrısı aldığında, bunu View.AccessibilityDelegate
içindeki aynı yönteme iletir. Yetki verilmiş kullanıcı tarafından ele alınmayan yöntemler, varsayılan davranış için doğrudan görünüme geri verilir. Bu, View
sınıfını genişletmeden yalnızca belirli bir görünüm için gerekli yöntemleri geçersiz kılmanıza olanak tanır.
Yeni erişilebilirlik API'lerini desteklemenin yanı sıra 4.0'dan önceki Android sürümleriyle uyumluluğu sürdürmek istiyorsanız v4 destek kitaplığının en son sürümüyle (Uyumluluk Paketi, r4'te) geriye dönük olarak uyumlu bir tasarımda yeni erişilebilirlik API'leri sunan bir dizi yardımcı program sınıfını kullanabilirsiniz.
Erişilebilirlik hizmetleri
Bir erişilebilirlik hizmeti geliştiriyorsanız çeşitli erişilebilirlik etkinlikleriyle ilgili bilgiler, kullanıcılara daha gelişmiş erişilebilirlik geri bildirimi sağlamak amacıyla önemli ölçüde genişletilmiştir. Etkinlikler özellikle görünüm bileşimine göre oluşturulur. Bu sayede daha iyi bağlam bilgileri sağlanır ve erişilebilirlik hizmetlerinin, ek görünüm bilgileri almak ve özel durumlar hakkında anlaşma sağlamak için görünüm hiyerarşilerini geçmesine olanak tanır.
Bir erişilebilirlik hizmeti (ekran okuyucu gibi) geliştiriyorsanız aşağıdaki prosedürü uygulayarak ek içerik bilgilerine erişebilir ve görünüm hiyerarşilerini inceleyebilirsiniz:
- Bir uygulamadan
AccessibilityEvent
aldıktan sonra, belirli birAccessibilityRecord
almak içinAccessibilityEvent.getRecord()
çağrılarını yapın (etkinliğe eklenen 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ü, o 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 önceki öğesini tanımlar. AccessibilityNodeInfo
ile bu alanla ilgili bilgileri sorgulayabilir, görünüm hiyerarşisinde bilgi edinmek içingetParent()
veyagetChild()
yöntemini çağırabilir, hatta düğüme alt görünümler ekleyebilirsiniz.
Uygulamanızın kendisini sistemde bir erişilebilirlik hizmeti olarak yayınlaması için AccessibilityServiceInfo
değerine karşılık gelen bir XML yapılandırma dosyası beyan etmesi gerekir. Erişilebilirlik hizmeti oluşturma hakkında daha fazla bilgi edinmek için XML yapılandırmasıyla ilgili bilgiler için AccessibilityService
ve SERVICE_META_DATA
bölümlerine bakın.
Diğer erişilebilirlik API'leri
Cihazın erişilebilirlik durumuyla ilgileniyorsanız AccessibilityManager
aşağıdaki gibi bazı yeni API'ler sunar:
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şfetme modunun etkin olup olmadığını bildirir.
Yazım Denetleyici Hizmetleri
Yeni bir yazım denetleyici çerçevesi, uygulamaların giriş yöntemi çerçevesine (IME'ler için) benzer bir şekilde yazım denetleyicileri oluşturmasına olanak tanır. Yeni bir yazım denetleyici oluşturmak için arayüzün geri çağırma yöntemleri tarafından sağlanan metinlere dayalı yazım önerilerinde bulunmak amacıyla SpellCheckerService
ve SpellCheckerService.Session
sınıfını genişleten bir hizmet uygulamanız gerekir. SpellCheckerService.Session
geri çağırma yöntemlerinde yazım önerilerini SuggestionsInfo
nesneleri olarak döndürmeniz gerekir.
Yazım denetleyici hizmeti olan uygulamalar, BIND_TEXT_SERVICE
iznini hizmet için gerekli olduğu gibi beyan etmelidir.
Hizmet ayrıca amacın işlemi olarak <action
android:name="android.service.textservice.SpellCheckerService" />
ile bir intent filtresi beyan etmeli ve yazım denetleyici için yapılandırma bilgilerini açıklayan bir <meta-data>
öğesi içermelidir.
Örnek kod için örnek Yazım Denetleyici Hizmeti uygulamasına ve örnek Yazım Denetleyici İstemcisi uygulamasına göz atın.
Metin Okuma Motorları
Android'in metin okuma (TTS) API'leri, uygulamaların özel TTS motorlarını daha kolay uygulayabilmesi için önemli ölçüde genişletilmiştir. TTS motoru kullanmak isteyen uygulamalar ise motor seçimi için yeni birkaç API'ye sahiptir.
Metin okuma motorlarını kullanma
Android'in önceki sürümlerinde, sistem tarafından sağlanan TTS motorunu kullanarak metin okuma (TTS) işlemleri gerçekleştirmek veya setEngineByPackageName()
ile özel bir motor ayarlamak için TextToSpeech
sınıfını kullanabiliyordunuz. Android 4.0'da setEngineByPackageName()
yöntemi kullanımdan kaldırılmıştır ve artık TTS motorunun paket adını kabul eden yeni bir TextToSpeech
oluşturucuyla kullanılacak motoru belirtebilirsiniz.
Mevcut TTS motorlarını getEngines()
ile de sorgulayabilirsiniz. Bu yöntem; motorun simgesi, etiketi ve paket adı gibi meta verileri içeren TextToSpeech.EngineInfo
nesnelerinin bir listesini döndürür.
Metin okuma motorları oluşturma
Önceden özel motorlar, motorun belgelenmemiş yerel başlık dosyası kullanılarak derlenmesini gerektiriyordu. Android 4.0'da, TTS motorları oluşturmaya yönelik eksiksiz bir çerçeve API'leri grubu vardır.
Temel kurulumda, INTENT_ACTION_TTS_SERVICE
amacına uygun TextToSpeechService
uygulaması gerekir. TTS motorunun birincil çalışması, TextToSpeechService
aralığını genişleten bir hizmette onSynthesizeText()
geri çağırması sırasında gerçekleşir. Sistem bu yöntemle iki
nesne teslim eder:
SynthesisRequest
: Bu, sentezlenecek metin, yerel ayar, konuşma hızı ve ses perdesi gibi çeşitli verileri içerir.SynthesisCallback
: Bu, TTS motorunuzun elde edilen konuşma verilerini akışlı ses olarak ilettiği arayüzdür. Motor, öncelikle motorun sesi iletmeye hazır olduğunu belirtmek içinstart()
yöntemini, ardındanaudioAvailable()
yöntemini çağırarak ses verilerini bir bayt arabelleğine iletmelidir. Motorunuz tüm sesi arabelleğe geçirdikten sonradone()
çağrısı yapın.
Artık bu çerçeve, TTS motorları oluşturmak için gerçek bir API'yi desteklediğinden yerel kod uygulama desteği kaldırılmıştır. Eski TTS motorlarınızı yeni çerçeveye dönüştürmek için kullanabileceğiniz bir uyumluluk katmanıyla ilgili blog yayınını arayın.
Yeni API'leri kullanan örnek bir TTS motoru için Text To Speech Engine örnek uygulamasına bakın.
Ağ Kullanımı
Android 4.0, kullanıcılara uygulamalarının ne kadar ağ verisi kullandığını net bir şekilde görme imkanı tanır. Ayarlar uygulaması, kullanıcıların ağ veri kullanımı için belirlenen sınırları yönetmelerine ve hatta tek tek uygulamalar için arka plan veri kullanımını devre dışı bırakmalarına olanak tanıyan denetimler sunar. Kullanıcıların, uygulamanızın arka planda verilere erişimini devre dışı bırakmasını önlemek için veri bağlantısını verimli bir şekilde kullanma konusunda stratejiler geliştirmeniz ve mevcut bağlantı türüne göre kullanımınızı ayarlamanız gerekir.
Uygulamanız çok sayıda ağ işlemi gerçekleştiriyorsa, kullanıcıların uygulamanızın veri alışkanlıklarını kontrol etmesini sağlayan kullanıcı ayarları sağlamanız gerekir. Bu ayarlar, uygulamanızın veri senkronizasyonu, yükleme/indirme işlemlerini yalnızca kablosuz ağa bağlıyken gerçekleştirip gerçekleştirmeme ve dolaşımdayken veri kullanma gibi seçenekleri içerir. Bu kontroller sayesinde kullanıcıların, kendi sınırlarına yaklaştığında uygulamanızın veri erişimini devre dışı bırakma olasılığı çok daha düşüktür.
Bu ayarlarla bir tercih etkinliği sağlarsanız manifest beyanına ACTION_MANAGE_NETWORK_USAGE
işlemi için bir amaç filtresi eklemeniz gerekir. Örneğin:
<activity android:name="DataPreferences" android:label="@string/title_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Bu intent filtresi, sisteme bu etkinliğin uygulamanızın veri kullanımını kontrol eden etkinlik olduğunu belirtir. Bu sayede kullanıcı, uygulamanızın ne kadar veri kullandığını Ayarlar uygulamasından kontrol ettiğinde, tercih etkinliğinizi başlatan bir "Uygulama ayarlarını görüntüle" düğmesi sunulur. Böylece kullanıcı, uygulamanızın kullandığı veri miktarını hassaslaştırabilir.
Ayrıca, getBackgroundDataSetting()
öğesinin artık kullanılmadığını ve her zaman doğru değerini döndürdüğünü unutmayın. Bunun yerine getActiveNetworkInfo()
politikasını kullanın. Herhangi bir ağ işlemini denemeden önce, geçerli ağı temsil eden NetworkInfo
öğesini almak ve cihazın bağlı olup olmadığını kontrol etmek için isConnected()
sorgusunu her zaman getActiveNetworkInfo()
çağırmanız gerekir. Daha sonra cihazın dolaşımda veya kablosuz ağa bağlı olup olmadığı gibi diğer bağlantı özelliklerini kontrol edebilirsiniz.
Kurumsal
Android 4.0, kurumsal uygulamanın özelliklerini aşağıdaki özelliklerle genişletmektedir.
VPN hizmetleri
Yeni VpnService
, uygulamaların Service
olarak çalışan kendi VPN'lerini (Sanal Özel Ağ) oluşturmasına olanak tanır. VPN hizmeti, sanal bir ağ için kendi adresi ve yönlendirme kuralları olan bir arayüz oluşturur ve tüm okuma ve yazma işlemlerini bir dosya açıklayıcıyla gerçekleştirir.
VPN hizmeti oluşturmak için ağ adresini, DNS sunucusunu, ağ rotasını ve daha fazlasını belirtmenize olanak tanıyan VpnService.Builder
hizmetini kullanın. İşlem tamamlandığında, ParcelFileDescriptor
döndüren establish()
çağrısıyla arayüzü oluşturabilirsiniz.
VPN hizmeti paketlere müdahale edebildiği için güvenlik etkileri olabilir. Bu nedenle VpnService
politikasını uygularsanız hizmetinizin, yalnızca sistemin bağlanmasını sağlamak için BIND_VPN_SERVICE
öğesini gerektirmesi gerekir (bu izni yalnızca sisteme verilir; uygulamalar bu izni isteyemez). Daha sonra VPN hizmetinizi kullanmak isteyen kullanıcıların sistem ayarlarında hizmeti manuel olarak etkinleştirmesi gerekir.
Cihaz politikaları
Cihaz kısıtlamalarını yöneten uygulamalar artık setCameraDisabled()
ve USES_POLICY_DISABLE_CAMERA
özelliğini (politika yapılandırma dosyasında bir <disable-camera />
öğesiyle uygulanır) kullanarak kamerayı devre dışı bırakabilir.
Sertifika yönetimi
Yeni KeyChain
sınıfı, sistem anahtarı deposundaki sertifikaları içe aktarmanıza ve bunlara erişmenize olanak tanıyan API'ler sağlar. Sertifikalar hem istemci sertifikalarının (kullanıcının kimliğini doğrulamak için) hem de sertifika yetkilisi sertifikalarının (sunucu kimliğini doğrulamak için) yüklenmesini kolaylaştırır. Web tarayıcıları veya e-posta istemcileri gibi uygulamalar, sunucularda kullanıcıların kimliğini doğrulamak için yüklü sertifikalara erişebilir. Daha fazla bilgi için KeyChain
dokümanlarını inceleyin.
Cihaz Sensörleri
Android 4.0'a iki yeni sensör türü eklendi:
TYPE_AMBIENT_TEMPERATURE
: Ortam (oda) sıcaklığını santigrat derece 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 çiy noktasını ve mutlak nemi hesaplamak için bunları kullanabilirsiniz.
Önceki sıcaklık sensörü (TYPE_TEMPERATURE
) kullanımdan kaldırıldı. Bunun yerine TYPE_AMBIENT_TEMPERATURE
sensörünü kullanmanız gerekir.
Buna ek olarak, Android'in üç sentetik sensörü önemli ölçüde iyileştirilmiştir. Böylece artık daha düşük gecikme ve daha akıcı çıkış olanağı sunulmaktadır. Bu sensörler arasında yer çekimi sensörü (TYPE_GRAVITY
), döndürme vektör sensörü (TYPE_ROTATION_VECTOR
) ve doğrusal ivme sensörü (TYPE_LINEAR_ACCELERATION
) bulunur. İyileştirilmiş sensörler, çıkışını iyileştirmek için jiroskop sensörüne ihtiyaç duyar. Bu nedenle sensörler yalnızca jiroskop bulunan cihazlarda görünür.
İşlem Çubuğu
ActionBar
bazı yeni davranışları destekleyecek şekilde güncellendi. En önemlisi, sistem tüm ekran boyutlarında optimum kullanıcı deneyimi sağlamak için daha küçük ekranlarda çalışırken işlem çubuğunun boyutunu ve yapılandırmasını sorunsuz bir şekilde yönetir. Örneğin, ekran dar olduğunda (örneğin, cihaz dikey yönde olduğunda), işlem çubuğunun gezinme sekmeleri, ana işlem çubuğunun hemen altında görünen bir "yığın çubuk" içinde görünür. Ayrıca, tüm işlem öğelerini ekran dar olduğunda ekranın alt kısmındaki ayrı bir çubuğa yerleştiren "bölünmüş işlem çubuğunu" da etkinleştirebilirsiniz.
Bölme işlem çubuğu
İşlem çubuğunuz birkaç işlem öğesi içeriyorsa bunların tümü dar bir ekrandaki işlem çubuğuna sığmaz. Bu nedenle sistem, bu öğelerin daha fazlasını taşma menüsüne yerleştirir. Ancak Android 4.0, ekranın alt kısmındaki ayrı bir çubukta, ekranda daha fazla işlem öğesinin görünmesi için "bölünmüş işlem çubuğunu" etkinleştirmenize olanak tanır. Bölünme işlem çubuğunu etkinleştirmek için manifest dosyanızdaki <application>
etiketinize veya tek tek <activity>
etiketlerinden birine "splitActionBarWhenNarrow"
içeren android:uiOptions
ekleyin. Bu seçenek etkinleştirildiğinde, ekran dar olduğunda sistem tüm işlem öğeleri için ekranın alt kısmına bir çubuk ekler (birincil işlem çubuğunda işlem öğesi görünmez).
ActionBar.Tab
API'leri tarafından sağlanan gezinme sekmelerini kullanmak istiyor ancak en üstteki ana işlem çubuğuna ihtiyacınız yoksa (yalnızca sekmelerin üstte görünmesini istiyorsanız) bölme işlemi çubuğunu yukarıda açıklandığı gibi etkinleştirin ve işlem çubuğundaki uygulama simgesini devre dışı bırakmak için setDisplayShowHomeEnabled(false)
yöntemini çağırın. Ana işlem çubuğunda hiçbir şey kalmadığında bu çubuk kaybolur. Geriye yalnızca ekranın üst kısmındaki gezinme sekmeleri ve ekranın alt kısmındaki işlem öğeleri eklenir.
İşlem çubuğu stilleri
İşlem çubuğuna özel stil uygulamak isterseniz yığın çubuğa ve bölünmüş çubuğa arka plan çizimi veya renk uygulamak için yeni backgroundStacked
ve backgroundSplit
stil özelliklerini kullanabilirsiniz. Bu stilleri setStackedBackgroundDrawable()
ve setSplitBackgroundDrawable()
ile çalışma zamanında da ayarlayabilirsiniz.
İşlem sağlayıcı
Yeni ActionProvider
sınıfı, işlem öğeleri için özel bir işleyici oluşturmanıza olanak tanır. İşlem sağlayıcı, bir işlem görünümü, varsayılan işlem davranışı ve ilişkilendirildiği her işlem öğesi için bir alt menü tanımlayabilir. Dinamik davranışları olan bir işlem öğesi (değişken işlem görünümü, varsayılan işlem veya alt menü gibi) oluşturmak istediğinizde, parçanızdaki veya etkinliğinizdeki çeşitli işlem öğesi dönüşümlerini işlemek yerine ActionProvider
öğesini genişletmek, yeniden kullanılabilir bir bileşen oluşturmak için iyi bir çözüm olur.
Örneğin ShareActionProvider
, ActionProvider
uzantısının işlem çubuğundan bir "paylaş" işlemini kolaylaştıran bir uzantısıdır. ACTION_SEND
amacını çağıran geleneksel işlem öğesi kullanmak yerine, ACTION_SEND
amacını işleyen uygulamaların açılır listesini içeren bir işlem görünümü sunmak için bu işlem sağlayıcısını kullanabilirsiniz. Kullanıcı, işlem için kullanmak üzere bir uygulama seçtiğinde, ShareActionProvider
bu seçimi hatırlar ve bu uygulamayla paylaşıma daha hızlı erişim için işlemi işlem görünümünde sunar.
Bir işlem öğesi için işlem sağlayıcı bildirmek istiyorsanız etkinliğinizin seçenekler menüsünün <item>
öğesine android:actionProviderClass
özelliğini ve değer olarak işlem sağlayıcının sınıf adını ekleyin. Örneğin:
<item android:id="@+id/menu_share" android:title="Share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" />
Etkinliğinizin onCreateOptionsMenu()
geri çağırma yönteminde menü öğesinden işlem sağlayıcının bir örneğini alın ve amacı ayarlayın:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options, menu) val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider // Set the share intent of the share action provider. shareActionProvider?.setShareIntent(createShareIntent()) ... return super.onCreateOptionsMenu(menu) }
Java
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // Set the share intent of the share action provider. shareActionProvider.setShareIntent(createShareIntent()); ... return super.onCreateOptionsMenu(menu); }
ShareActionProvider
öğesinin kullanımıyla ilgili bir örnek için ApiDemos'taki ActionBarShareActionProviderActivity öğesine bakın.
Daraltılabilir işlem görünümleri
İşlem görünümü sağlayan işlem öğeleri, artık işlem görünümü durumu ile geleneksel işlem öğesi durumları arasında geçiş yapabilir. Önceden yalnızca SearchView
, işlem görünümü olarak kullanıldığında daraltmayı destekliyordu, ancak artık herhangi bir işlem öğesi için işlem görünümü ekleyebilir ve genişletilmiş durum (işlem görünümü görünür) ile daraltılmış durum (işlem öğesi görünür) arasında geçiş yapabilirsiniz.
İşlem görünümü içeren bir işlem öğesinin daraltılabilir olduğunu belirtmek için menünün XML dosyasındaki <item>
öğesi için android:showAsAction
özelliğine “collapseActionView"
işaretini ekleyin.
Bir işlem görünümü genişletilmiş ve daraltılmış arasında geçiş yaptığında geri çağırma almak için setOnActionExpandListener()
yöntemini çağırarak ilgili MenuItem
ile bir MenuItem.OnActionExpandListener
örneğini kaydedin. Bu işlemi genellikle onCreateOptionsMenu()
geri arama sırasında yapmanız gerekir.
Daraltılabilir işlem görünümünü kontrol etmek için ilgili MenuItem
üzerinde collapseActionView()
ve expandActionView()
çağırabilirsiniz.
Özel işlem görünümü oluştururken görünüm genişletildiğinde ve daraltıldığında geri çağırma almak için yeni CollapsibleActionView
arayüzünü de uygulayabilirsiniz.
İşlem çubuğu için diğer API'ler
setHomeButtonEnabled()
, simgenin/logonun ana ekrana gitmek için mi yoksa "yukarı" gitmek için bir düğme olarak mı davranacağını (düğme gibi davranması için "true" değerini) belirtmenize olanak tanır.setIcon()
vesetLogo()
, çalışma zamanında işlem çubuğu simgesini veya logosunu tanımlamanıza olanak tanır.Fragment.setMenuVisibility()
, parça tarafından tanımlanan seçenekler menüsü öğelerinin görünürlüğünü etkinleştirmenize veya devre dışı bırakmanıza olanak tanır. Bu, parça etkinliğe eklenmişse ancak görünmüyorsa menü öğelerinin gizlenmesi gerekiyorsa yararlı olur.FragmentManager.invalidateOptionsMenu()
, parça yaşam döngüsünün çeşitli durumları sırasında etkinlik seçenekleri menüsünü geçersiz kılmanıza olanak tanır. Bu durumlardaActivity
eşdeğer yöntemi kullanılamaz.
Kullanıcı Arayüzü ve Görünümler
Android 4.0, çeşitli yeni görünümleri ve diğer kullanıcı arayüzü bileşenlerini kullanıma sunuyor.
Izgara Düzeni
GridLayout
, alt öğeleri dikdörtgen bir tabloya yerleştiren yeni bir görüntüleme grubudur. TableLayout
'den farklı olarak GridLayout
, düz bir hiyerarşiye dayanır ve yapı sağlamak için tablo satırları gibi ara görünümlerden yararlanmaz.
Bunun yerine, alt birimleri hangi satır ve sütunları doldurmaları gerektiğini belirtir (hücreler birden çok satır ve/veya sütun kaplayabilir) ve varsayılan olarak, tablodaki satırlara ve sütunlara sıralı olarak yerleştirilir.
GridLayout
yönü, sıralı alt öğelerin varsayılan olarak yatay mı yoksa dikey olarak mı düzenleneceğini belirler. Alt öğeler arasındaki boşluk, yeni Space
görünümü örnekleri kullanılarak veya alt öğelerde ilgili marj parametreleri ayarlanarak belirtilebilir.
GridLayout
kullanan örnekler için ApiDemos'a bakın.
Doku Görünümü
TextureView
, video veya OpenGL sahnesi gibi bir içerik akışını görüntülemenize olanak tanıyan yeni bir görünümdür. SurfaceView
ile benzer olsa da, TextureView
ayrı bir pencere oluşturmak yerine normal bir görünüm gibi davranması açısından benzersizdir. Bu nedenle onu diğer View
nesneleri gibi düşünebilirsiniz. Örneğin, dönüşümler uygulayabilir, ViewPropertyAnimator
kullanarak animasyon yapabilir veya opaklığını setAlpha()
ile ayarlayabilirsiniz.
TextureView
politikasının yalnızca donanım hızlandırmalı penceresinde çalıştığını unutmayın.
Daha fazla bilgi için TextureView
dokümanlarına bakın.
Widget'ı değiştir
Yeni Switch
widget'ı, kullanıcıların bir seçeneği iki durum arasında değiştirmek için bir tarafa veya diğerine sürükleyebilir (ya da sadece dokunarak) iki durumlu bir açma/kapatma düğmesidir.
Açık ve kapalı ayarındayken anahtarda görünecek metni belirtmek için android:textOn
ve android:textOff
özelliklerini kullanabilirsiniz. android:text
özelliği, anahtarın yanına bir etiket yerleştirmenize de olanak tanır.
Anahtarların kullanıldığı bir örnek için switches.xml düzen dosyasına ve ilgili Switches etkinliğine bakın.
Pop-up menüler
Android 3.0, belirttiğiniz bir sabitleme noktasında (genellikle seçilen öğenin noktasında) açılan kısa içerik menüleri oluşturmak için PopupMenu
uygulamasını kullanıma sundu. Android 4.0, PopupMenu
oyununu birkaç faydalı özellikle genişletiyor:
- Artık XML menü kaynağındaki bir pop-up menünün içeriğini
inflate()
ile kolayca şişirerek menü kaynağı kimliğini iletebilirsiniz. - Artık menü kapatıldığında geri arama alan bir
PopupMenu.OnDismissListener
oluşturabilirsiniz.
Tercihler
Yeni bir TwoStatePreference
soyut sınıfı, iki durumlu seçim seçeneği sunan tercihlerin temelini oluşturur. Yeni SwitchPreference
, TwoStatePreference
eklentisinin, tercih görünümünde kullanıcıların ek bir tercih ekranı veya iletişim kutusu açmaya gerek kalmadan ayarı açıp kapatmalarına olanak tanıyan bir Switch
widget'ı sağlayan bir uzantısıdır. Örneğin, Ayarlar uygulaması kablosuz ve Bluetooth ayarları için bir SwitchPreference
kullanır.
Sistem temaları
Android 4.0'ı hedefleyen tüm uygulamalar için varsayılan tema (targetSdkVersion
veya
minSdkVersion
“14"
veya sonraki bir sürüme ayarlandığında) artık
"cihaz varsayılanı" temasıdır: Theme.DeviceDefault
. Bu, koyu Holo teması veya cihaz tarafından tanımlanan farklı bir koyu tema olabilir.
Aynı Android sürümünü çalıştırırken Theme.Holo
tema ailesinin cihazlar arasında değişmeyecekleri garanti edilir. Etkinliklerinize Theme.Holo
temalarından herhangi birini açıkça uygularsanız bu temaların aynı platform sürümündeki farklı cihazlarda karakterleri değiştirmeyeceğinden emin olabilirsiniz.
Uygulamanızın genel cihaz temasıyla uyumlu olmasını istiyorsanız (örneğin, farklı OEM'ler sistem için farklı varsayılan temalar sağladığında) Theme.DeviceDefault
ailesinden temaları açıkça uygulamanız gerekir.
Seçenekler menüsü düğmesi
Android 4.0 sürümünden başlayarak, telefonlarda artık bir Menü donanımı düğmesi olmadığını fark edeceksiniz. Ancak, mevcut uygulamanız bir seçenekler menüsü sunuyorsa ve bir Menü düğmesi olmasını bekliyorsa bu konuda endişelenmenize gerek yoktur. Sistem, mevcut uygulamaların beklendiği gibi çalışmaya devam etmesini sağlamak amacıyla Android'in eski sürümleri için tasarlanmış uygulamalara yönelik bir ekranda Menü düğmesi sağlar.
En iyi kullanıcı deneyimi için, yeni ve güncellenmiş uygulamalarda menü öğelerine erişim sağlamak amacıyla ActionBar
kullanılmalı ve en son çerçeve varsayılan davranışlarından yararlanmak için targetSdkVersion
değeri "14"
olarak ayarlanmalıdır.
Sistem kullanıcı arayüzü görünürlüğü kontrolleri
Android'in kullanıma sunulduğu ilk günlerden beri sistem, durum çubuğu olarak bilinen ve operatör sinyali, saat, bildirimler gibi bilgileri sunmak için cihazın üst kısmında bulunan bir kullanıcı arayüzü bileşenini yönetmektedir. Android 3.0, tablet cihazlar için sistem çubuğunu ekledi. Bu çubuk, sistem gezinme denetimleri (Ana Sayfa, Geri vb.) sağlamak için ekranın en altında yer alır. Ayrıca, geleneksel olarak durum çubuğu tarafından sağlanan öğeler için bir arayüz sunar. Android 4.0'da sistem, gezinme çubuğu olarak adlandırılan yeni bir sistem kullanıcı arayüzü türü sağlar. Gezinme çubuğunu, sistem çubuğunun mobil cihazlar için tasarlanmış, yeniden ayarlanmış bir versiyonu olarak düşünebilirsiniz. Bu çubuk, sistemde gezinmek için gereken donanıma sahip olmayan cihazlar için gezinme denetimleri sağlar, ancak sistem çubuğunun bildirim kullanıcı arayüzünü ve ayar kontrollerini içermez. Benzer şekilde, gezinme çubuğunu sağlayan cihazın üst kısmında da durum çubuğu bulunur.
Şu ana kadar telefonlarda FLAG_FULLSCREEN
işaretini kullanarak durum çubuğunu gizleyebilirsiniz. Android 4.0'da, sistem çubuğunun görünürlüğünü kontrol eden API'ler, hem sistem çubuğunun hem de gezinme çubuğunun davranışını daha iyi yansıtacak şekilde güncellendi:
SYSTEM_UI_FLAG_LOW_PROFILE
işareti,STATUS_BAR_HIDDEN
işaretinin yerini alır. Ayarlandığında bu işaret, sistem çubuğu veya gezinme çubuğu için "düşük profil" modunu etkinleştirir. Ayrıca, gezinme düğmeleri karartılır ve sistem çubuğundaki diğer öğeler gizlenir. Bu özelliğin etkinleştirilmesi, sistem gezinme düğmeleriyle dikkatinizi dağıtmadan daha sürükleyici oyunlar oluşturmak için yararlıdır.SYSTEM_UI_FLAG_VISIBLE
işareti,STATUS_BAR_VISIBLE
işaretinin yerini alarak sistem çubuğunun veya gezinme çubuğunun görünür olmasını sağlar.SYSTEM_UI_FLAG_HIDE_NAVIGATION
, gezinme çubuğunun tamamen gizlenmesini isteyen yeni bir işarettir. Bu özelliğin yalnızca bazı telefonlarda kullanılan gezinme çubuğu ile kullanılabileceğini unutmayın (tabletlerde sistem çubuğunu gizlemez). Sistem kullanıcı girişi alır almaz gezinme çubuğu görünüme geri döner. Bu nedenle bu mod, özellikle video oynatma veya tüm ekranın gerektiği ancak kullanıcı girişinin gerekli olmadığı diğer durumlarda yararlıdır.
Etkinliğinizdeki herhangi bir görünümde setSystemUiVisibility()
yöntemini çağırarak sistem çubuğu ve gezinme çubuğu için bu işaretlerin her birini ayarlayabilirsiniz. Pencere yöneticisi, pencerenizdeki tüm görünümlerden gelen tüm işaretleri birleştirir (VEYA ile birlikte) ve pencerenizde giriş odağı olduğu sürece bunları sistem kullanıcı arayüzüne uygular. Pencerenizde giriş odağı kaybolduğunda (kullanıcı uygulamanızdan uzaklaşır veya bir iletişim kutusu görünürse) işaretlemelerinizin etkisi kalmaz.
Benzer şekilde, görünüm hiyerarşisinden bu görünümleri kaldırırsanız işaretleri de artık geçerli olmaz.
Etkinliğinizdeki diğer etkinlikleri, sistem kullanıcı arayüzündeki görünürlük değişiklikleriyle senkronize etmek için (örneğin, sistem kullanıcı arayüzü gizlendiğinde işlem çubuğunu veya diğer kullanıcı arayüzü kontrollerini gizleme) sistem çubuğunun veya gezinme çubuğunun görünürlüğü değiştiğinde bildirim almak için bir View.OnSystemUiVisibilityChangeListener
kaydettirmeniz gerekir.
Farklı sistem kullanıcı arayüzü seçeneklerinin gösterimi için OverscanActivity sınıfına bakın.
Giriş Çerçevesi
Android 4.0'da fareyle üzerine gelme etkinlikleri ve yeni ekran kalemi ile fare düğmesi etkinlikleri desteklenir.
Fareyle üzerine gelme etkinlikleri
View
sınıfı, artık işaretçi cihazları (ör. fare veya ekranda imleç gönderen başka cihazlar) kullanarak daha zengin etkileşimler sağlamak için "hover" etkinliklerini desteklemektedir.
Bir görünümde fareyle üzerine gelme etkinliklerini almak için View.OnHoverListener
özelliğini uygulayın ve setOnHoverListener()
ile kaydedin. Görünümde bir fareyle üzerine gelme etkinliği gerçekleştiğinde, işleyiciniz onHover()
çağrısı alır. Bu çağrı, etkinliği alan View
ve gerçekleşen fareyle üzerine gelme etkinliğinin türünü açıklayan bir MotionEvent
sağlar. Fareyle üzerine gelme etkinliği aşağıdakilerden biri olabilir:
View.OnHoverListener
, fareyle üzerine gelme etkinliğini gerçekleştiriyorsa onHover()
öğesinden true (doğru) değerini döndürecektir. İşleyiciniz false değerini döndürürse fareyle üzerine gelme etkinliği her zamanki gibi üst görünüme gönderilir.
Uygulamanız, görünümünü mevcut duruma göre değiştiren düğmeler veya başka widget'lar kullanıyorsa artık imleç görünümün üzerine geldiğinde farklı bir arka plan çekilebilirliği sağlamak için durum listesi çekilebilir özelliğinde android:state_hovered
özelliğini kullanabilirsiniz.
Yeni fareyle üzerine gelme etkinliklerinin gösterimi için ApiDemos'taki Hover sınıfına bakın.
Ekran kalemi ve fare düğmesi etkinlikleri
Android artık dijitalleştirici tablet çevre birimi veya ekran kalemi özellikli dokunmatik ekran gibi bir ekran kalemi giriş cihazından giriş almak için API'ler sağlamaktadır.
Ekran kalemi girişi, dokunma veya fare girişine benzer şekilde çalışır. Ekran kalemi, dijitalleştiriciyle temas ettiğinde uygulamalar, dokunma etkinliklerini bir parmakla ekrana dokunduğunda aldıkları gibi alır. Ekran kalemi, dijitalleştiricinin üzerinde durduğunda uygulamalar, herhangi bir düğmeye basılmadığında bir fare işaretçisi ekranda hareket ettirildiğinde olduğu gibi fareyle üzerine gelme etkinliklerini alır.
Uygulamanız, getToolType()
kullanarak MotionEvent
içindeki her işaretçiyle ilişkili "araç türünü" sorgulayarak parmak, fare, ekran kalemi ve silgi girişini birbirinden ayırt edebilir. Şu anda tanımlanmış olan araç türleri şunlardır: TOOL_TYPE_UNKNOWN
, TOOL_TYPE_FINGER
,
TOOL_TYPE_MOUSE
, TOOL_TYPE_STYLUS
ve TOOL_TYPE_ERASER
. Uygulamanız, araç türünü sorgulayarak ekran kalemi girişini parmak veya fare girişinden farklı şekillerde işlemeyi seçebilir.
Uygulamanız, getButtonState()
kullanarak MotionEvent
öğesinin "düğme durumunu" sorgulayarak hangi fare veya ekran kalemi düğmelerine basıldığını sorgulayabilir. Şu anda tanımlanmış düğme durumları şunlardır: BUTTON_PRIMARY
, BUTTON_SECONDARY
, BUTTON_TERTIARY
, BUTTON_BACK
ve BUTTON_FORWARD
. Kolaylık sağlaması açısından geri ve ileri fare düğmeleri otomatik olarak KEYCODE_BACK
ve KEYCODE_FORWARD
tuşlarıyla eşlenir. Uygulamanız, geri ve ileri gezinmeye dayalı fare düğmesini desteklemek için bu tuşları kullanabilir.
Bazı ekran kalemi giriş cihazları, bir temasın konumunu ve basıncını hassas bir şekilde ölçmenin yanı sıra ekran kalemi ucu ile dijitalleştirici arasındaki mesafeyi, ekran kaleminin yatırma açısını ve ekran kaleminin yön açısını da bildirir. Uygulamanız bu bilgileri AXIS_DISTANCE
, AXIS_TILT
ve AXIS_ORIENTATION
eksen kodlarıyla getAxisValue()
kullanarak sorgulayabilir.
Araç türleri, düğme durumları ve yeni eksen kodlarının tanıtımı için ApiDemos'taki TouchPaint sınıfına bakın.
Kod
Yeni Property
sınıfı, herhangi bir nesnede özellik belirtmenin hızlı, verimli ve kolay bir yolunu sunar. Bu özellik, arayanların hedef nesneler üzerinde genel olarak değer ayarlamasına/almasına olanak tanır. Ayrıca alan/yöntem referanslarını iletme işlevine olanak tanır ve alanların/yöntemlerin ayrıntılarını bilmeden mülkün değerlerini belirlemesini/almasını sağlar.
Örneğin, foo
nesnesinde bar
alanının değerini ayarlamak istiyorsanız daha önce şunu yaparsınız:
Kotlin
foo.bar = value
Java
foo.bar = value;
Temel özel alan bar
için ayarlayıcıyı çağırmak istiyorsanız önceden şunu yaparsınız:
Kotlin
foo.setBar(value)
Java
foo.setBar(value);
Ancak, foo
örneğini aktarmak ve başka bir kodla bar
değerini ayarlamak istiyorsanız bunu Android 4.0'dan önce yapmanın hiçbir yolu yoktur.
Property
sınıfını kullanarak Foo
sınıfında BAR
bir Property
nesnesi tanımlayabilirsiniz. Böylece, Foo
sınıfının foo
örneğindeki alanı aşağıdaki gibi ayarlayabilirsiniz:
Kotlin
BAR.set(foo, value)
Java
BAR.set(foo, value);
View
sınıfı artık Android 3.0'a eklenen dönüştürme özellikleri (ROTATION
, ROTATION_X
, TRANSLATION_X
vb.) gibi çeşitli alanları ayarlayabilmeniz için Property
sınıfından yararlanmaktadır.
ObjectAnimator
sınıfı da Property
sınıfını kullanır. Böylece, Property
ile bir ObjectAnimator
oluşturabilirsiniz. Bu yöntem, dize tabanlı yaklaşımdan daha hızlı, verimli ve tür açısından daha güvenlidir.
Donanım Hızlandırma
Android 4.0'dan itibaren, uygulamanız targetSdkVersion
veya minSdkVersion
ayarlarından birini “14"
ya da daha yüksek bir sürüme ayarladıysa tüm pencereler için donanım hızlandırma varsayılan olarak etkindir. Donanım hızlandırma genellikle daha düzgün animasyonlar ve daha akıcı kaydırmanın yanı sıra genel olarak daha iyi performans ve kullanıcı etkileşimine yanıt sağlar.
Gerekirse bağımsız <activity>
öğeleri veya <application>
öğesi için hardwareAccelerated
özelliğini kullanarak donanım hızlandırmayı manuel olarak devre dışı bırakabilirsiniz. Alternatif olarak, setLayerType(LAYER_TYPE_SOFTWARE)
yöntemini çağırarak donanım hızlandırmayı tek tek görünümler için devre dışı bırakabilirsiniz.
Desteklenmeyen çizim işlemlerinin listesi dahil olmak üzere donanım hızlandırma hakkında daha fazla bilgi için Donanım Hızlandırma belgesine bakın.
JNI Değişiklikleri
Android'in önceki sürümlerinde JNI yerel referansları dolaylı herkese açık kullanıcı adları değildi; Android doğrudan işaretçiler kullanıyordu. Çöp toplayıcı nesneleri hareket ettirmediği sürece bu bir sorun değildi. Ancak hatalı kod yazmayı mümkün kıldığından işe yaradı. Android 4.0'da sistem artık bu hataları algılamak için dolaylı referanslar kullanıyor.
JNI yerel referanslarının tüm ayrıntıları JNI İpuçları bölümündeki "Yerel ve Global Referanslar" bölümünde açıklanmıştır. Android 4.0'da, CheckJNI bu hataları algılayacak şekilde geliştirilmiştir. JNI referanslarında sık karşılaşılan hatalar ve bunları nasıl düzeltebileceğiniz hakkında bir sonraki yayın için Android Geliştiricileri Blogu'nu izleyin.
JNI uygulamasındaki bu değişiklik yalnızca targetSdkVersion
veya minSdkVersion
özelliğini “14"
ya da daha yüksek bir değere ayarlayarak Android 4.0'ı hedefleyen uygulamaları etkiler. Bu özellikleri daha düşük bir değere ayarlarsanız JNI yerel referansları önceki sürümlerde olduğu gibi davranır.
WebKit
- WebKit 534.30 sürümüne güncellendi
WebView
ve yerleşik Tarayıcıda glifleri birleştirmek için gereken karmaşık karakter desteği de dahil olmak üzere Hintçe yazı tipleri (Devanagari, Bengalce ve Tamilce) desteğiWebView
dilinde ve yerleşik Tarayıcı için Etiyopya dili, Gürcüce ve Ermenice yazı tipleri- WebDriver desteği,
WebView
kullanan uygulamaları test etmenizi kolaylaştırır
Android Tarayıcı
Tarayıcı uygulaması, web uygulamalarını desteklemek için aşağıdaki özellikleri ekler:
- Daha hızlı performans için V8 JavaScript derleyici güncellendi
- Ayrıca Android 3.0'dan gelen diğer önemli geliştirmeler de artık cep telefonları için 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
: Sesli mesaj hizmetinin cihaza sesli mesajlar eklemesine izin verir.BIND_TEXT_SERVICE
:SpellCheckerService
uygulayan bir hizmet, kendisi için bu izni gerektirmelidir.BIND_VPN_SERVICE
:VpnService
uygulayan bir hizmet, kendisi için bu izni gerektirmelidir.- 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şimler için kablosuz bağlantı kullandığını beyan eder.
Android 4.0'daki (API Düzeyi 14) tüm API değişikliklerinin ayrıntılı görünümü için API Farklılıkları Raporu'na bakın.
Önceki API'ler
Yukarıdaki her şeyin yanı sıra Android 4.0 doğal olarak önceki sürümlerdeki tüm API'leri destekler. Android 3.x platformu yalnızca büyük ekranlı cihazlarda kullanılabildiğinden, temel olarak cep telefonları için geliştirme yapıyorsanız bu son sürümlerde Android'e eklenen tüm API'lardan haberdar olmayabilirsiniz.
Şimdi mobil cihazlarda da kullanılabilen ve gözden kaçırmış olabileceğiniz en önemli API'lardan bazılarına bir genel bakış:
- Android 3.0
-
Fragment
: Bir etkinliğin farklı öğelerini, kendi kullanıcı arayüzünü ve yaşam döngüsünü tanımlayan bağımsız modüllere ayırmanızı sağlayan bir çerçeve bileşenidir. Fragments geliştirici kılavuzuna bakın.ActionBar
: Etkinlik penceresinin üst kısmındaki geleneksel başlık çubuğunun yerini alır. Sol köşede uygulama logosu yer alıyor ve menü öğeleri için yeni bir arayüz sağlıyor. İşlem Çubuğu geliştirici kılavuzuna bakın.Loader
: Ana iş parçacığını engellemeden verileri dinamik olarak yüklemek için kullanıcı arayüzü bileşenleriyle birlikte eşzamansız veri yüklemeyi kolaylaştıran çerçeve bileşeni. Yükleyiciler geliştirici kılavuzuna bakın.- Sistem panosu: Uygulamalar, sistem genelindeki panodan (metin dışındaki) verileri kopyalayıp yapıştırabilir. Kırpılmış veriler düz metin, URI veya amaç olabilir. Kopyala ve Yapıştır geliştirici kılavuzuna bakın.
- Sürükle ve bırak: Sürükle ve bırak işlemlerini kolaylaştıran görünüm çerçevesine yerleştirilmiş bir API grubudur. Sürükle ve Bırak geliştirici kılavuzuna bakın.
- Tamamen yeni olan esnek animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çekilebilir, Parça, Nesne veya başka herhangi bir şey) rastgele özelliklerini canlandırmanıza ve süre, interpolasyon ve tekrar gibi animasyon özelliklerini tanımlamanıza olanak tanır. Yeni çerçeve, Android'deki Animasyonları her zamankinden daha basit hale getiriyor. Mülk Animasyonu geliştirici kılavuzuna bakın.
- RenderScript grafikleri ve bilgi işlem motoru: RenderScript, C (C99 standardı) olarak yazdığınız yerel düzeyde yüksek performanslı 3D grafik oluşturma ve işlem API'si sunar. Böylece çeşitli CPU ve GPU'lar arasında taşınabilir kalırken yerel ortamdan beklediğiniz performansı sunar. RenderScript geliştirici kılavuzuna bakın.
- Donanım hızlandırmalı 2D grafik: Artık manifest öğenizin
<application>
öğesinde veya tek tek<activity>
öğeleri için {android:hardwareAccelerated="true"} ayarlayarak uygulamanız için OpenGL oluşturucuyu etkinleştirebilirsiniz. Bu, daha yumuşak animasyonlar, daha düzgün kaydırma ve genel olarak daha iyi performans ile kullanıcı etkileşimine yanıt sağlar.Not: Uygulamanızın
minSdkVersion
veyatargetSdkVersion
değerini"14"
ya da daha yüksek bir değere ayarlarsanız donanım hızlandırma varsayılan olarak etkinleştirilir. - Ve çok daha fazlası. Daha fazla bilgi için Android 3.0 Platformu notlarına bakın.
- Android 3.1
-
- USB API'leri: Bağlı çevre birimlerini Android uygulamalarıyla entegre etmek için yeni ve güçlü API'ler. API'ler hem USB ana makinesi hem de cihaz etkileşimleri desteği dahil olmak üzere platformda yerleşik olarak bulunan bir USB yığınına ve hizmetlere dayanır. USB Ana Makine ve Aksesuarı geliştirici kılavuzuna bakın.
- MTP/PTP API'leri: Uygulamalar, cihazlar takıldığında ve kaldırıldığında bildirim almak, bu cihazlardaki dosyaları ve depolama alanlarını yönetmek ve dosyalar ile meta verileri bu cihazlar arasında aktarmak için doğrudan bağlı kameralar ve diğer PTP cihazlarıyla etkileşim kurabilir. MTP API, MTP (Medya Aktarım Protokolü) spesifikasyonunun PTP (Resim Aktarım Protokolü) alt kümesini uygular.
android.mtp
belgelerini inceleyin. - RTP API'leri: Android, bir API'yi uygulamaların isteğe bağlı veya etkileşimli veri akışını yönetmek için kullanabileceği yerleşik RTP (Gerçek Zamanlı Aktarım Protokolü) yığınına sunar. Özellikle VOIP, push-to-talk, konferans ve ses akışı sağlayan uygulamalar API'yi kullanarak oturumları başlatabilir ve mevcut herhangi bir ağ üzerinden veri akışlarını iletebilir veya alabilir.
android.net.rtp
belgelerini inceleyin. - Kontrol çubukları ve diğer genel hareket girişleri için destek.
- Daha pek çok yeni API için Android 3.1 Platformu notlarına bakın.
- Android 3.2
-
- Yeni ekranlar, uygulamalarınızın farklı ekran boyutlarında nasıl görüntülendiği konusunda size daha fazla kontrol sağlayan API'leri destekler. API, mevcut ekran desteği modelinin kapsamını genişleterek, belirli ekran boyutu aralıklarını genelleştirilmiş ekran boyutları (büyük veya xlarge gibi) yerine yoğunluktan bağımsız piksel birimleriyle (600 dp veya 720 dp genişlik gibi) ölçülen boyutlara göre hassas bir şekilde hedefleme imkanı sağlar. Örneğin bu, geleneksel olarak "büyük" ekranlar olarak gruplanan 5 inçlik cihazlar ile 7 inçlik cihazlar arasındaki farkları belirtmenize yardımcı olması açısından önemlidir. Ekran Boyutlarını Yönetmek için Yeni Araçlar başlıklı blog yayınına bakın.
<uses-feature>
için yatay veya dikey ekran yönü gereksinimlerini belirtmek üzere yeni sabit değerler.- Cihazın "ekran boyutu" yapılandırması artık ekran yönü değiştiğinde
değişmektedir. Uygulamanız API düzeyi 13 veya üstünü hedefliyorsa
"orientation"
yapılandırma değişikliğini de gerçekleştirmek istiyorsanız"screenSize"
yapılandırma değişikliğini sizin gerçekleştirmeniz gerekir. Daha fazla bilgi iç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" olarak adlandırılan bu tanımlayıcı, sistemin, uygulamayı yüklemeden önce sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.
Uygulamanızda Android 4.0'da sunulan API'leri kullanmak için uygulamayı API düzeyi 14 veya üstünü destekleyen bir Android platformuna göre derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, <uses-sdk>
öğesine bir android:minSdkVersion="14"
özelliği de eklemeniz gerekebilir.
Daha fazla bilgi için API Düzeyi nedir?