Android 3.1 API'leri

API Düzeyi: 12

Geliştiriciler, Android 3.1 platformu (HONEYCOMB_MR1), Android SDK için indirilebilir bir bileşen olarak bulunur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazlası yer alır. İndirilebilir platformda harici kitaplık yoktur.

Geliştiriciler açısından Android 3.1 platformu, Android SDK'sı için indirilebilir bir bileşen olarak mevcuttur. İndirilebilir platformda bir Android kitaplığı ve sistem görüntüsünün yanı sıra bir dizi emülatör görünümü ve daha fazlası yer alır. Android 3.1'e yönelik uygulama geliştirmeye veya test etmeye başlamak için Android SDK Manager'ı kullanarak platformu SDK'nıza indirin.

API'ye Genel Bakış

Aşağıdaki bölümlerde, önceki sürümden bu yana çerçeve API'sindeki yeni özellikler ve değişiklikler de dahil olmak üzere Android 3.1'deki geliştiriciler için sunulan yeniliklere teknik bir genel bakış sunulmaktadır.

USB API'leri

Android 3.1, bağlı çevre birimlerini platformda çalışan uygulamalarla entegre etmeye yönelik yeni ve güçlü API'ler sunar. API'ler, hem USB ana makinesi hem de cihaz etkileşimleri desteği de dahil olmak üzere, USB (Evrensel Seri Yol) yığınını ve platformda yerleşik olarak bulunan hizmetleri temel alır. Geliştiriciler, API'leri kullanarak USB üzerinden bağlı çeşitli cihaz türlerini keşfedebilen, iletişim kurabilen ve yönetebilen uygulamalar oluşturabilir.

Yığın ve API'ler, Android destekli cihazın ana makine olarak mı, yoksa harici donanımın ana makine olarak mı kullanıldığına bağlı olarak iki temel USB donanımı türünü ayırır:

  • USB cihaz, ana makine olarak işlev görecek Android destekli cihaza bağlı olan bir donanım parçasıdır. Örneğin, çoğu giriş cihazı, fare, kontrol çubuğu ve diğer pek çok kamera, hub ve benzeri cihazlar USB cihazıdır.
  • USB aksesuarı, USB ana makine denetleyicisine sahip olan, güç sağlayan ve USB üzerinden Android destekli cihazlarla iletişim kurmak için tasarlanmış bir bağlı donanım parçasıdır. Robot kumandalarından müzik ekipmanlarına, egzersiz bisikletlerine ve daha fazlasına kadar çeşitli çevre birimleri aksesuar olarak bağlanabilir.

Platformun USB API'leri, her iki türde (USB cihazları ve USB aksesuarları) için takıldığında veya çıkarıldığında amaca göre yayın yapmanın yanı sıra standart arayüzler, uç noktalar ve aktarım modları (kontrol, toplu ve kesme) desteklenmektedir.

USB API'leri android.hardware.usb paketinde mevcuttur. Merkezi sınıf, hem USB cihazlarını hem de USB aksesuarlarını tanımlama ve bunlarla iletişim kurma için yardımcı yöntemler sağlayan UsbManager'dir. Uygulamalar UsbManager öğesinin bir örneğini alıp daha sonra bağlı cihazların veya aksesuarların listesini sorgulayıp bunlarla iletişim kurabilir ya da bunları yönetebilir. UsbManager, bir USB cihazı veya aksesuarı takıldığında ya da çıkarıldığında haberdar etmek için sistemin yayınladığı intent işlemlerini de açıklar.

Diğer sınıflar şunlardır:

  • UsbDevice, USB cihazı olarak bağlanan harici donanımları temsil eden bir sınıftır (Android destekli cihaz ana makine olarak görev yapar).
  • UsbAccessory, USB ana makinesi olarak bağlı harici donanımı (Android destekli cihaz USB cihazı olarak işlev görür) temsil eder.
  • Bir cihazın standart USB arayüzlerine ve uç noktalarına erişim sağlayan UsbInterface ve UsbEndpoint.
  • USB cihaza veri gönderip almak ve mesajları eşzamanlı ve eşzamansız olarak kontrol etmek için UsbDeviceConnection ve UsbRequest.
  • UsbConstants. Uç nokta türleri, cihaz sınıfları vb. bildirmek için sabit değerler sağlar.

