API Düzeyi: 14
Android 4.0 (ICE_CREAM_SANDWICH
), kullanıcılar ve uygulama geliştiriciler için çeşitli yeni özellikler ekleyen önemli bir platform sürümüdür. Aşağıda ele alınan tüm yeni özelliklerin ve API'lerin yanı sıra Android 4.0,
Android 3.x'ten çok sayıda API ve Holografik tema sunduğu için platform sürümü de yayınlanmıştır.
küçük ekranlara sığdırır. Uygulama geliştirici olarak artık tek bir platforma ve birleştirilmiş API çerçevesine sahipsiniz
uygulamanızı tek bir APK ile geliştirmenizi ve yayınlamanızı sağlayan,
mobil cihazlar, tabletler ve daha fazlası için optimize edilmiş kullanıcı deneyimi sunan,
Android: Android 4.0 (API düzeyi 14) veya sonraki sürümler.
Geliştiriciler, Android 4.0 platformuna Android SDK için indirilebilir bileşen. İndirilebilir platform şunları içerir: Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazla. Android 4.0 için geliştirme veya test yapmaya başlamak istiyorsanız platformu SDK'nıza indirmek için Android SDK Yöneticisi'ni kullanın.
API'ye Genel Bakış
Aşağıdaki bölümlerde, Android 4.0'taki yeni API'lere teknik bir genel bakış sunulmaktadır.
Kişiler Sağlayıcıdaki Sosyal API'lar
ContactsContract
sağlayıcısı tarafından tanımlanan kişi API'leri
cihaz sahibine yönelik kişisel profil gibi yeni sosyal medya odaklı özellikleri destekleyecek şekilde genişletildi.
kullanıcıların, Google Play'de yüklü olan sosyal ağlara tek tek kişileri davet edebilmesi
olanak tanır.
Kullanıcı Profili
Android artık ContactsContract.Profile
tablosunda tanımlandığı şekilde cihaz sahibini temsil eden bir kişisel profil içeriyor. Kullanıcı kimliğini koruyan sosyal uygulamalar
, ContactsContract.Profile
içinde yeni bir ContactsContract.RawContacts
girişi oluşturarak kullanıcının profil verilerine katkıda bulunabilir. Yani cihaz kullanıcısını temsil eden ham kişiler,
ContactsContract.RawContacts
URI'sıyla tanımlanan geleneksel ham kişiler tablosuna ait değildir; Bunun yerine profile ham kişiyi eklemeniz gerekir
CONTENT_RAW_CONTACTS_URI
itibarıyla bir tablo hazırlayacağız. Çiğ
daha sonra bu tablodaki kişiler "Ben" etiketli, kullanıcının görebildiği tek bir profilde toplanır.
Profil için yeni bir ham kişi eklemek için android.Manifest.permission#WRITE_PROFILE iznine sahip olmanız gerekir. Benzer şekilde, profilden okumak için tablosunda android.Manifest.permission#READ_PROFILE iznini istemeniz gerekir. Ancak çoğu uygulamanın, profile veri eklerken bile kullanıcı profilini okuması gerekmez. Kullanıcı profilinin okunması hassas bir izindir ve kullanıcılardan talep eden uygulamalara şüpheyle yaklaşır.
Davet Amacı
INVITE_CONTACT
intent işlemi, uygulamanın kullanıcının bir sosyal ağa kişi eklemek istediğini belirten bir işlem çağırmasına olanak tanır. Uygulama
Uygulama alındığında, belirtilen kişiyi davet etmek için bu uygulama kullanılır.
kullanabilirsiniz. Çoğu uygulama bu işlemin alıcı tarafındadır. Örneğin,
kullanıcı "Bağlantı ekle"yi seçtiğinde yerleşik Kişiler uygulaması davet amacını çağırır belirli bir kampanya için
bir kişinin iletişim bilgilerinde listelenen sosyal uygulama.
Uygulamanızı "Bağlantı ekle"deki gibi görünür hale getirmek için bir senkronizasyon bağdaştırıcısı sağlaması
sosyal ağınızdaki kişi bilgilerini senkronize edebilirsiniz. Ardından, sisteme
INVITE_CONTACT
amacına şu şekilde yanıt verir:
inviteContactActivity
özelliğini, uygulamanızın senkronizasyon yapılandırma dosyasına bir
davet amacını gönderirken sistemin başlaması gereken etkinliğin tam adı.
Ardından, başlatılan etkinlik söz konusu kişinin URI'sını intent'in
ve söz konusu kişiyi ağa davet etmek ya da bu kişiyi ağa eklemek için
daha iyi anlarsınız.
Büyük boyutlu fotoğraflar
Android artık kişiler için yüksek çözünürlüklü fotoğrafları destekliyor. Artık bir fotoğrafı bir kişi kaydına eklediğinizde sistem, fotoğrafı hem 96x96 küçük resim (eskiden olduğu gibi) hem de yeni bir dosya tabanlı fotoğraf deposunda depolanan 256x256 "görüntüleme fotoğrafı" olarak işler (sistemin seçtiği tam boyutlar gelecekte değişebilir). Kişiye büyük bir fotoğraf eklemek için
bir fotoğrafın normal PHOTO
sütunundaki
Bu veri satırı, sistem tarafından uygun küçük resim olarak işlenecek ve görüntülenen fotoğrafa dönüştürülecektir.
kayıtları.
Kişi Kullanımı Geri Bildirimi
Yeni ContactsContract.DataUsageFeedback
API'leri, kullanıcının belirli kişilerle iletişim kurma yöntemlerini ne sıklıkta kullandığını (ör. her bir telefon numarasını veya e-posta adresini ne sıklıkta kullandığı) izlemenize olanak tanır. Bu bilgiler her kişinin sıralamasının iyileştirilmesine yardımcı olur
yöntemini kullanabilir ve her kişiyle iletişim için daha iyi öneriler sağlayabilirsiniz.
Takvim Sağlayıcı
Yeni takvim API'leri; takvimleri, etkinlikleri, katılımcıları, hatırlatıcıları ve uyarıları görebilirsiniz.
Bu API'leri çeşitli uygulamalar ve widget'lar takvim etkinliklerini okumak ve değiştirmek için kullanabilir. Bununla birlikte, en ilgi çekici kullanım alanlarından bazıları, kullanıcının diğer takvim hizmetlerindeki takvimini Takvim Sağlayıcı ile senkronize eden senkronizasyon bağdaştırıcılarıdır. Bu sayede kullanıcının tüm etkinlikleri için tek bir konum sunulur. Örneğin, Google Takvim etkinlikleri Takvim Sağlayıcı ile şu şekilde senkronize edilir: Bu etkinliklerin Android'in yerleşik cihazlarıyla görüntülenmesine olanak tanıyan Google Calendar Sync Adapter'ı Takvim uygulaması.
Takvim Sağlayıcısı'ndaki takvimler ve etkinliklerle ilgili bilgiler için veri modeli:
CalendarContract
tarafından tanımlanıyor. Kullanıcının tüm takvim verileri
CalendarContract
öğesinin çeşitli alt sınıfları tarafından tanımlanan tablo sayısı:
CalendarContract.Calendars
tablosunda takvime özgü veriler bulunur ekleyebilirsiniz. Bu tablodaki her satırda tek bir takvimin adı, renk, senkronizasyon bilgileri vb.CalendarContract.Events
tablosunda etkinliğe özel bilgiler bulunur. Bu tablodaki her satır, tek bir etkinliğe ait bilgileri içerir. Örneğin: etkinlik başlığı, konum, başlangıç zamanı, bitiş zamanı vs. Etkinlik tek seferlik veya birden çok kez tekrarlanabilir. Katılımcılar, hatırlatıcılar ve genişletilmiş özellikler ayrı tablolarda saklanır ve Etkinliğe bağlamak için etkinliğin_ID
özelliğini kullanın.CalendarContract.Instances
tablosu şunun başlangıç ve bitiş zamanını içerir: kabul edilir. Bu tablodaki her satır tek bir olayı temsil eder. Tek seferlik etkinliklerde örneklerin etkinliklerle bire bir eşlenmesi vardır. Yinelenen etkinlikler için, söz konusu etkinliğin birden çok kez gerçekleşmesine karşılık gelecek şekilde otomatik olarak birden fazla satır oluşturulur.CalendarContract.Attendees
tablosu etkinlik katılımcısını veya davetliyi barındırır ekleyebilirsiniz. Her satır, bir etkinlikteki tek bir konuğu temsil eder. Bu dosya, konukların ve kişinin etkinliğe verdiği tepkidir.CalendarContract.Reminders
tablosu, uyarı/bildirim verilerini içerir. Her satır, bir etkinlikle ilgili tek bir uyarıyı temsil eder. Bir etkinlikte birden fazla hatırlatıcı olabilir. Etkinlik başına hatırlatıcı sayısıMAX_REMINDERS
içinde belirtilir. Bu değer, ilgili takvimin sahibi olan senkronizasyon bağdaştırıcısı tarafından belirlenir. Hatırlatıcılar, etkinlik planlanmadan önceki dakika sayısı olarak belirtilir ve kullanıcıya hatırlatmak için uyarı, e-posta veya SMS gibi bir alarm yöntemi belirtir.CalendarContract.ExtendedProperties
tablosu, senkronizasyon adaptörü tarafından kullanılan opak veri alanlarını içerir. Sağlayıcı, bu tablodaki öğelerle ilgili silme işlemi dışında herhangi bir işlem yapmaz. ilgili etkinlikleri silindiğinde bu kullanıcılara gösterilecek.
Bir kullanıcının takvim verilerine Takvim Sağlayıcı ile erişmek için uygulamanızın,
READ_CALENDAR
izni (okuma erişimi için) ve
WRITE_CALENDAR
(yazma erişimi için).
Etkinlik amacı
Tek amacınız kullanıcının takvimine etkinlik eklemekse Takvim uygulamasında yeni etkinlikler oluşturan bir etkinlik başlatmak için Events.CONTENT_URI
tarafından tanımlanan verilerle birlikte bir ACTION_INSERT
intent'i kullanabilirsiniz. Intent'i kullanmak için herhangi bir izin gerekmez ve aşağıdaki ekstralarla etkinlik ayrıntılarını belirtebilirsiniz:
Events.TITLE
: etkinlikCalendarContract.EXTRA_EVENT_BEGIN_TIME
: Şuradan milisaniye cinsinden etkinlik başlangıç zamanı: dönemCalendarContract.EXTRA_EVENT_END_TIME
: Etkinlik dönemden itibaren milisaniye cinsinden bitiş zamanıEvents.EVENT_LOCATION
: Etkinliğin yeriEvents.DESCRIPTION
: Etkinlik açıklamaIntent.EXTRA_EMAIL
: Davet edilecek kullanıcıların e-posta adresleriEvents.RRULE
: Yinelenme etkinliğin kuralıEvents.ACCESS_LEVEL
: Etkinliğin özel veya herkese açık olup olmadığıEvents.AVAILABILITY
: Bu etkinliğin zaman aralığının aynı zamanda başka etkinliklerin programlanmasına izin verip vermediği
Sesli Mesaj Sağlayıcısı
Yeni Sesli Mesaj Sağlayıcı, kullanıcının tüm sesli mesajlarını tek bir görsel sunumda sunmak için uygulamaların cihaza sesli mesaj eklemesine olanak tanır. Örneğin, bir kullanıcının birden fazla sesli mesaj kaynağı olabilir (ör. telefonun servis sağlayıcısı ve VoIP veya diğer alternatif ses hizmetleri). Bu uygulamalar, sesli mesajlarını cihaza eklemek için Sesli Mesaj Sağlayıcı API'lerini kullanabilir. İlgili içeriği oluşturmak için kullanılan yerleşik Telefon uygulaması daha sonra tüm sesli mesajları birleştirilmiş bir sunu halinde kullanıcıya sunar. Tüm sesli mesajları okuyabilen tek uygulama sistemdeki Telefon uygulaması olsa da sesli mesaj sağlayan her uygulama, sisteme eklediği sesli mesajları okuyabilir (ancak diğer hizmetlerdeki sesli mesajları okuyamaz).
API'ler şu anda üçüncü taraf uygulamalarının sesli mesaj API'lerini kullanması gereken üçüncü taraf uygulamaları, yalnızca sesli mesaj özelliği olan uygulamalardır. ve kullanıcıya teslim etmektir.
VoicemailContract
sınıfı
Sesli Mesaj Sağlayıcısı. VoicemailContract.Voicemails
ve VoicemailContract.Status
alt sınıfları, uygulamaların cihazda depolamak üzere sesli mesaj verilerini ekleyebildiği tablolar sağlar. Sesli mesaj sağlayıcı uygulaması örneği için Sesli Mesaj Sağlayıcı Demo'ya bakın.
Multimedya
Android 4.0 fotoğraf gibi medya ile etkileşim kuran uygulamalar için birçok yeni API ekler. video ve müzik.
Medya Efektleri
Yeni medya efektleri çerçevesi, resimlere ve grafiklere çeşitli görsel efektler videolar. Örneğin, resim efektleri sayesinde kırmızı göz sorununu kolayca düzeltebilir, bir resmi gri tonlamaya dönüştürebilir, parlaklığı ve doygunluğu ayarlayabilir, resmi döndürebilir, balık gözü efekti uygulayabilir ve daha pek çok işlem yapabilirsiniz. İlgili içeriği oluşturmak için kullanılan sistemi maksimum performans elde etmek için tüm efektleri GPU'da işler.
Maksimum performans için efektler doğrudan OpenGL dokularına uygulanır. Bu nedenle, uygulamanızın efekt API'lerini kullanabilmesi için geçerli bir OpenGL bağlamına sahip olması gerekir. Etki uyguladığınız dokular bitmap'lerden, videolardan ve hatta kameradan gelebilir. Ancak, dokular aşağıdaki şartları karşılamalıdır:
- Bir
GL_TEXTURE_2D
doku resmine bağlı olmalıdırlar - En az bir Mipmap düzeyi içermelidir
Effect
nesnesi, uygulayabileceğiniz tek bir medya efekti tanımlar
resim çerçevesi. Effect
oluşturmak için temel iş akışı şu şekildedir:
- OpenGL ES 2.0 içeriğinizden
EffectContext.createWithCurrentGlContext()
çağrısı yapın. - Döndürülen
EffectContext
değerini kullanarakEffectContext.getFactory()
işlevini çağırın. Bu işlev,EffectFactory
örneğini döndürür. - @link android.media.effect.EffectFactory} sınıfından bir efekt adı (ör.
EFFECT_FISHEYE
veyaEFFECT_VIGNETTE
) ilecreateEffect()
işlevini çağırın.
setParameter()
işlevini çağırıp bir parametre adı ve parametre değeri ileterek bir efektin parametrelerini ayarlayabilirsiniz. Her efekt türü, efekt adıyla birlikte açıklanan farklı parametreleri kabul eder. Örneğin, EFFECT_FISHEYE
, bozulmanın scale
parametresi için bir parametreye sahiptir.
Bir dokuya efekt uygulamak için Effect
üzerinde apply()
'ü çağırın ve giriş dokusunu, genişliğini, yüksekliğini ve çıkış dokusunu iletin. Giriş dokusu bir GL_TEXTURE_2D
doku resmine bağlanmalıdır (genellikle glTexImage2D()
işlevi çağrılarak yapılır). Birden fazla mipmap seviyesi sağlayabilirsiniz. Çıkış dokusu bir
doku resmi, efekt ile otomatik olarak GL_TEXTURE_2D
ve bir Mipmap düzeyi (0) ile bağlanır. Bu düzeyde de
boyutu kullanabilirsiniz.
EffectFactory
listesinde belirtilen tüm efektlerin destekleneceği garanti edilir.
Ancak harici kitaplıklarda bulunan bazı ek efektler tüm cihazlar tarafından desteklenmez. Bu nedenle, harici kitaplıktaki istenen efektin desteklenip desteklenmediğini kontrol etmek için önce isEffectSupported()
işlevini çağırmanız gerekir.
Uzaktan kumanda istemcisi
Yeni RemoteControlClient
, medya oynatıcıların oynatmayı etkinleştirmesine olanak tanır.
cihaz kilit ekranı gibi uzaktan kumanda istemcilerinin kontrol düğmelerini kullanır. Medya oynatıcılar, uzaktan kumanda ekranında gösterilecek şekilde, şu anda oynatılan medyayla ilgili bilgileri (ör. parça bilgileri ve albüm kapağı) de gösterebilir.
Medya oynatıcınız için uzaktan kumanda istemcilerini etkinleştirmek amacıyla, kurucusuyla bir RemoteControlClient
örneği oluşturup ACTION_MEDIA_BUTTON
yayını yapan bir PendingIntent
iletin. Intent, uygulamanızda ACTION_MEDIA_BUTTON
etkinliğini işleyen açık BroadcastReceiver
bileşenini de beyan etmelidir.
Oynatıcınızın hangi medya kontrol girişlerini işleyebileceğini belirtmek için RemoteControlClient
üzerinde setTransportControlFlags()
'ü çağırarak FLAG_KEY_MEDIA_PREVIOUS
ve FLAG_KEY_MEDIA_NEXT
gibi bir dizi FLAG_KEY_MEDIA_*
işareti göndermeniz gerekir.
Ardından, RemoteControlClient
öğenizi MediaManager.registerRemoteControlClient()
'a aktararak kaydetmeniz gerekir.
Kaydolduktan sonra, RemoteControlClient
öğesini başlatırken beyan ettiğiniz yayın alıcısına ACTION_MEDIA_BUTTON
gönderilir
uzaktan kumandadan bir düğmeye basıldığında gerçekleşen etkinlikleri ifade eder. Aldığınız intent, basılan medya anahtarı için KeyEvent
öğesini içerir. Bu anahtarı, getParcelableExtra(Intent.EXTRA_KEY_EVENT)
ile niyetten alabilirsiniz.
Uzaktan kumandada medya oynatmayla ilgili bilgileri görüntülemek için editMetaData()
yöntemini çağırın ve döndürülen öğeye meta verileri ekleyin
RemoteControlClient.MetadataEditor
. Medya posteri için bir bitmap, geçen süre gibi sayısal bilgiler ve parça başlığı gibi metin bilgileri sağlayabilirsiniz. Kullanılabilir anahtarlar hakkında bilgi edinmek için MediaMetadataRetriever
içindeki METADATA_KEY_*
işaretlerine bakın.
Örnek bir uygulama için Random Music Player'a bakın. Bu uygulama, Android 2.1'e kadarki cihazları desteklemeye devam ederken Android 4.0 cihazlarda uzaktan kumanda istemcisini etkinleştirecek şekilde uyumluluk mantığı sağlar.
Medya oynatıcı
MediaPlayer
uygulamasından çevrimiçi medya akışı için artıkINTERNET
izni gerekiyor.MediaPlayer
kullanıyorsanız internetten içerik oynatalar,INTERNET
eklediğinizden emin olun manifest dosyanıza izin verilmez, aksi takdirde medya oynatma işleviniz Android'den itibaren çalışmaz. 4.0.setSurface()
, video havuzu olarak davranacak birSurface
tanımlamanıza olanak tanır.setDataSource()
ile yapabilecekleriniz: İsteğinizle birlikte, HTTP(S) canlı akışı için yararlı olabilecek ek HTTP üstbilgileri gönderin- HTTP(S) canlı yayını artık isteklerde HTTP çerezlerine uyuyor
Medya türleri
Android 4.0 aşağıdakiler için destek sağlar:
- HTTP/HTTPS canlı yayın protokolü sürüm 3
- ADTS ham AAC ses kodlaması
- WEBP resimleri
- Matroska videosu
Daha fazla bilgi için Desteklenen Medyalar bölümüne bakın Biçimler.
Kamera
Camera
sınıfı artık yüzleri algılamak ve kontrol etmek için API'ler içeriyor.
farklı alanları kapsıyor.
Yüz algılama
Kamera uygulamaları artık Android'in yüz algılama API'leri sayesinde yeteneklerini artırabilir. Bu API'ler, yalnızca öznenin yüzünü değil, göz ve ağız gibi belirli yüz özelliklerini de algılar.
Kamera uygulamanızda yüzleri algılamak için setFaceDetectionListener()
numaralı telefonu arayarak bir Camera.FaceDetectionListener
kaydettirmeniz gerekir. Ardından
kameranızın yüzeyini seçin ve startFaceDetection()
numaralı telefonu arayarak yüzleri algılamaya başlayın.
Sistem, kamera sahnesinde bir veya daha fazla yüz algıladığında Camera.FaceDetectionListener
uygulamanızda Camera.Face
nesne dizisi içeren onFaceDetection()
geri çağırma işlevini çağırır.
Camera.Face
sınıfının bir örneği, şunlar hakkında çeşitli bilgiler sağlar:
şu da dahil olmak üzere yüz algılandı:
- Kameranın mevcut görüş alanına göre yüzün sınırlarını belirten bir
Rect
- Sistemin, nesnenin insan yüzü olduğuna ne kadar güvendiğini belirten 1 ile 100 arasında bir tam sayı
- Birden fazla yüzü izleyebilmeniz için benzersiz bir kimlik
- Gözlerin ve ağzın nerede olduğunu gösteren birkaç
Point
nesnesi
Not: Yüz algılama özelliği bazı cihazlarda desteklenmeyebilir
Bu yüzden getMaxNumDetectedFaces()
numaralı telefonu arayıp kontrol edip iade isteğinde bulunmanız gerekir.
değer sıfırdan büyük. Ayrıca bazı cihazlar göz ve ağız tanımlamayı desteklemeyebilir. Bu durumda, Camera.Face
nesnesindeki bu alanlar null olur.
Odaklanma ve ölçüm alanları
Kamera uygulamaları artık kameranın odaklanma ve beyaz ölçümü için kullandığı alanları kontrol edebilir
bakiye
ve otomatik pozlama. Her iki özellik de kameranın mevcut görünümünde odaklanılması veya ölçülmesi gereken bölgeyi belirtmek için yeni Camera.Area
sınıfını kullanır. Camera.Area
sınıfının bir örneği, alanın Rect
ile sınırlarını ve alanın ağırlığını tanımlar. Bu da, alanın önem düzeyini temsil eder.
alan, bir tam sayı ile gösterilir.
Odak alanı veya ölçüm alanı ayarlamadan önce sırasıyla getMaxNumFocusAreas()
veya getMaxNumMeteringAreas()
işlevini çağırmanız gerekir. Bu değerler sıfır döndürüyorsa cihaz ilgili özelliği desteklemiyordur.
Kullanılacak odak veya ölçme alanlarını belirtmek için setFocusAreas()
ya da setMeteringAreas()
işlevini çağırmanız yeterlidir. Her biri, odaklama veya ölçüm için dikkate alınacak alanları belirten Camera.Area
nesne List
alır. Örneğin, kullanıcının
önizlemenin bir alanına dokunarak odak alanını ayarlayabilirsiniz. Daha sonra, bunu bir Camera.Area
nesnesine çevirirsiniz ve kameranın sahnenin o alanına odaklanmasını isteyebilirsiniz.
Bu alandaki odak veya pozlama, alandaki sahne değiştikçe sürekli olarak güncellenir.
Fotoğraflar için sürekli otomatik odaklama
Artık fotoğraf çekerken sürekli otomatik odaklamayı (CAF) etkinleştirebilirsiniz. Kamera uygulamanızda CAF'yi etkinleştirmek için FOCUS_MODE_CONTINUOUS_PICTURE
değerini setFocusMode()
değerine iletin. Fotoğraf çekmeye hazır olduğunuzda autoFocus()
numaralı telefonu arayın. Odak sağlanıp sağlanmadığını belirtmek için Camera.AutoFocusCallback
cihazınıza hemen geri arama yapılır. Geri arama alındıktan sonra CAF'yi devam ettirmek için cancelAutoFocus()
numaralı telefonu aramanız gerekir.
Not: Sürekli otomatik odaklama, çekim sırasında da desteklenir
FOCUS_MODE_CONTINUOUS_VIDEO
kullanılarak elde edilen
API düzeyi 9'da eklendi.
Diğer kamera özellikleri
- Video kaydederken artık video oturumunu kesintiye uğratmadan fotoğraf kaydetmek için
takePicture()
numarasını arayabilirsiniz. Bunu yapmadan önce donanımın doğruluğundan emin olmak içinisVideoSnapshotSupported()
adlı kişiyi arayın destekler. - Artık bu özelliklerin değişmesini önlemek için
setAutoExposureLock()
vesetAutoWhiteBalanceLock()
ile otomatik pozlamayı ve beyaz dengeyi kilitleyebilirsiniz. - Artık kamera önizlemesi çalışırken
setDisplayOrientation()
numaralı telefonu arayabilirsiniz. Daha önce bu işlevi yalnızca önizlemeye başlamadan önce çağırabiliyordunuz. Artık yönü istediğiniz zaman değiştirebilirsiniz.
Kamera yayını amaçları
Camera.ACTION_NEW_PICTURE
: Bu, kullanıcının yeni bir fotoğraf çektiğini gösterir. Yerleşik Kamera uygulaması bunu çağırır anons edilebilir. Ayrıca, üçüncü taraf kamera uygulamalarının da bu amacı anlaması için fotoğraf çektikten sonra.Camera.ACTION_NEW_VIDEO
: Bu, kullanıcının yeni bir video yakaladığını gösterir. Yerleşik Kamera uygulaması bunu çağırır Video kaydedildikten sonra yayın yapmalı ve üçüncü taraf kamera uygulamalarının da bu niyeti yayınlaması gerekir. her zaman daha azdır.
Android Beam (NFC ile NDEF Push)
Android Beam, NDEF mesajlarını bir cihazdan cihaza göndermenize olanak tanıyan yeni bir NFC özelliğidir. başka bir işlem ("NDEF Push" olarak da bilinir). Veri aktarımı, Android Beam'i destekleyen iki Android cihaz birbirine yakın (yaklaşık 4 cm) mesafedeyken ve genellikle arkaları birbirine değecek şekildeyken başlatılır. NDEF mesajındaki veriler, paylaşmak istediğiniz tüm verileri içerebilir cihazlar arasında geçiş yapın. Örneğin, Kişiler uygulaması kişileri, YouTube videoları ve Tarayıcıyı paylaşır. Android Beam'i kullanarak URL'leri paylaşır.
Android Beam'i kullanarak cihazlar arasında veri aktarmak için etkinliğiniz ön plandayken paylaşmak istediğiniz bilgileri içeren bir NdefMessage
oluşturmanız gerekir. Daha sonra, NdefMessage
öğesini sisteme iki seçenekten birinde iletmeniz gerekir
yöntemler:
- Etkinlik sırasında aktarılacak tek bir
NdefMessage
tanımlayın:Ayarlamak için dilediğiniz zaman
setNdefPushMessage()
numaralı telefonu arayın kısa bir e-posta alırsınız. Örneğin, bu yöntemi çağırabilir ve etkinliğinizinonCreate()
yöntemi sırasındaNdefMessage
öğenizi iletebilirsiniz. Ardından, etkinlik başka bir cihazla açıldığında, ön planda, sistemNdefMessage
öğesini diğer cihaza gönderir. - Android Beam başlatıldığı sırada aktarılacak
NdefMessage
öğesini tanımlayın:NfcAdapter.CreateNdefMessageCallback
uygulayın.createNdefMessage()
uygulanması yöntemi, göndermek istediğinizNdefMessage
değerini döndürür. ArdındanNfcAdapter.CreateNdefMessageCallback
uygulamasınısetNdefPushMessageCallback()
'a iletin.Bu durumda, etkinliğiniz ön plandayken Android Beam başka bir cihazda etkinleştirildiğinde sistem, göndermek istediğiniz
NdefMessage
öğesini almak içincreateNdefMessage()
öğesini çağırır. Bu,NdefMessage
öğesinin, içeriğin mesajın yapısı, etkinliğin ömrü boyunca değişiklik gösterebilir.
Sistem NDEF'nizi başarıyla teslim ettikten sonra belirli bir kod çalıştırmak isterseniz
mesajı görürseniz NfcAdapter.OnNdefPushCompleteCallback
öğesini uygulayabilir ve setNdefPushCompleteCallback()
ile ayarlayabilirsiniz. Sistem,
Mesaj teslim edildiğinde onNdefPushComplete()
adlı kuruluşu arayın.
Alıcı cihazda sistem, NDEF Push mesajlarını normal NFC etiketlerine benzer şekilde dağıtır. Sistem, NdefMessage
içindeki ilk NdefRecord
'a göre ayarlanmış bir URL veya MIME türüyle bir etkinlik başlatmak için ACTION_NDEF_DISCOVERED
işlemini içeren bir intent çağırır. Yanıt vermek istediğiniz etkinlik için uygulamanızın önemsediği URL'ler veya MIME türleri için intent filtreleri tanımlayabilirsiniz. Daha fazla
NFC geliştirici kılavuzuna bakın.
NdefMessage
cihazınızın bir URI taşımasını istiyorsanız artık
bir dize veya Uri
nesnesine dayalı yeni bir NdefRecord
oluşturmak için createUri
yöntemini kullanın. URI, uygulamanızın bir Android Beam etkinliği sırasında da almasını istediğiniz özel bir biçimse gelen NDEF mesajını almak için etkinliğiniz için aynı URI şemasını kullanarak bir intent filtresi oluşturmanız gerekir.
Ayrıca "Android uygulama kaydı" da iletmeniz gerekir. NdefMessage
cihazınızla birlikte
uygulamanızın gelen NDEF mesajını işlemesini garantilemek için
aynı amaç işlemi için
filtrelenir. createApplicationRecord()
işlevini çağırarak ve uygulamanızın paket adını ileterek bir Android uygulama kaydı oluşturabilirsiniz. Diğer cihaz, uygulama kaydını içeren NDEF mesajını aldığında ve birden fazla uygulama, belirtilen intent'i işleyen etkinlikler içerdiğinde sistem, mesajı her zaman uygulamanızdaki etkinliğe (eşleşen uygulama kaydına göre) iletir. Hedef cihazda uygulamanız yüklü değilse
sistemi Google Play'i başlatmak için Android uygulama kaydını kullanır ve kullanıcıyı
uygulamayı yüklemeniz gerekir.
Uygulamanız NDEF Push mesajlaşmasını gerçekleştirmek için NFC API'lerini kullanmıyorsa Android bir Varsayılan davranış: Uygulamanız bir cihazda ön planda çalışırken ve Android Beam diğer cihaz, Android destekli başka bir cihazla çağrılırsa Uygulamanızı tanımlayan Android uygulaması kaydı. Alıcı cihazda uygulama yüklendiğinde, sistem uygulamayı başlatır; yüklü değilse Google Play açılır ve kullanıcıyı uygulamanıza yönlendirin.
NFC ile İlgili Temel Bilgiler geliştirici kılavuzunda Android Beam ve diğer NFC özellikleri hakkında daha fazla bilgi edinebilirsiniz. Örneğin, hakkında daha fazla bilgi için Android Beam Işınlama Demosu.
Kablosuz P2P
Android artık Android destekli cihazlar ile eşler arası (P2P) bağlantıları diğer cihaz türleri de (Wi-Fi Alliance'ın Wi-Fi DirectTM sertifika programı) hotspot veya İnternet bağlantısı olmadan. Android çerçevesi, kullanıcıları Her bir cihaz yanınızda olduğunda diğer cihazları keşfedip bağlanmanıza olanak tanıyan bir dizi Wi-Fi P2P API'si kablosuz P2P'yi destekler; daha uzun mesafelerde hızlı bir bağlantı üzerinden Bluetooth bağlantısı.
Yeni bir paket olan android.net.wifi.p2p
, kablosuz ağ üzerinden eşler arası bağlantılar gerçekleştirmek için gereken tüm API'leri içerir. Çalışmanız gereken birincil sınıf WifiP2pManager
'tir. Bu sınıfı getSystemService(WIFI_P2P_SERVICE)
'u çağırarak edinebilirsiniz. WifiP2pManager
aşağıdakileri yapmanıza olanak tanıyan API'ler içerir:
- P2P bağlantıları için uygulamanızı
initialize()
numaralı telefonu arayarak başlatın. discoverPeers()
'ü arayarak yakındaki cihazları keşfetmeconnect()
numaralı telefonu arayarak P2P bağlantısı başlatın- Başka pek çok bilgi
Ayrıca, aşağıdakiler gibi birçok farklı arayüz ve sınıf da gereklidir:
WifiP2pManager.ActionListener
arayüzü ile şunları alabilirsiniz: eşleri keşfetme veya bunlara bağlanma gibi bir işlem başarılı ya da başarısız olduğunda geri çağırmalar.WifiP2pManager.PeerListListener
arayüzü ile şunları alabilirsiniz: hakkında daha fazla bilgi edinin. Geri çağırma, birWifiP2pDeviceList
sağlar. Kapsama alanı içindeki her cihaz içinWifiP2pDevice
nesnesini buradan alabilir ve aşağıdakilere benzer bilgileri alabilirsiniz: cihaz adı, adresi, cihaz türü, cihazın desteklediği WPS yapılandırmaları ve daha fazlası.WifiP2pManager.GroupInfoListener
arayüzü şunları yapmanıza olanak tanır: P2P grubuyla ilgili bilgi alma. Geri çağırma; birWifiP2pGroup
nesnesi sağlar. Bu nesne; sahibi, parolayı girin.WifiP2pManager.ConnectionInfoListener
arayüzü ile yapabilecekleriniz: geçerli bağlantıyla ilgili bilgi almalarını sağlayın. Geri çağırma, bir grubun konumlandırılıp sayılmadığı gibi bilgileri içeren birWifiP2pInfo
nesnesi sağlar. ve grup sahibinin kim olduğu.
Kablosuz P2P API'lerini kullanmak için uygulamanızın aşağıdaki kullanıcı izinlerini istemesi gerekir:
ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
INTERNET
(uygulamanız teknik olarak bağlantı kurmasa da standart Java yuvalarına sahip kablosuz P2P eşleriyle iletişim kurmak için İnternet gerekir. izni) gerekir.
Android sistemi belirli Wi-Fi 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
öğesini birWifiP2pInfo
nesnesi veEXTRA_NETWORK_INFO
öğesini birNetworkInfo
nesnesi ile taşır.WIFI_P2P_STATE_CHANGED_ACTION
: P2P durumu etkin ve devre dışı arasında değişti.WIFI_P2P_STATE_DISABLED
ya daWIFI_P2P_STATE_ENABLED
ileEXTRA_WIFI_STATE
taşıyorWIFI_P2P_PEERS_CHANGED_ACTION
: Benzerlerin listesi cihaz değişti.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: Bu cihazın ayrıntıları değişti.
Daha fazla bilgi için WifiP2pManager
dokümanlarına bakın. Ayrıca
buraya göz atın
Wi-Fi P2P Demo
örnek bir uygulamadır.
Bluetooth Sağlık Cihazları
Android artık Bluetooth Sağlık Profili cihazlarını destekliyor. Böylece, Bluetooth'u destekleyen sağlık cihazlarıyla (ör. kalp atış hızı monitörleri, kan şekeri ölçüm cihazları, termometreler ve tartılar) iletişim kurmak için Bluetooth kullanan uygulamalar oluşturabilirsiniz.
Normal mikrofonlu kulaklık ve A2DP profil cihazlarına benzer şekilde, profil proxy nesnesi ile bağlantı kurmak için getProfileProxy()
'ü bir BluetoothProfile.ServiceListener
ve HEALTH
profil türüyle çağırmanız gerekir.
Sağlık Profili proxy'sini (BluetoothHealth
nesnesi) edindikten sonra, eşlenmiş sağlık cihazlarına bağlanmak ve bu cihazlarla iletişim kurmak için aşağıdaki yeni Bluetooth sınıfları kullanılır:
BluetoothHealthCallback
: Bu sınıfın kapsamını genişletmeli ve uygulamanın kayıt durumundaki değişikliklerle ilgili güncellemeleri almak için geri çağırma yöntemleri ve Bluetooth kanalı durumu.BluetoothHealthAppConfiguration
:BluetoothHealthCallback
adresinize yapılan geri aramalar sırasında, mevcut Bluetooth sağlık cihazı hakkında yapılandırma bilgileri sağlayan bu nesnenin bir örneğini alırsınız.BluetoothHealth
API'leriyle bağlantı başlatma ve sonlandırma gibi çeşitli işlemleri gerçekleştirmek için bu nesneyi kullanmanız gerekir.
Bluetooth Sağlık Profili'ni kullanma hakkında daha fazla bilgi için BluetoothHealth
dokümanlarına bakın.
Erişilebilirlik
Android 4.0, görme engelli kullanıcılar için erişilebilirliği yeni dokunarak keşfetme modu ve içerik görüntüleme hakkında daha fazla bilgi sağlamanıza veya gelişmiş erişilebilirlik hizmetleri geliştirmenize olanak tanıyan genişletilmiş API'lerle iyileştirir.
Dokunarak keşfet modu
Görme kaybı olan kullanıcılar artık bir parmağına dokunup sürükleyerek ekranda gezinebilirler.
içeriğin sesli açıklamalarını dinleyin. Çünkü dokunarak keşfetme modu
Bu şekilde, ekran okuyucuların açıklayıcı metni ekrandakiyle aynı şekilde tanımlamasını sağlar.
Kullanıcı, sağlanan bilgileri okuyarak d-pad veya iztopu ile gezindiğinde okuyucular bunu yapabilir
"fareyle üzerine gelme" simülasyonu üzerine android:contentDescription
ve setContentDescription()
tarafından unutmayın. Bu nedenle, bu e-postayı, uygulamanızdaki görünümler (özellikle ImageButton
, EditText
, ImageView
ve doğal olarak açıklayıcı metin içermeyebilecek diğer widget'lar) için açıklayıcı metin sağlamanız gerektiğini hatırlatmak amacıyla gönderiyoruz.
Görüntülemeler için erişilebilirlik
Ekran okuyucu gibi erişilebilirlik hizmetlerinde sunulan bilgileri iyileştirmek için
Özel View
bileşenlerinizde erişilebilirlik etkinlikleri için yeni geri çağırma yöntemleri uygulayın.
Öncelikle, sendAccessibilityEvent()
yönteminin davranışının Android 4.0'da değiştiğini belirtmek önemlidir. Android'in önceki sürümünde olduğu gibi, kullanıcı cihazda erişilebilirlik hizmetlerini etkinleştirdiğinde
tıklama veya fareyle üzerine gelme gibi bir giriş etkinliği gerçekleştiğinde, ilgili görünüme
sendAccessibilityEvent()
Daha önce sendAccessibilityEvent()
'ün uygulanması, bir AccessibilityEvent
başlatıp AccessibilityManager
'ye gönderiyordu. Yeni davranış bazı ek geri çağırmalar içeriyor
görünüm ve üst öğelerinin etkinliğe daha fazla bağlamsal bilgi eklemesine olanak tanıyan yöntemler içerir:
sendAccessibilityEvent()
vesendAccessibilityEventUnchecked()
yöntemleri çağrıldığındaonInitializeAccessibilityEvent()
'ye yönlendirilir.View
özel uygulamaları içinonInitializeAccessibilityEvent()
AccessibilityEvent
öğesine daha fazla erişilebilirlik bilgisi ekleyin ancak standart içerik açıklaması ve öğe dizini gibi varsayılan bilgileri sağlayabilir. Ancak bu geri çağırmaya başka metin içeriği eklememelisiniz. tıklayın.- Etkinlik başlatıldıktan sonra, metin ile doldurulması gereken çeşitli türlerden biriyse
görüntüledikten sonra, görünüm
dispatchPopulateAccessibilityEvent()
onPopulateAccessibilityEvent()
tarihine kadar erteler geri arama.View
'ün özel uygulamaları genellikleandroid:contentDescription
metni eksik veya yetersizseAccessibilityEvent
'ye ek metin içeriği eklemek içinonPopulateAccessibilityEvent()
'ü uygulamalıdır. Daha fazla metin açıklaması eklemek içinAccessibilityEvent
,getText()
numaralı telefonu arayın.add()
. - Bu noktada
View
, üst görünümderequestSendAccessibilityEvent()
'ü çağırarak etkinliği görünüm hiyerarşisinde yukarı aktarır. Böylece her ebeveyn görünümü, erişilebilirlik bilgilerini o zamana kadarAccessibilityRecord
ekleniyor kök görünüme ulaşır ve etkinlik,sendAccessibilityEvent()
ileAccessibilityManager
ürününe gönderilir.
View
sınıfının genişletilmesinde kullanışlı olan yukarıdaki yeni yöntemlere ek olarak, AccessibilityDelegate
öğesini genişletip görünümde aşağıdaki kodla ayarlayarak herhangi bir View
üzerinde bu etkinlik geri çağırmalarına müdahale edebilirsiniz.
setAccessibilityDelegate()
.
Bunu yaptığınızda, görünümdeki her erişilebilirlik yöntemi çağrıyı
karar verir. Örneğin, görüntüleme onPopulateAccessibilityEvent()
için bir çağrı aldığında bunu View.AccessibilityDelegate
içindeki aynı yönteme iletir. Temsilci tarafından işlenmeyen tüm yöntemler, varsayılan davranış için doğrudan görünüme geri verilir. Bu sayede, View
sınıfını genişletmeden yalnızca belirli bir görünüm için gerekli yöntemleri geçersiz kılabilirsiniz.
4.0'dan önceki Android sürümleriyle uyumluluğu sürdürmek ve aynı zamanda yeni erişilebilirlik API'lerini kullanmak istiyorsanız bunu v4 desteğinin son sürümüyle kitaplığı (Uyumluluk Paketi, r4'te) yeni erişilebilirlik API'lerini geriye dönük uyumlu olacak şekilde sağlayan bir dizi yardımcı program sınıfı kullanarak tasarım.
Erişilebilirlik hizmetleri
Bir erişilebilirlik hizmeti geliştiriyorsanız çeşitli erişilebilirlik etkinlikleri hakkındaki bilgiler , kullanıcılar için daha gelişmiş erişilebilirlik geri bildirimi sağlamak üzere önemli ölçüde genişletildi. Özellikle etkinlikler, görünüm kompozisyonuna göre oluşturulur. Bu sayede daha iyi bağlam bilgileri sağlanır ve erişilebilirlik hizmetlerinin ek görünüm bilgileri almak ve özel durumlarla ilgilenmek için görünüm hiyerarşileri arasında gezinmesine olanak tanınır.
Bir erişilebilirlik hizmeti (ekran okuyucu gibi) geliştiriyorsanız aşağıdaki prosedürü uygulayarak ek içerik bilgilerini ve çapraz görünüm hiyerarşilerini inceleyin:
- Bir uygulamadan
AccessibilityEvent
aldıktan sonra, belirli birAccessibilityRecord
almak içinAccessibilityEvent.getRecord()
işlevini çağırın ( etkinliği) ekleyebilirsiniz. AccessibilityEvent
veya tek birAccessibilityRecord
cihazından,AccessibilityNodeInfo
nesnesini almak içingetSource()
öğesini çağırabilirsiniz.AccessibilityNodeInfo
, tek bir düğümü temsil eder erişilebilirlik bilgilerini sorgulamanıza olanak tanıyan bir biçimde sunmalısınız. düğüm.AccessibilityEvent
işlevinden döndürülenAccessibilityNodeInfo
nesnesi etkinlik kaynağını tanımlarken,AccessibilityRecord
, etkinliğin selefi hakkında bilgi verir kaynak.AccessibilityNodeInfo
ile bilgileri sorgulayabilirsiniz. görünümü aktarmak içingetParent()
veyagetChild()
işlevini çağırın ve hatta düğüme alt görünümler de ekleyebilirsiniz.
Uygulamanızın sistemde erişilebilirlik hizmeti olarak yayınlanması için AccessibilityServiceInfo
değerine karşılık gelen bir XML yapılandırma dosyası beyan etmesi gerekir. Erişilebilirlik hizmeti oluşturma hakkında daha fazla bilgi için AccessibilityService
başlıklı makaleyi inceleyin. XML yapılandırması hakkında bilgi için SERVICE_META_DATA
başlıklı makaleyi inceleyin.
Diğer erişilebilirlik API'leri
Cihazın erişilebilirlik durumuyla ilgileniyorsanız AccessibilityManager
gibi bazı yeni API'ler var:
AccessibilityManager.AccessibilityStateChangeListener
. erişilebilirlik özelliği etkinleştirildiğinde geri arama almanıza olanak tanıyan bir arayüzdür devre dışı bırakıldı.getEnabledAccessibilityServiceList()
, şu anda hangi erişilebilirlik hizmetlerinin etkin olduğu hakkında bilgi verir.isTouchExplorationEnabled()
, dokunarak keşfetme modunun etkin olup olmadığını gösterir.
Yazım Denetleyici Hizmetleri
Yeni yazım denetimi çerçevesi, uygulamaların giriş yöntemi çerçevesine (IME'ler için) benzer bir şekilde yazım denetimi oluşturmasına olanak tanır. Yeni bir yazım denetimi aracı oluşturmak için SpellCheckerService
sınıfını genişleten bir hizmet uygulamanız ve SpellCheckerService.Session
sınıfını, arayüzün geri çağırma yöntemleri tarafından sağlanan metne göre yazım önerileri sunacak şekilde genişletmeniz gerekir. SpellCheckerService.Session
geri çağırma yöntemlerinde
yazım önerilerini SuggestionsInfo
nesne olarak görüyorsunuz.
Yazım denetimi hizmeti içeren uygulamalar, hizmetin gerektirdiği şekilde BIND_TEXT_SERVICE
iznini belirtmelidir.
Hizmet ayrıca intent işlemi olarak <action
android:name="android.service.textservice.SpellCheckerService" />
ile bir intent filtresi beyan etmeli
yazım için yapılandırma bilgilerini tanımlayan bir <meta-data>
öğesi ekleyin
kontrol eder.
Örneğe bakın: Yazım Denetleyici Hizmeti uygulamasını kullanarak örnek Örnek kod için Yazım Denetleyici İstemcisi uygulaması.
Metin Okuma Motorları
Android'in metin okuma (TTS) API'leri, uygulamaların özel TTS motorlarını daha kolay şekilde uygulamasını sağlamak için önemli ölçüde genişletildi. TTS motoru kullanmak isteyen uygulamalarda ise motor seçmek için birkaç yeni API mevcuttur.
Metin okuma motorlarını kullanma
Android'in önceki sürümlerinde TextToSpeech
sınıfını kullanabilirdiniz
sistem tarafından sağlanan TTS motorunu kullanarak metin okuma (TTS) işlemleri gerçekleştirmek veya bir
özel arama motorunu setEngineByPackageName()
kullanın. Android 4.0'ta setEngineByPackageName()
yönteminin desteği sonlandırıldı ve artık bir TTS motorunun paket adını kabul eden yeni bir TextToSpeech
kurucu ile kullanılacak motoru belirtebilirsiniz.
Ayrıca, kullanılabilir TTS motorlarını getEngines()
ile sorgulayabilirsiniz. Bu yöntem, motorunTextToSpeech.EngineInfo
simge, etiket ve paket adı.
Metin okuma motorları oluşturma
Daha önce özel motorlar, motorun dokümanları olmayan bir yerel başlık dosyası kullanılarak oluşturulmasını gerektiriyordu. Android 4.0'da, TTS motorları oluşturmak için eksiksiz bir çerçeve API'si grubu bulunur.
Temel kurulum, aşağıdakilerin geçerli olması için TextToSpeechService
uygulanmasını gerektirir:
INTENT_ACTION_TTS_SERVICE
amacına karşılık gelir. Bir TTS motorunun birincil çalışması, TextToSpeechService
'ü genişleten bir hizmette onSynthesizeText()
geri çağırma sırasında gerçekleşir. Sistem bu yöntemi ikinci olarak sunar.
nesneler:
SynthesisRequest
: Bu öğe, çeşitli verileri içerir. Örneğin, yerel ayarı, konuşma hızını ve ses tonunu sentezlemelisiniz.SynthesisCallback
: Bu, TTS motorunuzun elde edilen konuşma verilerini akış ses olarak yayınladığı arayüzdür. Öncelikle motor, motorun yayına hazır olduğunu belirtmek içinstart()
öğesini çağırmalıdır sesi dinleyin, ardındanaudioAvailable()
adlı kişiyi arayın. ilettiğinden emin olun. Motorunuz arabellekte,done()
yöntemini çağırın.
Çerçeve artık TTS motorları oluşturmak için gerçek bir API'yi desteklediğine göre artık yerel kod için de uygulama kaldırıldı. Uyumluluk katmanıyla ilgili blog yayınını arama eski TTS motorlarınızı yeni çerçeveye dönüştürmek için kullanabileceğiniz bir çerçevedir.
Yeni API'leri kullanan örnek bir TTS motoru için Text To Speech Engine örnek uygulamasına bakın.
Ağ Kullanımı
Android 4.0, kullanıcılara uygulamalarının ne kadar ağ verisi kullandığını tam olarak görme olanağı sunar. Ayarlar uygulaması, kullanıcıların ağ veri kullanımı için belirlenen sınırları yönetmelerine ve hatta arka plan verilerinin kullanımını tek tek uygulamalar için devre dışı bırakmalarına olanak tanıyan kontroller sağlar. Kullanıcıların uygulamanızın arka planda verilere erişimini devre dışı bırakmasını önlemek için veri bağlantısını verimli bir şekilde kullanmaya yönelik stratejiler geliştirmeniz ve kullanımınızı mevcut bağlantı türüne göre ayarlamanız gerekir.
Uygulamanız çok sayıda ağ işlemi gerçekleştiriyorsa kullanıcıların uygulamanızın veri alışkanlıklarını kontrol etmelerine olanak tanıyan kullanıcı ayarları (ör. uygulamanızın verileri ne sıklıkta senkronize ettiği, yükleme/indirme işlemlerinin yalnızca kablosuz ağda yapılıp yapılmayacağı, dolaşım sırasında veri kullanımının etkin olup olmayacağı vb.) sağlamanız gerekir. Bu kontroller sayesinde kullanıcılar, uygulamanızın ne kadar veri kullandığını tam olarak kontrol edebilecekleri için sınırlara yaklaştıklarında uygulamanızın veri erişimini devre dışı bırakma olasılıkları çok daha düşüktür.
Bu ayarlarla bir tercih etkinliği sağlarsanız, bunu manifest dosyasına eklemeniz gerekir
ACTION_MANAGE_NETWORK_USAGE
için bir amaç filtresi bildirme
eyleme dökülebilir. Örnek:
<activity android:name="DataPreferences" android:label="@string/title_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
Bu intent filtresi, uygulamanızın veri kullanımını kontrol eden etkinliğin bu olduğunu sisteme gösterir. Bu nedenle, kullanıcı Ayarlar uygulamasından uygulamanızın ne kadar veri kullandığını kontrol ettiğinde, tercih etkinliğinizi başlatan bir "Uygulama ayarlarını görüntüle" düğmesi gösterilir. Böylece kullanıcı, uygulamanızın ne kadar veri kullandığını hassaslaştırabilir.
Ayrıca getBackgroundDataSetting()
öğesinin artık şu anda
desteği sonlandırıldı ve her zaman doğru değerini döndürüyor. Bunun yerine getActiveNetworkInfo()
değerini kullanın. Herhangi bir ağ işlemine başlamadan önce, mevcut ağı temsil eden NetworkInfo
değerini almak için her zaman getActiveNetworkInfo()
işlevini çağırmalı ve cihazın bağlantısı olup olmadığını kontrol etmek için isConnected()
işlevini sorgulamalısınız. Ardından, cihazın diğer bağlantı özelliklerini (ör. cihazın
dolaşımdayken veya kablosuz ağa bağlı olduğundan emin olun.
Kurumsal
Android 4.0 aşağıdaki özelliklerle kurumsal uygulama yeteneklerini genişletir.
VPN hizmetleri
Yeni VpnService
, uygulamaların kendi VPN'sini (Sanal
Özel Ağ) Service
olarak çalışır. VPN hizmeti, kendi adresi ve yönlendirme kurallarına sahip bir sanal ağ için bir arayüz oluşturur ve tüm okuma ve yazma işlemlerini bir dosya tanımlayıcısı ile gerçekleştirir.
Bir VPN hizmeti oluşturmak için VpnService.Builder
kullanarak bir VPN hizmeti oluşturun.
ağ adresi, DNS sunucusu, ağ rotası ve daha fazlası. İşlem tamamlandığında establish()
çağrısı yaparak arayüzü oluşturabilirsiniz. Bu çağrı, bir ParcelFileDescriptor
döndürür.
Bir VPN hizmeti paketlere müdahale edebildiğinden güvenlik sorunları vardır. Dolayısıyla,
VpnService
uygulamak durumunda, hizmetinizin yalnızca sistemin bağlanabildiğinden emin olmak için BIND_VPN_SERVICE
yönergesini zorunlu tutması gerekir (yalnızca
sisteme bu izin verilir, uygulamalar bu izni isteyemez). Daha sonra VPN hizmetinizi kullanmak için
Kullanıcıların sistem ayarlarında bunu manuel olarak etkinleştirmesi gerekir.
Cihaz politikaları
Cihaz kısıtlamalarını yöneten uygulamalar artık setCameraDisabled()
ve USES_POLICY_DISABLE_CAMERA
mülkünü (politika yapılandırma dosyasında bir <disable-camera />
öğesiyle uygulanır) kullanarak kamerayı devre dışı bırakabilir.
Sertifika yönetimi
Yeni KeyChain
sınıfı, içe aktarma ve erişim için API'ler sunar.
anahtar deposunda bulunan sertifika programıdır. Sertifikalar hem istemcinin hem de istemcinin
sertifikaları (kullanıcının kimliğini doğrulamak için) ve sertifika yetkilisi sertifikalarını (kullanıcının kimliğini
sunucu kimliğini doğrulayın). Web tarayıcıları veya e-posta istemcileri gibi uygulamalar, sunucularda kullanıcıların kimliğini doğrulamak için yüklü sertifikalara erişebilir. KeyChain
inceleyin.
dokümanlarına göz atabilirsiniz.
Cihaz Sensörleri
Android 4.0'a iki yeni sensör türü eklendi:
TYPE_AMBIENT_TEMPERATURE
: Sıcaklık sensörü santigrat cinsinden ortam (oda) sıcaklığı.TYPE_RELATIVE_HUMIDITY
: Bağıl ortam (oda) nemini yüzde olarak sağlayan bir nem sensörü.
Bir cihazda hem TYPE_AMBIENT_TEMPERATURE
hem de TYPE_RELATIVE_HUMIDITY
sensörü varsa çiy noktasını hesaplamak için bunları kullanabilirsiniz
mutlak nem gibi.
Önceki sıcaklık sensörü (TYPE_TEMPERATURE
)
desteği sonlandırıldı. TYPE_AMBIENT_TEMPERATURE
sensörünü kullanmalısınız
.
Ayrıca Android'in üç sentetik sensörü de büyük ölçüde iyileştirildi. Bu sayede artık daha düşük gecikmeye ve daha akıcı çıkışa sahipler. Bu sensörler arasında yer çekimi sensörü (TYPE_GRAVITY
), dönme vektörü sensörü (TYPE_ROTATION_VECTOR
) ve doğrusal hızlanma sensörü (TYPE_LINEAR_ACCELERATION
) bulunur. Geliştirilmiş sensörler, çıktılarını iyileştirmek için jiroskop sensöründen yararlanır. Bu nedenle, bu sensörler yalnızca jiroskop bulunan cihazlarda görünür.
İşlem Çubuğu
ActionBar
, çeşitli yeni davranışları desteklemek için güncellendi. En sık
Daha da önemlisi, sistem aynı bilgisayarda işlem çubuğunun boyutunu ve yapılandırmasını da
kullanarak tüm ekran boyutlarında en iyi kullanıcı deneyimini sunun. Örneğin,
Ekran dar olduğunda (örneğin, cihaz dikey yönde olduğunda), işlem çubuğunun
gezinme sekmeleri "yığılmış çubukta" görünür. ana işlem çubuğunun hemen altında
görünür. Şunları yapabilirsiniz:
“Bölünmüş işlem çubuğunu” da etkinleştirin Bu sekme, tüm işlem öğelerini sayfanın alt kısmında
ekranın küçük bir kısmını kapsayabilir.
Bölünmüş işlem çubuğu
İşlem çubuğunuz birkaç işlem öğesi içeriyorsa bunların tümü dar ekrandaki işlem çubuğuna sığmaz. Bu nedenle sistem, bunların daha fazlasını taşma menüsüne yerleştirir. Ancak Android 4.0
"bölme işlem çubuğunu" etkinleştirmenize olanak tanır. ekranda daha fazla eylem öğesinin
ayrı bir çubuk kullanın. Bölünmüş işlem çubuğunu etkinleştirmek için android:uiOptions
öğesini "splitActionBarWhenNarrow"
ile birlikte
<application>
etiket veya
ayrı <activity>
etiketleri
manifest dosyanıza ekleyin. Bu seçenek etkinleştirildiğinde sistem, ekran dar olduğunda tüm işlem öğeleri için ekranın alt kısmına ek bir çubuk ekler (birincil işlem çubuğunda işlem öğesi görünmez).
ActionBar.Tab
API'leri tarafından sağlanan gezinme sekmelerini kullanmak istiyorsanız ancak üstte ana işlem çubuğuna ihtiyacınız yoksa (üstte yalnızca sekmelerin görünmesini istiyorsanız) yukarıda açıklandığı gibi bölünmüş işlem çubuğunu etkinleştirin ve işlem çubuğundaki uygulama simgesini devre dışı bırakmak için setDisplayShowHomeEnabled(false)
işlevini de çağırın. Ana işlem çubuğunda hiçbir şey kalmadığında,
kaybolur; geriye yalnızca üst kısımdaki gezinme sekmeleri ve
dokunun.
İşlem çubuğu stilleri
İşlem çubuğuna özel stil uygulamak istiyorsanız arka plan uygulamak için backgroundStacked
ve backgroundSplit
yeni stil özelliklerini kullanabilirsiniz
çizilebilir veya renklendirmeyi ayrı ayrı seçebilirsiniz. Bu stilleri şu adresten de ayarlayabilirsiniz:
setStackedBackgroundDrawable()
ve setSplitBackgroundDrawable()
ile çalışma zamanı.
İşlem sağlayıcı
Yeni ActionProvider
sınıfı, aşağıdakiler için özel bir işleyici oluşturmanızı sağlar:
yapılacak işler listesidir. İşlem sağlayıcı, ilişkilendirildiği her işlem öğesi için bir işlem görünümü, varsayılan işlem davranışı ve alt menü tanımlayabilir. Dinamik davranışlara (değişken işlem görünümü, varsayılan işlem veya alt menü gibi) sahip bir işlem öğesi oluşturmak istediğinizde, parçanızdaki veya etkinliğinizdeki çeşitli işlem öğesi dönüşümlerini işlemek yerine ActionProvider
'ü genişletmek, yeniden kullanılabilir bir bileşen oluşturmak için iyi bir çözümdür.
Örneğin, ShareActionProvider
, işlem çubuğundan "paylaş" işlemini kolaylaştıran ActionProvider
uzantısıdır. Bunun yerine
ACTION_SEND
amacını çağıran geleneksel işlem öğesini seçerseniz
İşleyen uygulamaların açılır listesiyle bir işlem görünümü sunmak için bu işlem sağlayıcıyı
ACTION_SEND
niyeti. Kullanıcı işlem için kullanılacak bir uygulama seçtiğinde ShareActionProvider
bu seçimi hatırlar ve ilgili uygulamayla paylaşıma daha hızlı erişmek için işlem görünümünde sunar.
Bir işlem öğesi için işlem sağlayıcı bildirmek isterseniz android:actionProviderClass
ekleyin
özelliğinin seçenekler menüsündeki <item>
öğesinde, işlemin sınıf adıyla birlikte
pekiştirir. Örnek:
<item android:id="@+id/menu_share" android:title="Share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" />
Etkinliğinizin onCreateOptionsMenu()
geri arama yönteminde, menü öğesinden işlem sağlayıcının bir örneğini alın ve amacı ayarlayın:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options, menu) val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider // Set the share intent of the share action provider. shareActionProvider?.setShareIntent(createShareIntent()) ... return super.onCreateOptionsMenu(menu) }
Java
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // Set the share intent of the share action provider. shareActionProvider.setShareIntent(createShareIntent()); ... return super.onCreateOptionsMenu(menu); }
ShareActionProvider
kullanılan bir örnek için ApiDemos'taki ActionBarShareActionProviderActivity öğesine bakın.
Daraltılabilir işlem görünümleri
İşlem görünümü sağlayan işlem öğeleri artık işlem görünümü durumları ile işlem görünümü durumları arasında
geleneksel işlem öğesi durumu. Daha önce yalnızca SearchView
destekleniyordu
daraltılabilir. Ancak artık istediğiniz işlem öğesi için bir işlem görünümü ekleyebilir ve
genişletilmiş durum (işlem görünümü görünür) ve daraltılmış durum (işlem öğesi
görünür).
İşlem görünümü içeren bir işlem öğesinin daraltılabilir olduğunu bildirmek için menünün XML dosyasında <item>
öğesinin android:showAsAction
özelliğine “collapseActionView"
işaretini ekleyin.
Bir işlem görünümü genişletilmiş ve daraltılmış arasında geçiş yaptığında geri çağırma almak için setOnActionExpandListener()
'yi çağırarak ilgili MenuItem
ile bir MenuItem.OnActionExpandListener
örneği kaydedin. Genellikle bunu onCreateOptionsMenu()
geri çağırma sırasında yapmanız gerekir.
Daraltılabilir işlem görünümünü kontrol etmek için ilgili MenuItem
üzerinde collapseActionView()
ve expandActionView()
işlevlerini çağırabilirsiniz.
Özel işlem görünümü oluştururken, görünüm genişletildiğinde ve daraltıldığında geri çağırma almak için yeni CollapsibleActionView
arayüzünü de uygulayabilirsiniz.
İşlem çubuğu için diğer API'ler
setHomeButtonEnabled()
aşağıdakileri belirtmenize olanak tanır: Simgenin/logonun ana sayfaya veya "yukarı" düğmesine gitmek için bir düğme gibi davranıp davranmadığı (şeklinde olması için "true" değerini girin) bir düğme).setIcon()
vesetLogo()
, işlem çubuğu simgesini veya logosunu çalışma zamanında tanımlamanıza olanak tanır.Fragment.setMenuVisibility()
, şunları etkinleştirmenize olanak tanır: veya parça tarafından tanımlanan seçenekler menüsü öğelerinin görünürlüğünü devre dışı bırakın. Bu, parçası etkinliğe eklendi ancak görünür değil. Bu nedenle menü öğeleri, gizlendi.FragmentManager.invalidateOptionsMenu()
. parça yaşam döngüsünün çeşitli durumları sırasında etkinlik seçenekleri menüsünü geçersiz kılmanıza olanak tanır.Activity
ile eşdeğer yöntemin kullanılmasının mümkün olmayabileceği durumlar.
Kullanıcı Arayüzü ve Görünümler
Android 4.0, çeşitli yeni görünümler ve diğer kullanıcı arayüzü bileşenleri sunar.
Izgara Düzeni
GridLayout
, alt görüntülemeleri dikdörtgen içine yerleştiren yeni bir görünüm grubudur
ızgara. TableLayout
işlevinin aksine GridLayout
,
hiyerarşisini kullanır ve yapı sağlamak için tablo satırları gibi ara görünümlerden yararlanmaz.
Bunun yerine, alt öğeler hangi satır ve sütunların yer alacağını belirtir (hücreler birden çok
satır ve/veya sütunlar) gösterilir ve varsayılan olarak tablodaki satır ve sütunlara sıralı olarak yerleştirilir.
GridLayout
yönü, sıralı alt öğelerin sıralı olarak yapılıp yapılmadığını
arka planlardan birine yerleştirilecektir. Alt öğeler arasındaki boşluk
Yeni Space
görünümünün örneklerini veya ilgili kenar boşluğu parametrelerini ayarlayarak
anlayabiliyoruz.
ApiDemos'a göz atın
GridLayout
kullanan örnekler için.
Doku Görünümü
TextureView
, şunun gibi bir içerik akışı göstermenize olanak tanıyan yeni bir görünümdür:
bir video veya OpenGL sahnesi olarak kullanın. SurfaceView
'e benzer olsa da TextureView
, ayrı bir pencere oluşturmak yerine normal bir görünüm gibi davranır. Bu nedenle, diğer tüm View
nesneleri gibi onu da kullanabilirsiniz. Örneğin, dönüşümler uygulayabilir, ViewPropertyAnimator
kullanarak animasyon ekleyebilir veya setAlpha()
ile opaklığını ayarlayabilirsiniz.
TextureView
işlevinin yalnızca donanım hızlandırmalı bir pencerede çalıştığını unutmayın.
Daha fazla bilgi için TextureView
belgelerine bakın.
Widget'ı değiştir
Yeni Switch
widget'ı iki durumlu bir açma/kapatma düğmesidir ve kullanıcıların tek bir öğeye sürüklenmesine olanak tanır
bir seçenek için iki durum arasında geçiş yapmak üzere iki durum arasında geçiş yapın.
Metni belirtmek için android:textOn
ve android:textOff
özelliklerini kullanabilirsiniz
açık ve kapalı ayarındayken anahtarda görünür. android:text
özelliği de
anahtarın yanına etiket yerleştirmenize olanak tanır.
Anahtarların kullanıldığı bir örnek için switches.xml düzen dosyasına bakın ve ilgili Geçişler etkinliği.
Pop-up menüler
Android 3.0, belirttiğiniz bir ana noktada (genellikle seçili öğenin bulunduğu noktada) pop-up olarak açılan kısa bağlama dayalı menüler oluşturmak için PopupMenu
'ü kullanıma sundu. Android 4.0'ın kapsamı
PopupMenu
, bazı faydalı özelliklere sahip:
- Artık bir pop-up menünün içeriğini,
inflate()
kullanarak bir XML menü kaynağından kolayca şişirerek menü kaynağı kimliğini iletebilirsiniz. - Artık menü kapatıldığında geri çağırma alan bir
PopupMenu.OnDismissListener
de oluşturabilirsiniz.
Tercihler
İki durumlu seçim seçeneği sunan tercihler için temel olarak yeni bir TwoStatePreference
soyut sınıf kullanılır. Yeni SwitchPreference
, TwoStatePreference
öğesinin bir uzantısıdır veSwitch
kullanıcıların ek bir
veya iletişim kutusunu seçin. Örneğin, Ayarlar uygulamasında kablosuz bağlantı ve Bluetooth ayarları için SwitchPreference
simgesi kullanılır.
Sistem temaları
Android 4.0'ı hedefleyen tüm uygulamalar için varsayılan tema (targetSdkVersion
veya
minSdkVersion
-
“14"
veya üzeri) artık
"cihaz varsayılanı" tema: Theme.DeviceDefault
. Bu,
koyu Holo teması veya söz konusu cihaz tarafından tanımlanan farklı bir koyu tema.
Android'in aynı sürümünü çalıştıran cihazlarda Theme.Holo
tema ailesinin değişmemesi garanti edilir. Theme.Holo
temalarından herhangi birini işlemlerinize açıkça uygularsanız bu temaların aynı platform sürümünün farklı cihazlarında karakterinin değişmeyeceğinden emin olabilirsiniz.
Uygulamanızın genel cihaz temasıyla uyumlu olmasını istiyorsanız (ör. farklı OEM'ler sistem için farklı varsayılan temalar sağladığında) Theme.DeviceDefault
ailesindeki temaları açıkça uygulamanız gerekir.
Seçenekler menüsü düğmesi
Android 4.0'dan itibaren, cep telefonlarında artık Menü donanım düğmesine ihtiyaç duyulmadığını fark edeceksiniz. Ancak, mevcut uygulamanız bir seçenek menüsü sunuyorsa ve bir güncellemenin olmasını bekliyorsa, bu konuda endişelenmenize gerek yoktur Menü düğmesi. Mevcut uygulamaların beklendiği gibi çalışmaya devam etmesini sağlamak için sistem, Android'in eski sürümleri için tasarlanmış uygulamalara ilişkin ekrandaki Menü düğmesi.
En iyi kullanıcı deneyimi için, yeni ve güncellenmiş uygulamalarda menü öğelerine erişim izni vermek üzere ActionBar
kullanılmalı ve targetSdkVersion
şuna ayarlanmalıdır:
"14"
gibi en yeni çerçeve varsayılan davranışlarından yararlanabilirsiniz.
Sistem kullanıcı arayüzü görünürlüğüyle ilgili kontroller
Android'in kullanıma sunulduğu ilk günlerden beri sistem, Android'de durum çubuğu, operatör gibi bilgileri sağlamak için telefon cihazlarının üst kısmında bulunur sinyal, saat, bildirimler vb. Android 3.0, tablet cihazlar için sistem çubuğu ekledi. Bu çubuk, sistem gezinme kontrolleri (Ana Sayfa, Geri vb.) sağlamak için ekranın alt kısmında bulunur ve geleneksel olarak durum çubuğu tarafından sağlanan öğeler için bir arayüz sunar. Android 4.0'ta sistem, gezinme çubuğu adı verilen yeni bir sistem kullanıcı arayüzü sağlar. Siz gezinme çubuğunu, sistem çubuğunun yeniden ayarlanmış bir sürümü olarak mobil cihazlar - gezinme denetimleri sağlar cihazlar için sistemde gezinmeye yönelik donanım eşdeğerlerine sahip olmayan ancak Android'i kontrol edebilirsiniz. Bu nedenle, gezinme çubuğu sunan bir cihazda üstte durum çubuğu da bulunur.
Bugüne kadar, FLAG_FULLSCREEN
işaretini kullanarak mobil cihazlarda durum çubuğunu gizleyebilirsiniz. Android 4.0'ta, sistem çubuğunun görünürlüğünü kontrol eden API'ler hem sistem çubuğunun hem de gezinme çubuğunun davranışını daha iyi yansıtacak şekilde güncellendi:
SYSTEM_UI_FLAG_LOW_PROFILE
işareti,STATUS_BAR_HIDDEN
işaretinin yerini alır. Bu işaret ayarlandığında sistem çubuğu veya gezinme çubuğu için "düşük profil" modu etkinleştirilir. Gezinme düğmeleri kararır ve sistem çubuğundaki diğer öğeler de gizlenir. Bu özelliği etkinleştirmek, sistem gezinme düğmelerinin dikkat dağıtmasını önleyerek daha sürükleyici oyunlar oluşturmanıza yardımcı olur.SYSTEM_UI_FLAG_VISIBLE
işareti, sistem çubuğunun veya gezinme çubuğunun görünür olmasını istemek içinSTATUS_BAR_VISIBLE
işaretinin yerini alır.SYSTEM_UI_FLAG_HIDE_NAVIGATION
, istenen yeni bir işarettir tamamen gizlenir. Bunun yalnızca gezinme çubuğu için çalıştığını unutmayın (tabletlerdeki sistem çubuğunu gizlemez). Gezinme sistem kullanıcı girişini alır almaz çubuğu görünüme geri döner. Bu nedenle, bu mod birincil olarak video oynatma veya tüm ekranın gerekli olduğu, ancak kullanıcı girişinin olduğu diğer durumlarda gerekmez.
Etkinliğinizdeki herhangi bir görünümde setSystemUiVisibility()
çağrısı yaparak bu işaretlerin her birini sistem çubuğu ve gezinme çubuğu için ayarlayabilirsiniz. Pencere yöneticisi, pencerenizdeki tüm görünümlerdeki tüm işaretleri birleştirir (VEYA birlikte) ve pencerenizde giriş odağı olduğu sürece bunları sistem kullanıcı arayüzüne uygular. Pencerenizde giriş olmadığında
odaklanılırsa (kullanıcı uygulamanızdan ayrılırsa veya bir iletişim kutusu görüntülenirse) işaretlemelerinizin geçerliliğini yitirmesi gerekir.
Benzer şekilde, bu görünümleri görünüm hiyerarşisinden kaldırırsanız işaretleri artık geçerli olmaz.
Etkinliğinizdeki diğer etkinlikleri, sistem arayüzünde yapılan görünürlük değişiklikleriyle (
kullanıcı arayüzü gizlendiğinde işlem çubuğunu veya diğer kullanıcı arayüzü kontrollerini gizlemek için bir
View.OnSystemUiVisibilityChangeListener
görünür olduğunda bilgilendirileceksiniz
veya gezinme çubuğundaki değişikliklerin özetini görebilirsiniz.
Farklı sistem kullanıcı arayüzü seçeneklerinin gösterildiği OverscanActivity sınıfına bakın.
Giriş Çerçevesi
Android 4.0, fareyle üzerine gelme etkinlikleri, yeni ekran kalemi ve fare düğmesi etkinlikleri için destek sağlar.
Fareyle öğelerin üzerine gelerek yapılan etkinlikler
View
sınıfı artık işaretçi cihazlar (fare veya ekranda imleci hareket ettiren diğer cihazlar gibi) kullanılarak daha zengin etkileşimler sağlamak için "fareyle üzerine gelme" etkinliklerini destekliyor.
Bir görünümde fareyle üzerine gelme etkinliklerini almak için View.OnHoverListener
ve
setOnHoverListener()
ile kaydettirin. Görüntüleme sırasında fareyle üzerine gelme etkinliği gerçekleştiğinde dinleyiciniz, etkinliği alan View
öğesini ve gerçekleşen fareyle üzerine gelme etkinliğinin türünü açıklayan bir MotionEvent
öğesini sağlayan onHover()
çağrısı alır. Fareyle üzerine gelme etkinliği aşağıdakilerden biri olabilir:
Fareyle üzerine gelme etkinliğini ele alıyorsa View.OnHoverListener
, onHover()
'ten true değerini döndürmelidir. Dinleyiciniz yanlış döndürürse fareyle üzerine gelme etkinliği her zamanki gibi üst görünüme gönderilir.
Uygulamanızda, görünümünü mevcut duruma göre değiştiren düğmeler veya başka widget'lar kullanılıyorsa artık imleç görünümün üzerine geldiğinde farklı bir arka plan çizilebilir öğesi sağlamak için durum listesi çizilebilir öğesinde android:state_hovered
özelliğini kullanabilirsiniz.
Yeni fareyle üzerine gelme etkinliklerinin bir demosu için Fover sınıfına bakın ApiDemos.
Ekran kalemi ve fare düğmesi etkinlikleri
Android artık dijitalleştirici gibi bir ekran kalemi giriş cihazından giriş almak için API'ler sağlıyor. tablet çevre birimi veya ekran kalemi özellikli dokunmatik ekran.
Ekran kalemi girişi, dokunmatik veya fare girişine benzer şekilde çalışır. Dokunmatik kalem sayısallaştırıcıyla temas halindeyken uygulamalar, ekrana dokunmak için parmak kullanıldığında olduğu gibi dokunma etkinlikleri alır. Ekran kalemi dijitalleştiricinin üzerine geldiğinde uygulamalar fareyle üzerine gelindiğinde Etkinlikleri, herhangi bir düğme yokken fare işaretçisi ekranda hareket ettirildiğinde olduğu gibi tuşuna basıldığından emin olun.
Uygulamanız,
"araç türü" getToolType()
kullanılarak MotionEvent
içindeki her bir işaretçiyle ilişkilendirilmiştir. Şu anda tanımlı olan araç türleri şunlardır: TOOL_TYPE_UNKNOWN
, TOOL_TYPE_FINGER
,
TOOL_TYPE_MOUSE
, TOOL_TYPE_STYLUS
,
ve TOOL_TYPE_ERASER
. Uygulamanız, araç türünü sorguladığında ekran kalemi girişini parmak veya fare girişinden farklı şekillerde işlemeyi seçebilir.
Uygulamanız ayrıca "düğmesini" sorgulayarak hangi fare veya ekran kalemi düğmelerine basıldığını da
durum" getButtonState()
kullanan bir MotionEvent
. Şu anda tanımlanmış düğme durumları şunlardır: BUTTON_PRIMARY
, BUTTON_SECONDARY
, BUTTON_TERTIARY
, BUTTON_BACK
ve BUTTON_FORWARD
. Kolaylık sağlamak için geri ve ileri fare düğmeleri otomatik olarak KEYCODE_BACK
ve KEYCODE_FORWARD
tuşlarıyla eşlenir. Uygulamanız, fare düğmesine dayalı geri ve ileri gezinmeyi desteklemek için bu tuşları işleyebilir.
Temasın konumunu ve basıncını hassas bir şekilde ölçmenin yanı sıra ekran kalemi girişi
cihazlar, ekran kalemi ucu ile dijitalleştirici arasındaki mesafeyi, ekran kaleminin yatırma açısını ve
ve ekran kalemi yön açısı. Uygulamanız, AXIS_DISTANCE
, AXIS_TILT
ve AXIS_ORIENTATION
eksen kodlarıyla getAxisValue()
kullanarak bu bilgileri sorgulayabilir.
Araç türlerinin, düğme durumlarının ve yeni eksen kodlarının demosu için bkz. Dokunmatik Boya sınıfına girer.
Özellikler
Yeni Property
sınıfı, herhangi bir nesnede bir mülkü belirtmenin hızlı, verimli ve kolay bir yolunu sunar. Bu yol, arayanların hedef nesnelerde değerleri genel olarak ayarlamalarına/almasına olanak tanır. Aynı zamanda
Alan/yöntem referanslarının üzerinden geçme işlevine olanak tanır ve kodun değer ayarlamasına/almasına olanak tanır
bilmeden bir mülkle uyumlu hale getirmeyi amaçlıyoruz.
Örneğin, foo
nesnesindeki bar
alanının değerini ayarlamak için
şunları yapmıştı:
Kotlin
foo.bar = value
Java
foo.bar = value;
Temel bir özel alan bar
için ayarlayıcıyı çağırmak istiyorsanız daha önce bunu yapardınız:
Kotlin
foo.setBar(value)
Java
foo.setBar(value);
Ancak foo
örneğini iletmek ve başka bir kodun bar
değerini ayarlamasını istiyorsanız Android 4.0'tan önce bunu yapmanın bir yolu yoktur.
Property
sınıfını kullanarak bir Property
tanımlayabilirsiniz.
Foo
sınıfındaki BAR
nesnesini görüntüler. Böylece alanı, foo
örneğindeki alanı ayarlayabilirsiniz.
Foo
sınıfı şuna benzer:
Kotlin
BAR.set(foo, value)
Java
BAR.set(foo, value);
View
sınıfı artık Android 3.0'a eklenen dönüştürme özellikleri (ROTATION
, ROTATION_X
, TRANSLATION_X
vb.) gibi çeşitli alanları ayarlamanıza olanak tanımak için Property
sınıfından yararlanıyor.
ObjectAnimator
sınıfı da Property
alanını kullanır.
sınıfını kullanmak için, dizeye göre daha hızlı, daha verimli ve tür açısından daha güvenli olan Property
içeren bir ObjectAnimator
oluşturabilirsiniz.
bahsedeceğiz.
Donanım Hızlandırma
Android 4.0 sürümünden itibaren,
uygulaması targetSdkVersion
veya
minSdkVersion
-
“14"
veya daha yüksek. Donanım hızlandırma genellikle daha akıcı animasyonlar sağlar.
ve genel olarak daha iyi performans
ve kullanıcı etkileşimine yanıt sağlar.
Gerekirse hardwareAccelerated
ile donanım hızlandırmayı manuel olarak devre dışı bırakabilirsiniz
bağımsız <activity>
öğeleri veya <application>
için özelliği
öğesine dokunun. Alternatif olarak, setLayerType(LAYER_TYPE_SOFTWARE)
öğesini çağırarak donanım hızlandırmayı tek tek görünümler için devre dışı bırakabilirsiniz.
Desteklenmeyen çizim işlemlerinin listesi de dahil olmak üzere donanım hızlandırması hakkında daha fazla bilgi için Donanım Hızlandırması belgesine bakın.
JNI Değişiklikleri
Android'in önceki sürümlerinde JNI yerel referansları dolaylı tutamak değildi; Android doğrudan işaretçiler kullanıyordu. Çöp toplayıcı nesneleri hareket ettirmediği sürece bu sorun işe yarıyormuş gibi görünüyordu, çünkü hatalı kod yazmayı mümkün kılıyordu. Android 4.0'da sistem artık dolaylı referanslar da alabilir.
JNI yerel referanslarıyla ilgili tüm ayrıntılar "Yerel ve Küresel Referanslar" bölümünde açıklanmıştır. JNI İpuçları'na bakın. Android 4.0'da, CheckJNI, bu hataları algılayacak şekilde geliştirilmiştir. Yakında yayınlanacak bir gönderi için Android Geliştiricileri Blogu'nu izleyin JNI referanslarında sık karşılaşılan hatalar ve bunları nasıl düzeltebileceğiniz hakkında daha fazla bilgi edinin.
JNI uygulamasındaki bu değişiklik yalnızca
targetSdkVersion
veya minSdkVersion
- “14"
veya daha yüksek. Bu özellikleri daha düşük bir değere ayarlarsanız JNI yerel referansları önceki sürümlerdekiyle aynı şekilde çalışır.
WebKit
- WebKit 534.30 sürümüne güncellendi
WebView
ve yerleşik tarayıcıda Hint yazı tipleri (glifleri birleştirmek için gereken karmaşık karakter desteği dahil olmak üzere Devanagari, Bengalce ve Tamil) için destekWebView
ve yerleşik tarayıcıda Etiyopya, Gürcüce ve Ermenice yazı tipleri için destek- WebDriver desteği,
WebView
Android Tarayıcı
Tarayıcı uygulaması, web uygulamalarını desteklemek için aşağıdaki özellikleri ekler:
- Daha hızlı performans için güncellenmiş V8 JavaScript derleyicisi
- Ayrıca Android 3.0'dan aktarılan diğer önemli geliştirmeler artık cep telefonlarında kullanılabilir:
- Tüm sayfalarda sabit konum öğeleri desteği
- HTML medya yakalama
- Cihaz yönü etkinlikleri
- CSS 3D dönüşümleri
İzinler
Yeni izinler şunlardır:
ADD_VOICEMAIL
: Sesli mesaj hizmetinin sesli mesaj eklemesine olanak tanır gönderebilir.BIND_TEXT_SERVICE
:SpellCheckerService
özelliğini uygulayan bir hizmet, kendisi için bu izni istemelidir.BIND_VPN_SERVICE
:VpnService
özelliğini uygulayan bir hizmet, kendisi için bu izni istemelidir.- 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 ağ kullandığını belirtir.
Android 4.0'daki (API Düzeyi) tüm API değişikliklerinin ayrıntılı görünümü için 14) API Farklılıkları Raporu'na bakın.
Önceki API'ler
Yukarıdaki her şeye ek olarak, Android 4.0 önceki sürümlerdeki tüm API'leri doğal olarak destekler. Android 3.x platformu yalnızca büyük ekranlı cihazlarda kullanılabildiğinden, öncelikle cep telefonları için geliştirme yapıyorsanız son sürümlerde Android'e eklenen tüm API'lerden haberdar olmayabilirsiniz.
Atlamış olabileceğiniz ve artık cep telefonlarında da kullanılabilen en önemli API'lerden bazılarına göz atın:
- Android 3.0
-
Fragment
: Bir etkinliğin farklı öğelerini, kendi kullanıcı arayüzlerini ve yaşam döngülerini tanımlayan bağımsız modüllere ayırmanıza olanak tanıyan bir çerçeve bileşeni. Bkz. Parçalar geliştirici kılavuzu.ActionBar
: Ekranın üst kısmındaki geleneksel başlık çubuğunun yerini alan işlem penceresi açılır. Sol köşede uygulama logosunu içerir ve yeni bir menü öğeleri arayüzü. Bkz. İşlem Çubuğu geliştirici kılavuzu.Loader
: Eşzamansız özelliği kolaylaştıran bir çerçeve bileşeni JavaScript'i engellemeden verileri dinamik olarak yüklemek için kullanıcı arayüzü bileşenleriyle birlikte ana ileti dizisidir. Yükleyiciler geliştirici kılavuzuna bakın.- Sistem panosu: Uygulamalar, sistem genelindeki panosuna veri (yalnızca metin dışında) kopyalayıp yapıştırabilir. Kırpılan veriler düz metin, URI veya intent olabilir. Kopyala ve Yapıştır geliştirici kılavuzuna bakın.
- Sürükle ve bırak: Görüntü çerçevesine yerleştirilmiş ve sürükle ve bırak işlemlerini kolaylaştıran bir API grubu. Bkz. Sürükle ve Bırak geliştirici kılavuzu.
- Yepyeni ve esnek bir animasyon çerçevesi, herhangi bir nesnenin (Görünüm, Çizimlenebilir, Kırıntı, Nesne veya başka bir şey) rastgele özelliklerini canlandırmanıza ve süre, kesme, tekrarlama gibi animasyon özelliklerini tanımlamanıza olanak tanır. Yeni çerçeve, Android'de Animasyonlar'ı sağlar hiç olmadığı kadar kolay hale geldi. Bkz. Mülk Animasyonu geliştiricisi rehberini inceleyin.
- RenderScript grafik ve işlem motoru: RenderScript, yüksek performanslı bir 3D sunar C (C99 standardı) dilinde yazdığınız yerel düzeyde grafik oluşturma ve hesaplama API'si hem yerel ortamdan beklediğiniz performansı sunarken hem de taşınabilir ve GPU'larda kullanılıyor. Bkz. RenderScript geliştiricisi rehberini inceleyin.
- Donanım hızlandırmalı 2D grafikler: Artık manifest öğenizin
<application>
öğesinde veya tek tek<activity>
öğelerinde {android:hardwareAccelerated="true"} ayarını yaparak uygulamanız için OpenGL oluşturma aracını etkinleştirebilirsiniz. Bu sonuç daha akıcı animasyonlar, daha yumuşak kaydırma ve genel olarak daha iyi performans ve kullanıcıya yanıt bahsedeceğim.Not: Uygulamanızın
minSdkVersion
veyatargetSdkVersion
değerini"14"
veya daha yüksek bir değere ayarlarsanız donanım hızlandırma varsayılan olarak etkinleştirilir. - Ve çok, çok daha fazlası. Android 3.0 Platformu'na bakın notlarına bakın.
- Android 3.1
-
- USB API'leri: Bağlı çevre birimlerini Android uygulamalarıyla entegre etmek için güçlü yeni API'ler. API'ler, hem USB ana makine hem de cihaz etkileşimleri için destek de dahil olmak üzere platforma yerleştirilmiş bir USB yığınını ve hizmetlerini temel alır. USB Ana Makine ve Aksesuar geliştirici kılavuzunu inceleyin.
- MTP/PTP API'leri: Uygulamalar, bağlı kameralar ve diğer PTP cihazlarıyla doğrudan etkileşime geçerek cihazlar bağlandığında ve cihazlar kaldırıldığında bildirim alabilir, bu cihazlardaki dosyaları ve depolama alanını yönetebilir, ayrıca bu cihazlara dosya ve meta veri aktarabilir. MTP API, MTP (Medya Aktarım Protokolü) spesifikasyonunun PTP (Resim Aktarım Protokolü) alt kümesini uygular. Bkz.
android.mtp
belgeleri. - RTP API'leri: Android, bir API'yi yerleşik RTP (Gerçek Zamanlı Aktarım Protokolü) yığınına sunar.
hangi uygulamaların isteğe bağlı veya etkileşimli veri akışını yönetmek için kullanabileceğini belirler. Özellikle, uygulamalar
VOIP, bas ve konuş, konferans ve ses akışı gibi özelliklere sahip olan başka yayıncılarla çalışmaya başlamak için
mevcut bir ağ üzerinden veri akışı alıp
alma adımını gerçekleştirebilir.
android.net.rtp
dokümanlarına bakın. - Kontrol çubuğu ve diğer genel hareket girişleri için destek.
- Android 3.1 Platformu'na bakın notlarına göz atmanızı öneririm.
- Android 3.2
-
- Yeni ekranlar, uygulamalarınızın farklı ekran boyutlarında nasıl gösterileceği konusunda size daha fazla kontrol sağlayan API'leri destekler. API, mevcut ekran desteği modelini belirli ekran boyutu aralıklarını, boyutlara göre hassas bir şekilde hedefleme olanağı, genelleştirilmiş piksel birimleri yerine (600 dp veya 720 dp genişlik gibi) yoğunluktan bağımsız piksel birimleri ekran boyutları (büyük veya x büyük gibi). Örneğin, bu bilgi, geleneksel olarak "büyük" ekran olarak sınıflandırılan 5 inçlik bir cihaz ile 7 inçlik bir cihazı ayırt etmenize yardımcı olur. başlıklı blog yayınına bakın Ekran Boyutlarını Yönetmek İçin Yeni Araçlar.
<uses-feature>
için yeni sabit değerler yatay veya dikey ekran yönü gereksinimlerinizi tanımlamalısınız.- Cihazın "ekran boyutu" Ekran yönü sırasında yapılandırma artık değişiyor
unutmayın. Uygulamanız API düzeyi 13 veya üstünü hedefliyorsa
"orientation"
yapılandırma değişikliğini de yapmak istiyorsanız"screenSize"
yapılandırma değişikliğini yapmanız gerekir. Görüntüleyin Daha fazla bilgi içinandroid:configChanges
. - Diğer yeni API'ler için Android 3.2 Platform notlarına bakın.
API düzeyi
Android 4.0 API'ye, sistemde depolanan bir tam sayı tanımlayıcı (14) atanır. "API düzeyi" olarak adlandırılan bu tanımlayıcı, sistemin uygulamayı yüklemeden önce uygulamanın sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.
Android 4.0'ta kullanıma sunulan API'leri uygulamanızda kullanmak için uygulamayı API düzeyi 14 veya üstünü destekleyen bir Android platformu için derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, bir veya daha fazla
android:minSdkVersion="14"
özelliğini
<uses-sdk>
öğesine dokunun.
Daha fazla bilgi için API nedir? Düzey mi?