Jelly Bean Özellikleri

Bu belge, Android 4.1'de kullanıma sunulan geliştiricilere yönelik yeni özelliklere üst düzey bir genel bakış sağlayacaktır. Bu özellikler şunlardır: gelişmiş bildirimler, büyük dosyaları paylaşmak için Android Beam güncelleştirmeleri, multimedya güncelleştirmeleri, eşler arası ağ bulma, animasyonlar, yeni izinler.

Genel bakış

"Jelly Bean" olarak da bilinen Android 4.1 (API Düzey 16), 9 Temmuz 2012'de piyasaya sürüldü. Bu makale, Xamarin.Android kullanan geliştiriciler için Android 4.1'deki yeni özelliklerden bazılarına üst düzey bir giriş sağlayacaktır. Bu yeni özelliklerden bazıları etkinlik başlatmaya yönelik animasyon geliştirmeleri, kamera için yeni sesler ve uygulama yığını gezintisi için geliştirilmiş destektir. Artık amaçlarla kesip yapıştırmak mümkündür.

Android uygulamalarının kararlılığı, kararsız içerik sağlayıcılarına bağımlılığı yalıtma özelliğiyle geliştirilmiştir. Hizmetler, yalnızca onları başlatan etkinlik tarafından erişilebilmeleri için yalıtılmış da olabilir.

Bonjour, UPnP veya çok noktaya yayın DNS tabanlı hizmetler kullanılarak ağ hizmeti bulma desteği eklendi. Artık metin, eylem düğmeleri ve büyük resimler içeren daha zengin bildirimler için mümkündür.

Son olarak Android 4.1'e birkaç yeni izin eklendi.

Gereksinimler

Jelly Bean kullanarak Xamarin.Android uygulamaları geliştirmek için Xamarin.Android 4.2.6 veya üzeri gerekir ve Android 4.1 (API Düzey 16) aşağıdaki ekran görüntüsünde gösterildiği gibi Android SDK Yöneticisi aracılığıyla yüklenmelidir:

Android SDK Yöneticisi'nde Android 4.1'i seçme

Yenilikler

Animasyonlar

Etkinlikler, yakınlaştırma animasyonları veya özel animasyonlar kullanılarak sınıfı kullanılarak ActivityOptions başlatılabilir. Bu animasyonları desteklemek için aşağıdaki yeni yöntemler sağlanır:

  • MakeScaleUpAnimation – Bu, bir etkinlik penceresinin ölçeğini ekranda başlangıç konumundan ve boyuttan artıran bir animasyon oluşturur.
  • MakeThumbnailScaleUpAnimation – Bu, ekranda belirtilen konumdan küçük resim görüntüsünden ölçeği artıran bir animasyon oluşturur.
  • MakeCustomAnimation – Bu, uygulamadaki kaynaklardan bir animasyon oluşturur. Etkinliğin ne zaman açıldığını, başka bir animasyon ise etkinliğin ne zaman durdurulduğunda olduğunu gösterir.

Yeni TimeAnimator sınıf, animasyonda bir çerçeve her değiştiğinde bir uygulamayı bilgilendirebilen bir arabirim TimeAnimator.ITimeListener sağlar. Örneğin, aşağıdaki uygulamasını TimeAnimator.ITimeListenergöz önünde bulundurun:

class MyTimeListener : Java.Lang.Object,  TimeAnimator.ITimeListener
{
    public void OnTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime)
    {
        Log.Debug("Activity1", "totalTime={0}, deltaTime={1}", totalTime, deltaTime);
    }
}

Şimdi sınıfını kullanmak için bir örneği TimeAnimator oluşturulur ve dinleyici ayarlanır:

var animator = new TimeAnimator();
animator.SetTimeListener(new MyTimeListener());
animator.Start();

TimeAnimator Örnek çalışırken, çağrılır ITimeAnimator.ITimeListenerve ardından animatörün ne kadar süreyle çalıştığını ve yöntemin son çağrılışından bu yana ne kadar süre geçtiğini günlüğe kaydeder.

Uygulama Yığını Gezintisi