USB yığını platforma yerleştirilmiş olsa da belirli cihazlarda USB ana makinesi ve açık aksesuar modlarına yönelik gerçek desteğin üreticileri tarafından belirlendiğini unutmayın. Özellikle ana makine modu, Android destekli cihazdaki uygun USB denetleyici donanımını kullanır.

Ayrıca geliştiriciler, Google Play'de uygulamalarının uygun USB desteği sağlamayan kullanıcılara sunulmayacak şekilde filtrelenmesi için talepte bulunabilirler. Filtreleme isteğinde bulunmak için aşağıdaki öğelerden birini veya her ikisini uygulama manifest dosyasına uygun şekilde ekleyin:

  • Uygulamanın yalnızca USB ana makine modunu (USB cihaz bağlantısı) destekleyen cihazlar tarafından görülebilmesi gerekiyorsa bu öğeyi belirtin:

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • Uygulamanın yalnızca USB aksesuarlarını (USB ana makinelerinin bağlantısı) destekleyen cihazlara görünür olması gerekiyorsa bu öğeyi belirtin:

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

USB aksesuarlarıyla etkileşim kuran uygulamaların nasıl geliştirileceği hakkında ayrıntılı bilgi için lütfen geliştirici belgelerine bakın.

USB sunucu API'sini kullanan örnek uygulamalara göz atmak için ADB Testi ve Füze Başlatıcı bölümlerine bakın

MTP/PTP API'sı

Android 3.1, uygulamaların doğrudan bağlı kameralarla ve diğer PTP cihazlarıyla etkileşim kurmasına olanak tanıyan yeni bir MTP API'sini kullanıma sunuyor. Yeni API, uygulamaların cihaz takılıp kaldırıldığında bildirim almasını, bu cihazlardaki dosyaları ve depolama alanını yönetmesini, bu cihazlardaki dosya ve meta verileri aktarmasını kolaylaştırır. MTP API, MTP (Medya Aktarım Protokolü) spesifikasyonunun PTP (Resim Aktarım Protokolü) alt kümesini uygular.

MTP API, android.mtp paketinde mevcuttur ve şu sınıfları sağlar:

  • MtpDevice, USB ana veri yolu üzerinden bağlanan bir MTP cihazını içerir. Bir uygulama bu tür bir nesneyi örnekleyebilir ve ardından cihaz ve cihazda depolanan nesneler hakkında bilgi almanın yanı sıra bağlantıyı açmak ve veri aktarmak için bu nesnenin yöntemlerini kullanabilir. Yöntemlerden bazıları şunlardır:
    • getObjectHandles(), cihazdaki tüm nesneler için belirtilen biçim ve üst öğeyle eşleşen tutma yerlerinin listesini döndürür. Uygulama, bir nesne hakkında bilgi almak için bir tanıtıcıyı getObjectInfo() öğesine geçirebilir.
    • importFile(), bir uygulamanın bir nesneye ilişkin verileri harici depolama alanındaki bir dosyaya kopyalamasına izin verir. Bu çağrı, verilerin boyutuna ve cihazların hızına bağlı olarak rastgele bir süre için engellenebilir, bu nedenle ayrı bir iş parçacığından yapılmalıdır.
    • open() bir uygulamanın bağlı bir MTP/PTP cihazını açmasına izin verir.
    • getThumbnail(), nesnenin küçük resmini bayt dizisi olarak döndürür.
  • MtpStorageInfo, MTP cihazındaki bir depolama birimi hakkındaki bilgileri içerir. Bu bilgiler, MTP spesifikasyonunun 5.2.2 bölümünde açıklanan StorageInfo Veri Kümesine karşılık gelir. Sınıftaki yöntemler, bir uygulamanın depolama biriminin açıklama dizesini, boş alanı, maksimum depolama kapasitesini, depolama alanı kimliğini ve birim tanımlayıcısını almasını sağlar.
  • MtpDeviceInfo, MTP spesifikasyonunun 5.1.1 numaralı bölümünde açıklanan DeviceInfo Veri Kümesine karşılık gelen bir MTP cihazıyla ilgili bilgileri içerir. Sınıftaki yöntemler, uygulamaların cihazın üreticisini, modelini, seri numarasını ve sürümünü öğrenmesine olanak tanır.
  • MtpObjectInfo, MTP cihazında depolanan bir nesne hakkındaki bilgileri içerir. Bu bilgiler, MTP spesifikasyonunun 5.3.1 bölümünde açıklanan ObjectInfo Veri Kümesine karşılık gelir. Sınıftaki yöntemler, uygulamaların bir nesnenin boyutunu, veri biçimini, ilişkilendirme türünü, oluşturulma tarihini ve küçük resim bilgilerini almasını sağlar.
  • MtpConstants; MTP dosya biçimi kodlarını, ilişkilendirme türünü ve koruma durumunu belirtmek için sabit değerler sağlar.

