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:
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.ITimeListener
gö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.ITimeListener
ve 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 ParentName
ActivityAttribute
oluş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ürtrue
.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.IAutoFocusMoveCallback
vardı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.MediaActionSoundType
tarafı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.ResolveListener
birlikte 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.Item
iç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
veMediaRouteButton
– 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:
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:
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:
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:
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ı