Android 4.1, Android 3.0'da kullanıma sunulan uygulama yığını gezintisini geliştirir. Android, özelliğini belirterekParentName, kullanıcı eylem çubuğundaki Yukarı düğmesine bastığında uygun üst Etkinliği açabilir - Android özelliği tarafından belirtilen Etkinliğin örneğini ParentNameActivityAttributeoluşturur. Bu, uygulamaların belirli bir görevi oluşturan etkinlik hiyerarşisini korumasına olanak tanır.

Etkinlikte ayarının ParentName çoğu uygulama için Android'in uygulama yığınında gezinmek için doğru davranışı sağlaması yeterlidir; Android, her üst etkinlik için bir dizi Amaç oluşturarak gerekli geri yığını sentezler. Ancak, bu yapay bir uygulama yığını olduğundan, her sentetik etkinlik, doğal bir etkinliğin sahip olacağı kaydedilmiş duruma sahip olmaz. Yapay üst etkinliğe kaydedilmiş durum sağlamak için, bir Etkinlik yöntemini geçersiz kılabilir OnPrepareNavigationUpTaskStack . Bu yöntem, TaskStackBuilder Android'in arka yığını oluşturmak için kullanacağı Intent nesneleri koleksiyonuna sahip olacak bir örnek alır. Etkinlik, yapay etkinlik oluşturulduktan sonra uygun durum bilgilerini alacak şekilde bu Amaçları değiştirebilir.

Daha karmaşık senaryolar için, Activity sınıfında Yukarı gezinti davranışını işlemek ve arka yığını oluşturmak için kullanılabilecek yeni yöntemler vardır:

  • OnNavigateUp– Bu yöntemi geçersiz kılarak Yukarı düğmesine basıldığında özel bir eylem gerçekleştirmek mümkündür.
  • NavigateUpTo – Bu yöntemin çağrılması, uygulamanın geçerli etkinlikten belirli bir amaç tarafından belirtilen etkinliğe gitmesine neden olur.
  • ParentActivityIntent – Bu, geçerli etkinliğin üst etkinliğini başlatacak bir Amaç elde etmek için kullanılır.
  • ShouldUpRecreateTask – Üst etkinliğe gitmek için yapay arka yığının oluşturulması gerekip gerekmediğini sorgulamak için bu yöntem kullanılır. Yapay yığının oluşturulması gerekiyorsa döndürür true .
  • FinishAffinity – Bu yöntemin çağrılması geçerli etkinliği ve bunun altındaki tüm etkinlikleri aynı görev benzitesine sahip geçerli görevde tamamlar.
  • OnCreateNavigateUpTaskStack – Yapay yığının nasıl oluşturulduğu üzerinde tam denetime sahip olmak gerektiğinde bu yöntem geçersiz kılınmıştır.

Kamera

Otomatik odağın ne zaman başladığını veya taşınmayı durdurduğunu algılamak için kullanılabilen yeni bir arabirim Camera.IAutoFocusMoveCallbackvardır. Bu yeni arabirimin bir örneği aşağıdaki kod parçacığında görülebilir:

public class AutoFocusCallbackActivity : Activity, Camera.IAutoFocusCallback
{
    public void OnAutoFocus(bool success, Camera camera)
    {
        // camera is an instance of the camera service object.

        if (success)
        {
            // Auto focus was successful - do something here.
        }
        else
        {
            // Auto focus didn't happen for some reason - react to that here.
        }
    }
}

Yeni sınıf MediaActionSound , çeşitli medya eylemleri için sesler üretmek için bir DIZI API sağlar. Bir kamerayla gerçekleşebilecek çeşitli eylemler vardır ve bunlar sabit listesi Android.Media.MediaActionSoundTypetarafından tanımlanır:

  • MediaActionSoundType.FocusComplete – Odaklama tamamlandığında çalan bu ses.
  • MediaActionSoundType.ShutterClick – Bu ses, hareketsiz bir resim çekildiğinde çalınacaktır.
  • MediaActionSoundType.StartVideoRecording – Bu ses, video kaydının başlangıcını gösterir olarak kullanılır.
  • MediaActionSoundType.StopVideoRecording – Bu ses, video kaydının sonunu göstermek için çalınacaktır.

Sınıfın nasıl kullanılacağına MediaActionSound ilişkin bir örnek aşağıdaki kod parçacığında görülebilir:

var mediaActionPlayer = new MediaActionSound();

// Preload the sound for a shutter click.
mediaActionPlayer.Load(MediaActionSoundType.ShutterClick);
var button = FindViewById<Button>(Resource.Id.MyButton);

// Play the sound on a button click.
button.Click += (sender, args) => mediaActionPlayer.Play(MediaActionSoundType.ShutterClick);

// This releases the preloaded resources. Don’t make any calls on
// mediaActionPlayer after this.
mediaActionPlayer.Release();

Bağlantı

Android Beam

Android Beam, iki Android cihazının birbiriyle iletişim kurmasını sağlayan NFC tabanlı bir teknolojidir. Android 4.1, büyük dosyaların aktarımı için daha iyi destek sağlar. Android, yeni yöntemi NfcAdapter.SetBeamPushUris() kullanırken hızlı aktarım hızı elde etmek için alternatif aktarım mekanizmaları (Bluetooth gibi) arasında geçiş yapacaktır.

Ağ Hizmetleri Bulma

Android 4.1, çok noktaya yayın DNS tabanlı hizmet bulma için yeni API'ler içerir. Bu, bir uygulamanın Wi-Fi üzerinden yazıcılar, kameralar ve medya cihazları gibi diğer cihazları algılamasını ve bunlara bağlanmasını sağlar. Bu yeni API'ler pakettedir Android.Net.Nsd .

Diğer hizmetler tarafından kullanılabilecek bir hizmet oluşturmak için sınıfı, NsdServiceInfo bir hizmetin özelliklerini tanımlayacak bir nesne oluşturmak için kullanılır. Bu nesne daha sonra uygulamasıyla NsdManager.ResolveListenerbirlikte sağlanırNsdManager.RegisterService(). uygulamaları NsdManager.ResolveListener , başarılı bir kaydı bildirmek ve hizmetin kaydını kaldırmak için kullanılır.

Ağdaki hizmetleri ve geçirilen uygulamasını Nsd.DiscoveryListener bulmak için NsdManager.discoverServices().

Ağ Kullanımı

Yeni bir yöntem, ConnectivityManager.IsActiveNetworkMetered bir cihazın tarifeli bir ağa bağlı olup olmadığını denetlemesine olanak tanır. Bu yöntem, kullanıcılara veri işlemleri için pahalı ücretler olabileceğini doğru bir şekilde bildirerek veri kullanımını yönetmeye yardımcı olmak için kullanılabilir.

WiFi Doğrudan Hizmet Bulma

sınıfı, WifiP2pManager sıfırconf'ı desteklemek için Android 4.0'da tanıtıldı. Zeroconf (sıfır yapılandırma ağı), cihazların (bilgisayarlar, yazıcılar, telefonlar) insan ağ operatörlerinin veya özel yapılandırma sunucularının müdahalesiyle ağlara otomatik olarak bağlanmasına olanak tanıyan bir dizi tekniktir.

Jelly Bean'de BonjourWifiP2pManager veya Upnp kullanarak yakındaki cihazları keşfedebilirsiniz. Bonjour, Apple'ın zeroconf uygulamasıdır. Upnp, zeroconf'yi de destekleyen ağ protokolleri kümesidir. Wi-Fi hizmeti bulmayı desteklemek için öğesine WiFiP2pManager aşağıdaki yöntemler eklendi:

  • AddLocalService() – Bu yöntem, eşler tarafından keşfedilmesi için Wi-Fi üzerinden bir uygulamayı hizmet olarak duyurur.
  • AddServiceRequest( ) – Bu yöntem, çerçeveye bir hizmet bulma isteği göndermektir. Wi-Fi hizmeti bulma işlemini başlatmak için kullanılır.
  • SetDnsSdResponseListeners() – Bu yöntem Bonjour'dan bulma isteklerine yanıt alırken çağrılacak geri çağırmaları kaydetmek için kullanılır.
  • SetUpnpServiceResponseListener() – Bu yöntem, upnp bulma isteklerine yanıt alınırken çağrılacak geri çağırmaları kaydetmek için kullanılır.

İçerik Sağlayıcıları