Yeni giriş cihazları ve hareket etkinlikleri için destek

Android 3.1, giriş alt sistemini, tüm görünümlerde ve pencerelerde yeni giriş cihazlarını ve yeni hareket etkinliği türlerini destekleyecek şekilde genişletir. Geliştiriciler, kullanıcıların klavye ve dokunmatik ekranlara ek olarak fare, izleme topu, joystick, oyun kumandası ve diğer cihazları kullanarak uygulamalarıyla etkileşime girmesini sağlamak için bu özellikleri geliştirebilir.

Fare, kaydırma tekerleği ve iztopu girişlerini işlemek için platform iki yeni hareket etkinliği işlemini destekler:

  • ACTION_SCROLL bulunur. MotionEvent'te AXIS_HSCROLL ve AXIS_VSCROLL eksenlerinin değeri, göreli kaydırma hareketini belirtir.
  • ACTION_HOVER_MOVE, hiçbir düğmeye basılmadığında farenin mevcut konumunu ve son HOVER_MOVE etkinliğinden bu yana tüm ara noktaları bildirir. Fareyle üzerine gelerek giriş ve çıkış bildirimleri henüz desteklenmemektedir.

InputDevice sınıfı, joystick ve oyun kumandalarını desteklemek için şu yeni giriş cihazı kaynaklarını içerir:

Hem bu yeni kaynaklardaki hem de fare ve iztopu kaynaklı hareket etkinliklerini açıklamak için platform, KeyEvent üzerindeki temel kodları tanımlamaya benzer şekilde artık MotionEvent üzerinde eksen kodlarını tanımlıyor. Gezinme çubukları ve oyun denetleyicileri için yeni eksen kodları arasında AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE ve daha birçok kod bulunur. Mevcut MotionEvent eksenleri AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR ve AXIS_ORIENTATION ile temsil edilir.

Buna ek olarak MotionEvent, çerçeve belirli bir ekseni nasıl eşleyeceğini bilemediğinde kullanılan bir dizi genel eksen kodu tanımlar. Belirli cihazlar, uygulamalara özel hareket verilerini iletmek için genel eksen kodlarını kullanabilir. Eksenlerin ve amaçlanan yorumlamalarının tam listesi için MotionEvent sınıfı belgelerine bakın.

Platform, hareket etkinliklerini uygulamalara toplu olarak sağlar. Böylece tek bir etkinlik, mevcut bir konumu ve birden fazla sözde geçmiş hareketi içerebilir. Uygulamalar, geçmiş örneklerin sayısını almak için getHistorySize() kullanmalı ve ardından tüm geçmiş örnekleri getHistoricalAxisValue() kullanarak sırayla almalı ve işlemelidir. Ardından uygulamalar mevcut örneği getAxisValue() kullanarak işlemelidir.

Bazı eksenler özel erişimci yöntemleri kullanılarak alınabilir. Örneğin, uygulamalar getAxisValue() yerine getX() yöntemini çağırabilir. Yerleşik erişimcileri olan eksenler arasında AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR ve AXIS_ORIENTATION bulunmaktadır.