ContentResolver sınıfı yeni bir yöntem aldı: AcquireUnstableContentProvider. Bu yöntem, bir uygulamanın "kararsız" bir içerik sağlayıcısı almasına olanak tanır. Normalde, bir uygulama bir içerik sağlayıcısı edindiğinde ve bu içerik sağlayıcısı kilitlendiğinde, uygulama da kilitlenir. Bu yöntem çağrısıyla, içerik sağlayıcısı kilitlenirse uygulama kilitlenmez. Bunun yerine, Android.OS.DeadObjectionException içerik sağlayıcısının gittiğini bir uygulamaya bildirmek için içerik sağlayıcısındaki çağrılardan oluşturulur. "Kararsız" bir içerik sağlayıcısı, diğer uygulamalardan içerik sağlayıcılarıyla etkileşim kurarken kullanışlıdır; başka bir uygulamadan gelen buggy kodunun başka bir uygulamayı etkileme olasılığı daha düşüktür.

Amaçlarla Kopyala ve Yapıştır

Sınıfı artık Intent özelliği aracılığıyla kendisiyle ilişkilendirilmiş bir ClipData nesneye Intent.ClipData sahip olabilir. Bu yöntem, panodan gelen ek verilerin amaç doğrultusunda iletilmesini sağlar. örneği ClipData bir veya daha fazla ClipData.Itemiçerebilir. ClipData.Item'ler aşağıdaki türlerdeki öğelerdir:

  • Metin : Bu, HTML veya biçimi yerleşik Android stil aralıkları tarafından desteklenen herhangi bir dize olan herhangi bir metin dizesidir.
  • Amaç – Herhangi bir Intent nesne.
  • Uri : Bu, http yer işareti veya içerik sağlayıcısının URI'si gibi herhangi bir URI olabilir.

Yalıtılmış Hizmetler

Yalıtılmış hizmet, kendi özel işlemi altında çalışan ve kendi izni olmayan bir hizmettir. Hizmetle tek iletişim, hizmeti başlatma ve Hizmet API'si aracılığıyla bağlama işlemidir. Bir hizmet sınıfını süsleyen özelliğini IsolatedProcess="true"ServiceAttribute ayarlayarak bir hizmeti yalıtılmış olarak bildirmek mümkündür.

Medya

Yeni Android.Media.MediaCodec sınıf, alt düzey medya codec'lerine bir API sağlar. Uygulamalar, cihazda hangi düşük düzey codec bileşenlerinin kullanılabilir olduğunu öğrenmek için sistemi sorgulayabilir.

Yakalanan seste ek ses ön işlemesini desteklemek için yeni Android.Media.Audiofx.AudioEffect alt sınıflar eklendi:

  • Android.Media.Audiofx.AcousticEchoCanceler – Bu sınıf, yakalanan ses sinyalinden uzak bir tarafın sinyalini kaldırmak için ses ön işleme için kullanılır. Örneğin, bir ses iletişim uygulamasından yankıyı kaldırma.
  • Android.Media.Audiofx.AutomaticGainControl – Bu sınıf, çıkış sinyalinin sabit olması için giriş sinyalini artırarak veya indirerek yakalanan sinyali normalleştirmek için kullanılır.
  • Android.Media.Audiofx.NoiseSuppressor – Bu sınıf yakalanan sinyalden arka plan gürültüsünü kaldırır.

Tüm cihazlar bu etkileri desteklemez. Söz konusu ses efektinin uygulamayı çalıştıran cihazda desteklenip desteklenmediğini görmek için yöntemi AudioEffect.IsAvailable bir uygulama tarafından çağrılmalıdır.

MediaPlayer sınıfı artık yöntemiyle boşluksuz kayıttan yürütmeyi SetNextMediaPlayer() destekliyor. Bu yeni yöntem, geçerli medya oynatıcı kayıttan yürütmeyi tamamladığında başlatacak sonraki MediaPlayer'ı belirtir.

Aşağıdaki yeni sınıflar, medyanın nerede oynatılacağını seçmek için standart mekanizmalar ve kullanıcı arabirimi sağlar:

  • MediaRouter – Bu sınıf, uygulamaların bir cihazdan dış hoparlörlere veya diğer cihazlara medya kanallarının yönlendirmesini denetlemesine olanak tanır.
  • MediaRouterActionProvider ve MediaRouteButton – Bu sınıflar, medya seçmek ve oynatmak için tutarlı bir kullanıcı arabirimi sağlamaya yardımcı olur.