Her giriş cihazının sistem tarafından atanmış benzersiz bir kimliği vardır ve birden fazla kaynak sağlayabilir. Bir cihaz birden fazla kaynak sağladığında, birden fazla kaynak aynı ekseni kullanarak eksen verileri sağlayabilir. Örneğin, dokunma kaynağından gelen dokunma etkinliği ekran konumu verileri için X eksenini kullanırken, kontrol çubuğu kaynağından gelen bir kontrol çubuğu etkinliği çubuğun konumu için X eksenini kullanır. Bu nedenle, uygulamaların eksen değerlerini ait oldukları kaynağa göre yorumlamaları önemlidir. Uygulamalar, bir hareket etkinliğini işlerken bir cihaz veya kaynak tarafından desteklenen eksenleri belirlemek için InputDevice sınıfındaki yöntemleri kullanmalıdır. Spesifik olarak, uygulamalar bir cihazın tüm eksenlerini veya belirli bir cihaz kaynağının tüm eksenlerini sorgulamak için getMotionRanges() kullanabilir. Her iki durumda da InputDevice.MotionRange nesnesinde döndürülen eksenler için aralık bilgisi, her bir eksen değerinin kaynağını belirtir.

Son olarak, joystick, oyun kumandası, fare ve iztoplarından kaynaklanan hareket etkinlikleri dokunma etkinlikleri olmadığından, platform bunları bir View öğesine "genel" hareket etkinlikleri olarak geçirmek için yeni bir geri çağırma yöntemi ekler. Daha açık belirtecek olursak, dokunmatik olmayan hareket etkinliklerini onTouchEvent() yerine onGenericMotionEvent() çağrıları aracılığıyla View'lere bildirir.

Platform, genel hareket etkinliklerini etkinlik kaynak sınıfına bağlı olarak farklı şekilde dağıtır. SOURCE_CLASS_POINTER etkinlikleri, dokunma etkinliklerinin çalışmasına benzer şekilde, işaretçinin altındaki View öğesine gider. Diğer tüm etkinlikler, o sırada odaklanılan View öğesine gider. Örneğin bu, kontrol çubuğu etkinliklerini almak için View öğesinin odaklanması gerektiği anlamına gelir. Uygulamalar, gerekirse onGenericMotionEvent() etkinliklerini uygulayarak bu etkinlikleri Etkinlik veya İletişim Kutusu düzeyinde işleyebilir.

Kontrol çubuğu hareket etkinliklerini kullanan örnek bir uygulamaya bakmak için GameControllerInput ve GameView'a bakın.

RTP API'sı

Android 3.1, uygulamaların isteğe bağlı veya etkileşimli veri akışını yönetmek için kullanabileceği dahili RTP (Gerçek Zamanlı Aktarım Protokolü) yığınına bir API sunar. Özellikle VOIP, konuşarak konuş, konferans ve ses akışı sağlayan uygulamalar, bu API'yi oturum başlatmak ve mevcut herhangi bir ağ üzerinden veri akışı aktarmak ya da almak için kullanabilir.

RTP API, android.net.rtp paketinde mevcuttur. Sınıflar şunları içerir:

  • RtpStream, RTP üzerinden medya yükü içeren ağ paketlerini gönderen ve alan akışların temel sınıfıdır.
  • AudioStream, RTP üzerinden ses yükü taşıyan bir RtpStream alt sınıfıdır.
  • AudioGroup, cihazın hoparlörünü, mikrofonunu ve AudioStream cihazını yönetmek ve mikslemek için kullanılan yerel bir ses merkezidir.
  • AudioCodec, AudioStream için tanımladığınız codec'lerin koleksiyonunu içerir.

Bir uygulama, sesli konferans ve benzer kullanımları desteklemek amacıyla akış için uç nokta olarak iki sınıfı örneklendirir:

  • AudioStream, uzak uç noktayı belirtir ve ağ eşlemeden ve yapılandırılmış bir AudioCodec'dan oluşur.
  • AudioGroup, bir veya daha fazla AudioStream için yerel uç noktayı temsil eder. AudioGroup, tüm AudioStream öğelerini karıştırır ve isteğe bağlı olarak aynı anda cihazın hoparlörü ile mikrofonla etkileşime geçer.

En basit kullanım, tek bir uzak uç nokta ve yerel uç nokta içerir. Daha karmaşık kullanımlar için lütfen AudioGroup ile ilgili açıklanan sınırlamalara bakın.

RTP API'yi kullanmak için uygulamaların, manifest dosyalarında <uses-permission android:name="android.permission.INTERNET"> tanımlayarak kullanıcıdan izin istemesi gerekir. Cihaz mikrofonunu edinebilmek için <uses-permission android:name="android.permission.RECORD_AUDIO"> izni de gereklidir.

Yeniden boyutlandırılabilir uygulama widget'ları

Android 3.1 sürümünden başlayarak, geliştiriciler ana ekran widget'larını yatay, dikey veya her iki eksende yeniden boyutlandırabilirler. Kullanıcılar yeniden boyutlandırma tutamaçlarını görüntülemek için widget'a dokunup basılı tutar, ardından düzen ızgarasındaki boyutu değiştirmek için yatay ve/veya dikey tutamaçları sürükleyin.

Geliştiriciler, widget'ın AppWidgetProviderInfo meta verilerinde resizeMode özelliği tanımlayarak herhangi bir Ana ekran widget'ını yeniden boyutlandırabilir hale getirebilirler. resizeMode özelliğinin değerleri arasında "yatay", "dikey" ve "yok" bulunur. Bir widget'ı yatay ve dikey olarak yeniden boyutlandırılabilir olarak tanımlamak için "yatay|dikey" değerini girin.

Aşağıda bununla ilgili bir örnek verilmiştir:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

Ana ekran widget'ları hakkında daha fazla bilgi için Uygulama Widget'ları dokümanlarına bakın.

Animasyon çerçevesi

  • Yeni ViewPropertyAnimator sınıfı
    • Yeni ViewPropertyAnimator sınıfı, geliştiricilerin View nesnelerinde belirli özellikleri canlandırmaları için kolay bir yol sağlar. Sınıf, özelliklerin animasyonunu otomatikleştirip optimize eder ve bir View nesnesinde birden çok eşzamanlı animasyonu yönetmeyi kolaylaştırır.

      ViewPropertyAnimator kullanımı oldukça kolaydır. Bir View öğesinin özelliklerine animasyon eklemek için animate() yöntemini çağırarak bu View ile ilgili ViewPropertyAnimator nesnesi oluşturun. Hangi özelliğin canlandırılacağını ve nasıl canlandırılacağını belirtmek için ViewPropertyAnimator üzerindeki yöntemleri kullanın. Örneğin, View öğesini şeffaf hale getirmek için alpha(0); çağrısı yapın. ViewPropertyAnimator nesnesi, temel Animator sınıfını yapılandırma ve başlatma ile ilgili ayrıntıları işler, ardından animasyonu oluşturur.

  • Animasyon arka plan rengi
    • Yeni getBackgroundColor() ve setBackgroundColor(int) yöntemleri, yalnızca pencere animasyonları için animasyonların arkasındaki arka plan rengini belirlemenize/hazırlamanıza olanak tanır. Şu anda arka plan, istenen alfa düzeyinde siyah olmalıdır.
  • ViewAnimator kaynağından animasyonlu kesir alınıyor
    • Yeni getAnimatedFraction() yöntemi, mevcut animasyon kesirini (en son kare güncellemesinde kullanılan geçen/interpole edilen kesir) ValueAnimator öğesinden almanızı sağlar.