Notifications

Android 4.1, bildirimleri görüntüleyerek uygulamalara daha fazla esneklik ve denetim sağlar. Uygulamalar artık kullanıcılara daha büyük ve daha iyi bildirimler gösterebilir. Yeni bir yöntem, NotificationBuilder.SetStyle() bildirimlerde yeni üç yeni stilden birinin ayarlanmasını sağlar:

  • Notification.BigPictureStyle – Bu, içinde bir görüntü olacak bildirimler oluşturacak bir yardımcı sınıfıdır. Aşağıdaki görüntüde büyük resim içeren bir bildirim örneği gösterilmektedir:

BigPictureStyle bildiriminin örnek ekran görüntüsü

  • Notification.BigTextStyle – Bu, e-posta gibi birden çok metin satırına sahip olacak bildirimler oluşturacak bir yardımcı sınıfıdır. Bu yeni bildirim stilinin bir örneği aşağıdaki ekran görüntüsünde görülebilir:

BigTextStyle bildiriminin örnek ekran görüntüsü

  • Notification.InboxStyle – Bu, bu ekran görüntüsünde gösterildiği gibi bir e-posta iletisindeki kod parçacıkları gibi dizelerin listesini içeren bildirimler oluşturacak bir yardımcı sınıfıdır:

Notification.InboxStyle bildiriminin örnek ekran görüntüsü

Bildirim normal veya daha büyük bir stil kullanırken bildirim iletisinin altına en fazla iki eylem düğmesi eklemek mümkündür. Bunun bir örneği, bildirimin en altında eylem düğmelerinin göründüğü aşağıdaki ekran görüntüsünde görülebilir:

Bildirim iletisinin altında görüntülenen eylem düğmelerinin örnek ekran görüntüsü

sınıfı, Notification geliştiricinin bir bildirim için beş öncelik düzeyinden birini belirtmesine olanak sağlayan yeni sabitler aldı. Bunlar, özelliği kullanılarak bir bildirimde Priority ayarlanabilir.

İzinler

Aşağıdaki yeni izinler eklendi:

  • READ_EXTERNAL_STORAGE - Uygulama, dış depolamaya salt okunur erişim gerektirir. Şu anda tüm uygulamalar varsayılan olarak okuma erişimine sahiptir, ancak Android'in gelecekteki sürümleri, uygulamaların açıkça okuma erişimi istemesini gerektirir.
  • READ_USER_DICTIONARY - Kullanıcının sözcük sözlüğüne okuma erişimi sağlar.
  • READ_CALL_LOG - Bir uygulamanın çağrı günlüğünü okuyarak gelen ve giden aramalar hakkında bilgi edinmesini sağlar.
  • WRITE_CALL_LOG - Bir uygulamanın telefondaki arama günlüğüne yazmasına izin verir.
  • WRITE_USER_DICTIONARY - Bir uygulamanın kullanıcının sözcük sözlüğüne yazmasına izin verir.

Önemli bir değişiklik READ_EXTERNAL_STORAGE : Şu anda bu izin Android tarafından otomatik olarak verilmiştir. Android'in gelecekteki sürümleri, izin verilmeden önce bir uygulamanın bu izni istemesini gerektirir.

Özet

Bu makalede, Android 4.1'de (API Düzey 16) kullanılabilen yeni API'lerden bazıları tanıtıldı. Animasyonlar için bazı değişiklikleri vurguladı ve etkinliğin başlatılmasını canlandırdı ve Bonjour veya UPnP gibi protokolleri kullanan diğer cihazların ağ keşfi için yeni API'leri kullanıma sundu. API'de yapılan diğer değişiklikler de vurgulandı, örneğin amaçlarla verileri kesip yapıştırabilme, yalıtılmış hizmetleri veya "kararsız" içerik sağlayıcılarını kullanma olanağı.

Bu makale daha sonra bildirimlere yönelik güncelleştirmeleri tanıtmaya devam etti ve Android 4.1 ile sunulan bazı yeni izinler ele alındı