kullanıcı arayüzü çerçevesi

  • Bir katmanın zorla oluşturulması
    • Yeni buildLayer() yöntemi, uygulamaların bir Görünüm katmanının oluşturulmasını ve View katmanının hemen oluşturulmasını zorunlu kılmasını sağlar. Örneğin, bir uygulama, bir animasyona başlamadan önce katmanında Görünüm oluşturmak için bu yöntemi kullanabilir. Görünüm karmaşıksa, animasyonu başlatmadan önce görünümün katmanda oluşturulması, karelerin atlanmasını önler.
  • Kamera mesafesi
    • Uygulamalar, kamera ile Görünüm arasındaki mesafeyi ayarlamak için yeni bir setCameraDistance(float) yöntemi kullanabilir. Bu sayede uygulamalar, Görünümün 3D dönüşümleri üzerinde (ör. döndürmeler) gelişmiş kontrol sahibi olur.
  • Tarih Seçici'den takvim görünümü alma
  • Görüntülemeler kaldırıldığında geri arama alma
  • Parça içerik haritası işleyici, yeni onInflate() imzası
  • Arama sonucunu yeni sekmede göster
    • ACTION_WEB_SEARCH amaçları için EXTRA_NEW_SEARCH veri anahtarı, aramayı mevcut bir tarayıcı sekmesinde değil, yeni bir tarayıcı sekmesinde açmanıza olanak tanır.
  • Çekilebilir metin imleci
    • Artık yeni textCursorDrawable kaynak özelliğini kullanarak metin imleci olarak kullanılacak bir çekilebilir öğe belirtebilirsiniz.
  • Uzak görünümlerde gösterilen alt öğeyi ayarlama
  • Oyun kumandaları ve diğer giriş cihazları için genel anahtarlar
    • KeyEvent, oyun kumandası düğmelerine yer vermek için bir dizi genel anahtar kodu ekler. Sınıf, anahtar kodlarıyla çalışmak için isGamepadButton(int) ve diğer birçok yardımcı yöntemi de ekler.

Grafik

  • Bit eşlemleri yönetmeye yardımcı olan yardımcılar
    • setHasAlpha(boolean), bir uygulamanın, Bit Eşlem'deki tüm piksellerin opak (yanlış) olarak bilindiğini veya bazı piksellerin opak olmayan alfa değerleri (true) içerebileceğini (doğru) belirtmesini sağlar. Bu çağrı, bazı yapılandırmalarda (RGB_565 gibi) piksel başına alfa değerlerini desteklemediğinden yok sayılır. Bu, çizim ipucu olarak ifade edilir. Bazı durumlarda opak olduğu bilinen bir bit eşlem, piksel başına opak olmayan alfa değerleri içeren bir çizim durumundan daha hızlı bir çizim durumu alabilir.
    • getByteCount(), Bit eşlemin boyutunu bayt cinsinden alır.
    • getGenerationId(), uygulamanın önbelleğe alma gibi bir amaçla bir Bit Eşlem'in değiştirilip değiştirilmediğini öğrenmesine olanak tanır.
    • sameAs(android.graphics.Bitmap), belirli bir Bit Eşlem'in boyut, yapılandırma veya piksel verileri olarak mevcut Bit Eşlem'den farklı olup olmadığını belirler.
  • Kamera konumunu ve dönüşünü ayarlama

  • Yüksek performanslı kablosuz ağ kilidi
    • Yüksek performanslı yeni kablosuz ağ kilidi, uygulamaların cihaz ekranı kapalıyken bile yüksek performanslı kablosuz bağlantıları sürdürmesini sağlar. Uzun süre müzik, video veya ses akışı sağlayan uygulamalar, ekran kapalıyken bile akış performansını sağlamak için yüksek performanslı kablosuz ağ kilidini alabilir. Daha fazla güç kullandığından, uzun süreli aktif bağlantıya ihtiyaç duyulduğunda uygulamalar yüksek performanslı kablosuz bağlantıyı elde etmelidir.

      Yüksek performanslı bir kilit oluşturmak için createWifiLock() çağrısında kilit modu olarak WIFI_MODE_FULL_HIGH_PERF değerini geçirin.

  • Diğer trafik istatistikleri
    • Uygulamalar artık TrafficStats içinde yeni yöntemler kullanarak daha fazla ağ kullanımı türüyle ilgili istatistiklere erişebilir. Uygulamalar, belirli bir UID için UDP istatistiklerini, paket sayısını, TCP aktarma/alma yük baytlarını ve segmentlerini almak için bu yöntemleri kullanabilir.
  • SIP yetkilendirme kullanıcı adı
    • Uygulamalar artık getAuthUserName() ve setAuthUserName() adlı yeni yöntemleri kullanarak bir profil için SIP kimlik doğrulaması kullanıcı adını alabilir ve ayarlayabilir.

İndirme Yöneticisi

  • Tamamlanan indirmelerin işlenmesi
    • Uygulamalar artık kullanıcılara yalnızca işlem tamamlandığında bilgi veren indirme işlemleri başlatabilir. Uygulamalar bu tür indirmeleri başlatmak için bir istek nesnesinin setNotificationVisibility() yönteminde VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION iletir.
    • Yeni bir yöntem olan addCompletedDownload(), bir uygulamanın İndirilenler uygulaması tarafından yönetilebilmesi için İndirilenler veritabanına bir dosya eklemesine olanak tanır.
  • İndirilenleri boyuta göre sıralanmış olarak göster

IME çerçevesi

  • Bir giriş yönteminin ek değer anahtarını alma

Medya

  • Yeni ses yayını biçimleri
    • Medya çerçevesi, iyileştirilmiş ses akışı için ham ADTS AAC içeriği için yerleşik desteğin yanı sıra en yüksek kalitede (kayıpsız) sıkıştırılmış ses içeriği için FLAC ses desteği sunar. Daha fazla bilgi için Desteklenen Medya Biçimleri belgesine bakın.

Durdurulan uygulamalardaki başlatma kontrolleri

Sistemin paket yöneticisi, Android 3.1'den başlayarak durmuş durumdaki uygulamaları izler ve başlatmalarını arka plan işlemlerden ve diğer uygulamalardan kontrol etmek için bir araç sağlar.

Bir uygulamanın durduruldu durumunun Etkinlik'in durduruldu durumuyla aynı olmadığını unutmayın. Sistem, durdurulan bu iki durumu ayrı ayrı yönetir.

Platform, gönderenin Intent'in durdurulan uygulamada bileşenleri etkinleştirmesine izin verilip verilmeyeceğini belirtmesine olanak tanıyan iki yeni intent işareti tanımlar.

Bir intent'de bu işaretlerin hiçbiri ya da her ikisi de tanımlanmadığında varsayılan davranış, durdurulan uygulamaların filtrelerini olası hedefler listesine eklemektir.

Sistemin tüm yayın amaçlarına FLAG_EXCLUDE_STOPPED_PACKAGES öğesi eklediğini unutmayın. Arka plan hizmetlerinden gelen yayınların, durdurulmuş uygulamaların bileşenlerini yanlışlıkla veya gereksiz bir şekilde başlatmasını önlemek için bunu yapar. Bir arka plan hizmeti veya uygulaması, durdurulan uygulamaları etkinleştirmesine izin verilmesi gereken yayın amaçlarına FLAG_INCLUDE_STOPPED_PACKAGES işaretini ekleyerek bu davranışı geçersiz kılabilir.

Uygulamalar ilk kez yüklendiklerinde ancak henüz başlatılmadıklarında ve kullanıcı tarafından manuel olarak durdurulduklarında (Uygulamaları Yönet bölümünde) durdurulmuş durumda olurlar.

Uygulamanın ilk kez başlatılması ve yeni sürüme geçirilmesiyle ilgili bildirim

Platform, uygulamanın ilk kez başlatılmasıyla ilgili iyileştirilmiş bildirim ekler ve iki yeni intent işlemiyle yükseltme yapar:

  • ACTION_PACKAGE_FIRST_LAUNCH - Bir uygulama ilk kez başlatıldığında (durmuş durumdan ilk kez çıkarıldığında) uygulamanın yükleyici paketine gönderilir. Verilerde paketin adı yer alır.
  • ACTION_MY_PACKAGE_REPLACED - Uygulamayı güncellendiğini ve mevcut bir sürümün üzerine yeni bir sürümün yüklendiğini bildirir. Bu, yalnızca değiştirilen uygulamaya gönderilir. Ek veri içermez. Bildirimi almak için bu işlem için bir amaç filtresi tanımlayın. Intent'i kullanarak, uygulamanızın yeni sürüme geçirildikten sonra doğru şekilde çalışmaya tekrar başlamasına yardımcı olacak bir kodu tetikleyebilirsiniz.

    Bu niyet doğrudan uygulamaya gönderilir ancak bu yalnızca uygulama, başlatılmış durumdayken (durmuş durumda değil) yükseltilmişse yapılır.

Temel yardımcı programlar

  • LRU önbelleği
    • Yeni bir LruCache sınıfı, uygulamalarınızın verimli önbelleğe alma özelliğinden yararlanmasına olanak tanır. Uygulamalar bu sınıfı kullanarak ağdaki verileri hesaplamaya veya indirmeye harcanan süreyi kısaltabilir ve önbelleğe alınan veriler için makul bir bellek ayak izi sağlar.LruCache, sınırlı sayıda değere güçlü referanslar barındıran bir önbellektir. Bir değere her erişildiğinde sıranın başına taşınır. Tam önbelleğe bir değer eklendiğinde sıranın sonundaki değer çıkarılır ve çöp toplama için uygun hale gelebilir.
  • int olarak dosya açıklayıcısı

WebKit

  • Dosya şeması çerezleri
    • CookieManager artık file: URI şemasını kullanan çerezleri destekliyor. WebView veya CookieManager örneği oluşturmadan önce, dosya şeması çerezleri desteğini etkinleştirmek/devre dışı bırakmak için setAcceptFileSchemeCookies() kullanabilirsiniz. Bir CookieManager örneğinde, allowFileSchemeCookies() yöntemini çağırarak dosya şeması çerezlerinin etkinleştirilip etkinleştirilmediğini kontrol edebilirsiniz.
  • Giriş isteği bildirimi
    • Yeni onReceivedLoginRequest() yöntemi, Android 3.0'da sunulan tarayıcı otomatik giriş özelliklerini desteklemek için ana makine uygulamasına, kullanıcı için bir otomatik giriş isteğinin işlendiğini bildirir.
  • Kaldırılan sınıflar ve arayüzler
    • Önceden kullanımdan kaldırılan birkaç sınıf ve arayüz, genel API'den kaldırıldı. Daha fazla bilgi için API Farkları Raporu'na bakın.

Tarayıcı

Tarayıcı uygulaması, web uygulamalarını desteklemek için aşağıdaki özellikleri ekler:

  • HTML5 <video> etiketine yerleştirilmiş videoları satır içi oynatma desteği. Oynatma, mümkün olduğunda donanım hızlandırmalı olarak gerçekleştirilir.
  • Tüm siteler (mobil ve masaüstü) için sabit konumlu öğeler için katman desteği.

Yeni özellik sabitleri

Platform, uygulamanın bu platform sürümünde desteklenen yeni donanım özelliklerine yönelik gereksinimini Google Play gibi harici kuruluşlara bildirmek amacıyla, geliştiricilerin uygulama manifest dosyalarında beyan edebilecekleri yeni donanım özelliği sabitleri ekler. Geliştiriciler, bu ve diğer özellik sabitlerini <uses-feature> manifest öğelerinde tanımlar.

Google Play, uygulamaları, <uses-feature> manifest öğelerinde belirtilen özelliklere göre filtreler. Uygulama manifest dosyasındaki özellikleri bildirme hakkında daha fazla bilgi için Google Play Filtreleri konusunu okuyun.

API Farkları Raporu

Android 3.1'deki (API Düzeyi 12) tüm API değişikliklerinin ayrıntılı görünümü için API Farkları Raporu'na bakın.

API Düzeyi

Android 3.1 platformu, çerçeve API'sinin güncellenmiş bir sürümünü sunar. Android 3.1 API'ye, sistemin kendisinde depolanan bir tam sayı tanımlayıcı (12) atanır. "API Düzeyi" adı verilen bu tanımlayıcı, sistemin bir uygulamanın uygulamayı yüklemeden önce sistemle uyumlu olup olmadığını doğru şekilde belirlemesine olanak tanır.

Uygulamanızda Android 3.1'de sunulan API'ları kullanmak için uygulamayı Android 3.1 SDK platformunda sağlanan Android kitaplığına göre derlemeniz gerekir. İhtiyaçlarınıza bağlı olarak, uygulamanın manifest dosyasındaki <uses-sdk> öğesine bir android:minSdkVersion="12" özelliği eklemeniz de gerekebilir.

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