Android'de yerel bildirimler
Bu bölümde, Xamarin.Android'de yerel bildirimlerin nasıl uygulanacakları gösterilmektedir. Bir Android bildiriminin çeşitli kullanıcı arabirimi öğelerini açıklar ve bildirim oluşturma ve görüntüleme ile ilgili API'leri açıklar.
Yerel bildirimlere genel bakış
Android, kullanıcıya bildirim simgeleri ve bildirim bilgilerini görüntülemek için sistem tarafından denetlenen iki alan sağlar. Bir bildirim ilk yayımlandığında, aşağıdaki ekran görüntüsünde gösterildiği gibi bildirim alanında simgesi görüntülenir:
Bildirimle ilgili ayrıntıları almak için kullanıcı bildirim çekmecesini açabilir (bildirim içeriğini göstermek için her bildirim simgesini genişletir) ve bildirimlerle ilişkili tüm eylemleri gerçekleştirebilir. Aşağıdaki ekran görüntüsünde, yukarıda görüntülenen bildirim alanına karşılık gelen bir bildirim çekmecesi gösterilmektedir:
Android bildirimleri iki tür düzen kullanır:
Temel düzen – kompakt, sabit bir sunu biçimi.
Genişletilmiş düzen : Daha fazla bilgi ortaya çıkarmak için daha büyük bir boyuta genişletilebilen bir sunu biçimi.
Bu düzen türlerinin her biri (ve bunların nasıl oluşturulacağı) aşağıdaki bölümlerde açıklanmıştır.
Not
Bu kılavuz, Android destek kitaplığındaki NotificationCompat API'lerine odaklanır. Bu API'ler, Android 4.0'a (API düzeyi 14) en fazla geriye dönük uyumluluk sağlar.
Temel düzen
Tüm Android bildirimleri, en azından aşağıdaki öğeleri içeren temel düzen biçiminde oluşturulur:
Kaynak uygulamayı veya uygulama farklı bildirim türlerini destekliyorsa bildirim türünü temsil eden bir bildirim simgesi.
Bildirim başlığı veya bildirim kişisel bir iletiyse gönderenin adı.
Bildirim iletisi.
Zaman damgası.
Bu öğeler aşağıdaki diyagramda gösterildiği gibi görüntülenir:
Temel düzenlerin yüksekliği 64 yoğunluklu bağımsız piksel (dp) ile sınırlıdır. Android bu temel bildirim stilini varsayılan olarak oluşturur.
İsteğe bağlı olarak, bildirimler uygulamayı veya gönderenin fotoğrafını temsil eden büyük bir simge görüntüleyebilir. Android 5.0 ve sonraki sürümlerde bir bildirimde büyük bir simge kullanıldığında, küçük bildirim simgesi büyük simgenin üzerinde rozet olarak görüntülenir:
Android 5.0 sürümünden itibaren, bildirimler kilit ekranında da görünebilir:
Kullanıcı kilit ekranı bildirimine iki kez dokunarak cihazın kilidini açabilir ve bu bildirimi oluşturan uygulamaya atlayabilir veya bildirimi kapatmak için çekin. Uygulamalar, kilit ekranında nelerin gösterileceğini denetlemek için bildirimin görünürlük düzeyini ayarlayabilir ve kullanıcılar kilit ekranı bildirimlerinde hassas içeriğin gösterilmesine izin verilip verilmeyeceğini seçebilir.
Android 5.0, Heads-up adlı yüksek öncelikli bir bildirim sunusu biçimi kullanıma sunulmuştur. Uyarı bildirimleri birkaç saniye boyunca ekranın üst kısmından aşağı kaydırır ve ardından bildirim alanına geri döner:
Uyarı bildirimleri, sistem kullanıcı arabiriminin şu anda çalışan etkinliğin durumunu kesintiye uğratmadan önemli bilgileri kullanıcının önüne yerleştirmesini mümkün hale getirir.
Android, bildirimlerin akıllı bir şekilde sıralanıp görüntülenebilmesi için bildirim meta verileri desteği içerir. Bildirim meta verileri, bildirimlerin kilit ekranında ve Uyarı modunda nasıl sunulduğunu da denetler. Uygulamalar aşağıdaki bildirim meta verisi türlerini ayarlayabilir:
Öncelik : Öncelik düzeyi, bildirimlerin nasıl ve ne zaman sunulup sunulmadığını belirler. Örneğin, Android 5.0'da, yüksek öncelikli bildirimler Uyarı bildirimleri olarak görüntülenir.
Görünürlük : Bildirim kilit ekranında göründüğünde ne kadar bildirim içeriğinin görüntüleneceğini belirtir.
Kategori – Cihazı Rahatsız Etmeyin modunda olduğu durumlar gibi çeşitli durumlarda bildirimin nasıl işleneceğini sisteme bildirir.
Not
Görünürlük ve Kategori , Android 5.0'da kullanıma sunulmuştur ve Android'in önceki sürümlerinde kullanılamaz. Android 8.0'da başlayan bildirim kanalları, bildirimlerin kullanıcıya nasıl sunulduğunu denetlemek için kullanılır.
Genişletilmiş düzenler
Android 4.1'den başlayarak, bildirimler kullanıcının daha fazla içerik görüntülemek için bildirimin yüksekliğini genişletmesine olanak sağlayan genişletilmiş düzen stilleriyle yapılandırılabilir. Örneğin, aşağıdaki örnekte sözleşmeli modda genişletilmiş düzen bildirimi gösterilmektedir:
Bu bildirim genişletildiğinde iletinin tamamı gösterilir:
Android, tek olaylı bildirimler için üç genişletilmiş düzen stilini destekler:
Büyük Metin : Anlaşmalı modda, iletinin ilk satırının bir alıntısını ve ardından iki nokta görüntüler. Genişletilmiş modda, iletinin tamamını görüntüler (yukarıdaki örnekte görüldüğü gibi).
Gelen Kutusu – Sözleşmeli modda, yeni ileti sayısını görüntüler. Genişletilmiş modda, ilk e-posta iletisini veya gelen kutusundaki iletilerin listesini görüntüler.
Görüntü – Anlaşmalı modda yalnızca ileti metnini görüntüler. Genişletilmiş modda, metni ve görüntüyü görüntüler.
Temel Bildirim'in ötesinde (bu makalenin devamında) Büyük Metin, Gelen Kutusu ve Görüntü bildirimlerinin nasıl oluşturulacağı açıklanmaktadır.
Bildirim kanalları
Android 8.0(Oreo) sürümünden başlayarak, görüntülemek istediğiniz her bildirim türü için kullanıcı tarafından özelleştirilebilir bir kanal oluşturmak için bildirim kanalları özelliğini kullanabilirsiniz. Bildirim kanalları, bir kanala gönderilen tüm bildirimlerin aynı davranışı sergilemesi için bildirimleri gruplandırmanızı mümkün hale getirir. Örneğin, anında ilgilenilmesi gereken bildirimlere yönelik bir bildirim kanalınız ve bilgilendirici iletiler için kullanılan ayrı bir "daha sessiz" kanalınız olabilir.
Android Oreo ile yüklenen YouTube uygulaması iki bildirim kategorisi listeler: İndirme bildirimleri ve Genel bildirimler:
Bu kategorilerin her biri bir bildirim kanalına karşılık gelir. YouTube uygulaması bir İndirme Bildirimleri kanalı ve Genel Bildirimler kanalı uygular. Kullanıcı, uygulamanın indirme bildirimleri kanalının ayarlar ekranını görüntüleyen Bildirimleri indir'e dokunabilir:
Bu ekranda, kullanıcı aşağıdakileri yaparak İndirme bildirimleri kanalının davranışını değiştirebilir:
Önem düzeyini, ses ve görsel kesinti düzeyini yapılandıran Acil, Yüksek, Orta veya Düşük olarak ayarlayın.
Bildirim noktasını açın veya kapatın.
Yanıp sönen ışığı açın veya kapatın.
Kilit ekranında bildirimleri gösterin veya gizleyin.
Rahatsız Etmeyin ayarını geçersiz kılın.
Genel Bildirimler kanalı benzer ayarlara sahiptir:
Bildirim kanallarınızın kullanıcıyla nasıl etkileşimde bulunduğunu tam olarak denetlemediğinize dikkat edin. Kullanıcı, yukarıdaki ekran görüntülerinde görüldüğü gibi cihazdaki herhangi bir bildirim kanalının ayarlarını değiştirebilir. Ancak, varsayılan değerleri yapılandırabilirsiniz (aşağıda açıklandığı gibi). Bu örneklerde gösterildiği gibi, yeni bildirim kanalları özelliği, kullanıcılara farklı bildirim türleri üzerinde ayrıntılı denetim vermenizi mümkün kılar.
Bildirim oluşturma
Android'de bildirim oluşturmak için Xamarin.Android.Support.v4 NuGet paketinden NotificationCompat.Builder sınıfını kullanırsınız. Bu sınıf, Android'in eski sürümlerinde bildirim oluşturmayı ve yayımlamayı mümkün kılar.
NotificationCompat.Builder
konusu da ele alınmıştı.
NotificationCompat.Builder
bir bildirimde çeşitli seçenekleri ayarlamak için aşağıdakiler gibi yöntemler sağlar:
Başlık, ileti metni ve bildirim simgesi de dahil olmak üzere içerik.
Büyük Metin, Gelen Kutusu veya Resim stili gibi bildirimin stili.
Bildirimin önceliği: minimum, düşük, varsayılan, yüksek veya maksimum. Android 8.0 ve üzeri sürümlerde öncelik bir bildirim kanalı üzerinden ayarlanır.
Kilit ekranında bildirimin görünürlüğü: genel, özel veya gizli.
Android'in bildirimi sınıflandırması ve filtrelemesine yardımcı olan kategori meta verileri.
Bildirime dokunulduğunda bir etkinliğin başlatılacağını gösteren isteğe bağlı bir amaç.
Bildirimin yayımlanacağı bildirim kanalının kimliği (Android 8.0 ve üzeri).
Oluşturucuda bu seçenekleri ayarladıktan sonra, ayarları içeren bir bildirim nesnesi oluşturursunuz. Bildirimi yayımlamak için bu bildirim nesnesini Notification Manager'a geçirirsiniz. Android, bildirimleri yayımlamaktan ve kullanıcıya görüntülemekle sorumlu notificationManager sınıfını sağlar. Bu sınıfa başvuru, etkinlik veya hizmet gibi herhangi bir bağlamdan alınabilir.
Bildirim kanalı oluşturma
Android 8.0 üzerinde çalışan uygulamaların bildirimleri için bir bildirim kanalı oluşturması gerekir. Bildirim kanalı aşağıdaki üç bilgi parçasını gerektirir:
- Kanalı tanımlayan pakete özgü bir kimlik dizesi.
- Kullanıcıya görüntülenecek kanalın adı. Ad bir ile 40 karakter arasında olmalıdır.
- Kanalın önemi.
Uygulamaların çalıştırdıkları Android sürümünü denetlemesi gerekir. Android 8.0'dan eski sürümleri çalıştıran cihazlar bir bildirim kanalı oluşturmamalıdır. Aşağıdaki yöntem, bir etkinlikte bildirim kanalı oluşturmanın bir örneğidir:
void CreateNotificationChannel()
{
if (Build.VERSION.SdkInt < BuildVersionCodes.O)
{
// Notification channels are new in API 26 (and not a part of the
// support library). There is no need to create a notification
// channel on older versions of Android.
return;
}
var channelName = Resources.GetString(Resource.String.channel_name);
var channelDescription = GetString(Resource.String.channel_description);
var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default)
{
Description = channelDescription
};
var notificationManager = (NotificationManager) GetSystemService(NotificationService);
notificationManager.CreateNotificationChannel(channel);
}
Etkinlik her oluşturulduğunda bildirim kanalı oluşturulmalıdır. CreateNotificationChannel
yöntemi için, bir etkinliğin OnCreate
yönteminde çağrılmalıdır.
Bildirim oluşturma ve yayımlama
Android'de bildirim oluşturmak için şu adımları izleyin:
Bir
NotificationCompat.Builder
nesne örneği oluşturma.Bildirim seçeneklerini ayarlamak için nesne üzerinde
NotificationCompat.Builder
çeşitli yöntemleri çağırın.Bildirim nesnesinin örneğini oluşturmak için nesnesinin
NotificationCompat.Builder
Build yöntemini çağırın.Bildirimi yayımlamak için bildirim yöneticisinin Notify yöntemini çağırın.
Her bildirim için en azından aşağıdaki bilgileri sağlamanız gerekir:
Küçük bir simge (boyutu 24x24 dp)
Kısa bir başlık
Bildirim metni
Aşağıdaki kod örneğinde temel bir bildirim oluşturmak için nasıl kullanılacağı NotificationCompat.Builder
gösterilmektedir. Yöntemlerin NotificationCompat.Builder
yöntem zincirini desteklediğine, yani her yöntemin oluşturucu nesnesini döndürdüğüne dikkat edin; böylece sonraki yöntem çağrısını çağırmak için son yöntem çağrısının sonucunu kullanabilirsiniz:
// Instantiate the builder and set notification elements:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.SetContentTitle ("Sample Notification")
.SetContentText ("Hello World! This is my first notification!")
.SetSmallIcon (Resource.Drawable.ic_notification);
// Build the notification:
Notification notification = builder.Build();
// Get the notification manager:
NotificationManager notificationManager =
GetSystemService (Context.NotificationService) as NotificationManager;
// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);
Bu örnekte, çağrılan builder
yeni NotificationCompat.Builder
bir nesnenin örneği, kullanılacak bildirim kanalının kimliğiyle birlikte oluşturulur. Bildirimin başlığı ve metni ayarlanır ve bildirim simgesi Resources/drawable/ic_notification.png'dan yüklenir. Bildirim oluşturucusunun Build
yöntemine yapılan çağrı, bu ayarlarla bir bildirim nesnesi oluşturur. Sonraki adım bildirim yöneticisinin Notify
yöntemini çağırmaktır. Bildirim yöneticisini bulmak için, yukarıda gösterildiği gibi öğesini çağırırsınız GetSystemService
.
Notify
yöntemi iki parametre kabul eder: bildirim tanımlayıcısı ve bildirim nesnesi. Bildirim tanımlayıcısı, uygulamanıza bildirimi tanımlayan benzersiz bir tamsayıdır. Bu örnekte bildirim tanımlayıcısı sıfır (0) olarak ayarlanmıştır; ancak bir üretim uygulamasında her bildirime benzersiz bir tanımlayıcı vermek istersiniz. Çağrısında önceki tanımlayıcı değerini yeniden kullanmak Notify
, son bildirimin üzerine yazılmasını sağlar.
Bu kod bir Android 5.0 cihazında çalıştırıldığında aşağıdaki örneğe benzer bir bildirim oluşturur:
Bildirim simgesi bildirimin sol tarafında görüntülenir; daire içine alınmış bir "i" resminin arkasında gri bir dairesel arka plan çizebilmesi için bir alfa kanalı vardır. Alfa kanalı olmayan bir simge de sağlayabilirsiniz. Bir fotoğraf resmini simge olarak görüntülemek için bu konunun devamında yer alan Büyük Simge Biçimi bölümüne bakın.
Zaman damgası otomatik olarak ayarlanır, ancak bildirim oluşturucusunun SetWhen yöntemini çağırarak bu ayarı geçersiz kılabilirsiniz. Örneğin, aşağıdaki kod örneği zaman damgasını geçerli saate ayarlar:
builder.SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis());
Ses ve titreşimi etkinleştirme
Bildiriminizin de ses çalmasını istiyorsanız, bildirim oluşturucusunun SetDefaults yöntemini çağırabilir ve bayrağını NotificationDefaults.Sound
geçirebilirsiniz:
// Instantiate the notification builder and enable sound:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.SetContentTitle ("Sample Notification")
.SetContentText ("Hello World! This is my first notification!")
.SetDefaults (NotificationDefaults.Sound)
.SetSmallIcon (Resource.Drawable.ic_notification);
Bu çağrısı, SetDefaults
bildirim yayımlandığında cihazın bir ses çalmasına neden olur. Cihazın bir ses çalmak yerine titreşime geçmesini istiyorsanız, NotificationDefaults.Vibrate
SetDefaults.
cihazın bir ses çalmasını ve cihazı titreşime geçirmesini istiyorsanız, her iki bayrağı da öğesine SetDefaults
geçirebilirsiniz:
builder.SetDefaults (NotificationDefaults.Sound | NotificationDefaults.Vibrate);
Çalınacak sesi belirtmeden sesi etkinleştirirseniz, Android varsayılan sistem bildirim sesini kullanır. Ancak, bildirim oluşturucusunun SetSound yöntemini çağırarak çalınacak sesi değiştirebilirsiniz. Örneğin, alarm sesini bildiriminizle (varsayılan bildirim sesi yerine) çalmak için Zil SesiManager'dan alarm sesinin URI'sini SetSound
alabilir ve öğesine geçirebilirsiniz:
builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Alarm));
Alternatif olarak, bildiriminiz için sistem varsayılan zil sesi sesini kullanabilirsiniz:
builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Ringtone));
Bir bildirim nesnesi oluşturduktan sonra bildirim nesnesinde bildirim özelliklerini ayarlamak mümkündür (bunları yöntemler aracılığıyla NotificationCompat.Builder
önceden yapılandırmak yerine). Örneğin, bildirimde SetDefaults
titreşimi etkinleştirmek için yöntemini çağırmak yerine bildirimin Defaults özelliğinin bit bayrağını doğrudan değiştirebilirsiniz:
// Build the notification:
Notification notification = builder.Build();
// Turn on vibrate:
notification.Defaults |= NotificationDefaults.Vibrate;
Bu örnek, bildirim yayımlandığında cihazın titreşmesine neden olur.
Bildirimi güncelleştirme
Bir bildirimin içeriğini yayımlandıktan sonra güncelleştirmek istiyorsanız, yeni bir bildirim nesnesi oluşturmak için mevcut NotificationCompat.Builder
nesneyi yeniden kullanabilir ve bu bildirimi son bildirimin tanımlayıcısıyla yayımlayabilirsiniz. Örneğin:
// Update the existing notification builder content:
builder.SetContentTitle ("Updated Notification");
builder.SetContentText ("Changed to this message.");
// Build a notification object with updated content:
notification = builder.Build();
// Publish the new notification with the existing ID:
notificationManager.Notify (notificationId, notification);
Bu örnekte, var olan NotificationCompat.Builder
nesne farklı bir başlık ve iletiye sahip yeni bir bildirim nesnesi oluşturmak için kullanılır.
Yeni bildirim nesnesi, önceki bildirimin tanımlayıcısı kullanılarak yayımlanır ve bu, daha önce yayımlanan bildirimin içeriğini güncelleştirir:
Önceki bildirimin gövdesi yeniden kullanılır; bildirim çekmecesinde görüntülenirken yalnızca bildirimin başlığı ve metni değişir. Başlık metni "Örnek Bildirim" yerine "Güncelleştirilmiş Bildirim" olarak, ileti metni ise "Merhaba Dünya! Bu, "Bu iletiye değiştirildi"ye ilk bildirimim.
Üç şeyden biri gerçekleşene kadar bildirim görünür durumda kalır:
Kullanıcı bildirimi kapatıyor (veya Tümünü Temizle'ye dokunun).
Uygulama, bildirim yayımlandığında atanan benzersiz bildirim kimliğini geçirerek öğesine bir çağrı
NotificationManager.Cancel
yapar.Uygulama çağrısında bulunur
NotificationManager.CancelAll
.
Android bildirimlerini güncelleştirme hakkında daha fazla bilgi için bkz . Bildirimi Değiştirme.
Bildirimden etkinlik başlatma
Android'de, bir bildirimin bir eylemle (kullanıcı bildirime dokunduğunda başlatılan bir etkinlik) ilişkilendirilmesi yaygındır. Bu etkinlik başka bir uygulamada, hatta başka bir görevde bulunabilir. Bildirime eylem eklemek için PendingIntent nesnesi oluşturur ve bildirimiyle ilişkilendirirsinizPendingIntent
. A PendingIntent
, alıcı uygulamasının gönderen uygulamanın izinleriyle önceden tanımlanmış bir kod parçası çalıştırmasına olanak tanıyan özel bir amaç türüdür. Kullanıcı bildirime dokunduğunda, Android tarafından PendingIntent
belirtilen etkinliği başlatır.
Aşağıdaki kod parçacığında, kaynak uygulamanın MainActivity
etkinliğini başlatacak bir PendingIntent
ile nasıl bildirim oluşturulacağı gösterilmektedir:
// Set up an intent so that tapping the notifications returns to this app:
Intent intent = new Intent (this, typeof(MainActivity));
// Create a PendingIntent; we're only using one PendingIntent (ID = 0):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
PendingIntent.GetActivity (this, pendingIntentId, intent, PendingIntentFlags.OneShot);
// Instantiate the builder and set notification elements, including pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.SetContentIntent (pendingIntent)
.SetContentTitle ("Sample Notification")
.SetContentText ("Hello World! This is my first action notification!")
.SetSmallIcon (Resource.Drawable.ic_notification);
// Build the notification:
Notification notification = builder.Build();
// Get the notification manager:
NotificationManager notificationManager =
GetSystemService (Context.NotificationService) as NotificationManager;
// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);
Bu kod, bildirim nesnesine eklenmesi dışında PendingIntent
önceki bölümdeki bildirim koduna çok benzer. Bu örnekte , PendingIntent
bildirim oluşturucusunun SetContentIntent yöntemine geçirilmeden önce kaynak uygulamanın etkinliğiyle ilişkilendirilir. bayrağı PendingIntentFlags.OneShot
yöntemine PendingIntent.GetActivity
geçirilir, böylece PendingIntent
yalnızca bir kez kullanılır. Bu kod çalıştırıldığında aşağıdaki bildirim görüntülenir:
Bu bildirime dokunduğunuzda kullanıcı, kaynak etkinliğe geri döner.
Üretim uygulamasında, kullanıcı bildirim etkinliğinde Geri düğmesine bastığında uygulamanızın arka yığını işlemesi gerekir (Android görevleri ve arka yığın hakkında bilginiz yoksa bkz. Görevler ve Geri Yığını).
Çoğu durumda, bildirim etkinliğinden geriye doğru gezinmek kullanıcıyı uygulamadan ve Giriş ekranına geri döndürmelidir. Arka yığını yönetmek için uygulamanız TaskStackBuilder sınıfını kullanarak arka yığınla bir PendingIntent
oluşturur.
Gerçek dünyada dikkat edilmesi gereken bir diğer nokta da, kaynak etkinliğin bildirim etkinliğine veri göndermesi gerekebileceğidir. Örneğin, bildirim bir kısa mesaj geldiğini gösterebilir ve bildirim etkinliği (ileti görüntüleme ekranı), iletiyi kullanıcıya görüntülemek için iletinin kimliğini gerektirir. oluşturan PendingIntent
etkinlik Intent.PutExtra yöntemini kullanarak bu verilerin bildirim etkinliğine geçirilmesi için amada veri (örneğin, bir dize) ekleyebilir.
Aşağıdaki kod örneği, arka yığını yönetmek için nasıl kullanılacağını TaskStackBuilder
gösterir ve adlı SecondActivity
bir bildirim etkinliğine tek bir ileti dizesi gönderme örneği içerir:
// Setup an intent for SecondActivity:
Intent secondIntent = new Intent (this, typeof(SecondActivity));
// Pass some information to SecondActivity:
secondIntent.PutExtra ("message", "Greetings from MainActivity!");
// Create a task stack builder to manage the back stack:
TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);
// Add all parents of SecondActivity to the stack:
stackBuilder.AddParentStack (Java.Lang.Class.FromType (typeof (SecondActivity)));
// Push the intent that starts SecondActivity onto the stack:
stackBuilder.AddNextIntent (secondIntent);
// Obtain the PendingIntent for launching the task constructed by
// stackbuilder. The pending intent can be used only once (one shot):
const int pendingIntentId = 0;
PendingIntent pendingIntent =
stackBuilder.GetPendingIntent (pendingIntentId, PendingIntentFlags.OneShot);
// Instantiate the builder and set notification elements, including
// the pending intent:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.SetContentIntent (pendingIntent)
.SetContentTitle ("Sample Notification")
.SetContentText ("Hello World! This is my second action notification!")
.SetSmallIcon (Resource.Drawable.ic_notification);
// Build the notification:
Notification notification = builder.Build();
// Get the notification manager:
NotificationManager notificationManager =
GetSystemService (Context.NotificationService) as NotificationManager;
// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId, notification);
Bu kod örneğinde uygulama iki etkinlik içerir: MainActivity
(yukarıdaki bildirim kodunu içerir) ve SecondActivity
kullanıcının bildirime dokunduktan sonra gördüğü ekran. Bu kod çalıştırıldığında, basit bir bildirim (önceki örneğe benzer) sunulur. Bildirime dokunulduğunda kullanıcı ekrana gelir SecondActivity
:
Dize iletisi (amacın PutExtra
yöntemine geçirilir) şu kod satırı aracılığıyla alınır SecondActivity
:
// Get the message from the intent:
string message = Intent.Extras.GetString ("message", "");
Bu alınan "MainActivity'den selamlar!" iletisi, yukarıdaki ekran görüntüsünde SecondActivity
gösterildiği gibi ekranda görüntülenir. Kullanıcı içindeyken Geri düğmesine bastığındaSecondActivity
, gezinti uygulamanın dışına çıkar ve uygulamanın başlatılmasından önce ekrana geri döner.
Bekleyen amaçlar oluşturma hakkında daha fazla bilgi için bkz . PendingIntent.
Temel bildirimin ötesinde
Bildirimler, Android'de varsayılan olarak basit bir temel düzen biçimine sahiptir, ancak ek NotificationCompat.Builder
yöntem çağrıları yaparak bu temel biçimi geliştirebilirsiniz. Bu bölümde, bildiriminize büyük bir fotoğraf simgesi eklemeyi öğrenecek ve genişletilmiş düzen bildirimleri oluşturma örneklerini göreceksiniz.
Büyük simge biçimi
Android bildirimleri genellikle kaynak uygulamanın simgesini (bildirimin sol tarafında) görüntüler. Ancak bildirimler, standart küçük simge yerine bir resim veya fotoğraf (büyük bir simge) görüntüleyebilir. Örneğin, bir mesajlaşma uygulaması, uygulama simgesi yerine gönderenin fotoğrafını görüntüleyebilir.
Aşağıda temel bir Android 5.0 bildirimi örneği verilmiştir; yalnızca küçük uygulama simgesini görüntüler:
Burada, büyük bir simge görüntülemek üzere değiştirdikten sonra bildirimin ekran görüntüsü yer alır. Xamarin kod maymunu görüntüsünden oluşturulan bir simge kullanılır:
Büyük simge biçiminde bir bildirim sunulduğunda, küçük uygulama simgesinin büyük simgenin sağ alt köşesinde rozet olarak görüntülendiğine dikkat edin.
Bir görüntüyü bildirimde büyük bir simge olarak kullanmak için bildirim oluşturucusunun SetLargeIcon yöntemini çağırır ve görüntünün bit eşlemini geçirirsiniz. aksine SetSmallIcon
, SetLargeIcon
yalnızca bit eşlem kabul eder. Görüntü dosyasını bit eşlem haline dönüştürmek için BitmapFactory sınıfını kullanırsınız. Örneğin:
builder.SetLargeIcon (BitmapFactory.DecodeResource (Resources, Resource.Drawable.monkey_icon));
Bu örnek kod Resources/drawable/monkey_icon.png konumunda görüntü dosyasını açar, bir bit eşlem olarak dönüştürür ve sonuçta elde edilen bit eşlemi öğesine NotificationCompat.Builder
geçirir. Genellikle, kaynak görüntü çözünürlüğü küçük simgeden daha büyüktür, ancak çok büyük değildir. Çok büyük bir görüntü, bildirimin gönderilmesini geciktirebilecek gereksiz yeniden boyutlandırma işlemlerine neden olabilir.
Büyük metin stili
Büyük Metin stili, bildirimlerde uzun iletileri görüntülemek için kullandığınız genişletilmiş bir düzen şablonudur. Tüm genişletilmiş düzen bildirimleri gibi Büyük Metin bildirimi de başlangıçta küçük bir sunu biçiminde görüntülenir:
Bu biçimde, iletinin yalnızca bir alıntısı gösterilir ve iki noktayla sonlandırılır. Kullanıcı bildirimde aşağı doğru sürüklendiğinde, bildirim iletisinin tamamını göstermek için genişler:
Bu genişletilmiş düzen biçimi, bildirimin en altındaki özet metni de içerir. Büyük Metin bildiriminin en yüksek yüksekliği 256 dp'dir.
Büyük Metin bildirimi oluşturmak için, daha önce olduğu gibi bir NotificationCompat.Builder
nesnenin örneğini oluşturur ve ardından bir BigTextStyle nesnesi oluşturup nesneye NotificationCompat.Builder
eklersiniz. Örnek aşağıda verilmiştir:
// Instantiate the Big Text style:
Notification.BigTextStyle textStyle = new Notification.BigTextStyle();
// Fill it with text:
string longTextMessage = "I went up one pair of stairs.";
longTextMessage += " / Just like me. ";
//...
textStyle.BigText (longTextMessage);
// Set the summary text:
textStyle.SetSummaryText ("The summary text goes here.");
// Plug this style into the builder:
builder.SetStyle (textStyle);
// Create the notification and publish it ...
Bu örnekte, ileti metni ve özet metni nesneye geçirilmeden önce nesnede BigTextStyle
(textStyle
) depolanır NotificationCompat.Builder.
Resim stili
Görüntü stili (Büyük Resim stili olarak da adlandırılır), bildirimin gövdesinde görüntü görüntülemek için kullanabileceğiniz genişletilmiş bir bildirim biçimidir. Örneğin, bir ekran görüntüsü uygulaması veya fotoğraf uygulaması, kullanıcıya yakalanan son görüntünün bildirimini sağlamak için Görüntü bildirim stilini kullanabilir. Görüntü bildiriminin en yüksek yüksekliğinin 256 dp olduğunu unutmayın. Android, kullanılabilir bellek sınırları içinde görüntüyü bu maksimum yükseklik kısıtlamasına sığacak şekilde yeniden boyutlandıracaktır.
Tüm genişletilmiş düzen bildirimleri gibi, Görüntü bildirimleri de ilk olarak eşlik eden ileti metninin alıntısını görüntüleyen kompakt bir biçimde görüntülenir:
Kullanıcı Görüntü bildiriminde aşağı doğru sürüklendiğinde, bir görüntüyü ortaya çıkarmak için genişler. Örneğin, önceki bildirimin genişletilmiş sürümü aşağıda verilmiştir:
Bildirim sıkıştırılmış biçimde görüntülendiğinde bildirim metnini (daha önce gösterildiği gibi bildirim oluşturucusunun SetContentText
yöntemine geçirilen metin) görüntülediğine dikkat edin. Ancak, bildirim görüntüyü ortaya çıkarmak için genişletildiğinde, resmin üzerinde özet metni görüntüler.
Görüntü bildirimi oluşturmak için, bir NotificationCompat.Builder
nesnenin örneğini daha önce olduğu gibi oluşturur ve sonra nesnesine NotificationCompat.Builder
bir BigPictureStyle nesnesi oluşturup eklersiniz. Örneğin:
// Instantiate the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();
// Convert the image to a bitmap before passing it into the style:
picStyle.BigPicture (BitmapFactory.DecodeResource (Resources, Resource.Drawable.x_bldg));
// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("The summary text goes here.");
// Plug this style into the builder:
builder.SetStyle (picStyle);
// Create the notification and publish it ...
SetLargeIcon
yöntemi NotificationCompat.Builder
gibi BigPicture yöntemi BigPictureStyle
de bildirimin gövdesinde görüntülemek istediğiniz görüntünün bit eşlemini gerektirir. Bu örnekte, DecodeResource yöntemi BitmapFactory
Resources/drawable/x_bldg.png konumunda bulunan görüntü dosyasını okur ve bir bit eşlem haline dönüştürür.
Kaynak olarak paketlenmeyen görüntüleri de görüntüleyebilirsiniz. Örneğin, aşağıdaki örnek kod yerel SD karttan bir görüntüyü yükler ve görüntü bildiriminde görüntüler:
// Using the Image (Big Picture) style:
Notification.BigPictureStyle picStyle = new Notification.BigPictureStyle();
// Read an image from the SD card, subsample to half size:
BitmapFactory.Options options = new BitmapFactory.Options();
options.InSampleSize = 2;
string imagePath = "/sdcard/Pictures/my-tshirt.jpg";
picStyle.BigPicture (BitmapFactory.DecodeFile (imagePath, options));
// Set the summary text that will appear with the image:
picStyle.SetSummaryText ("Check out my new T-Shirt!");
// Plug this style into the builder:
builder.SetStyle (picStyle);
// Create notification and publish it ...
Bu örnekte , /sdcard/Pictures/my-tshirt.jpg konumunda bulunan görüntü dosyası yüklenir, özgün boyutunun yarısına yeniden boyutlandırılır ve bildirimde kullanılmak üzere bir bit eşlem haline dönüştürülür:
Görüntü dosyasının boyutunu önceden bilmiyorsanız, bitmapFactory.DecodeFile çağrısının bir özel durum işleyicisinde sarmalanması iyi bir fikirdir; görüntü Android'in yeniden boyutlandırılamayacak kadar büyük olması durumunda bir OutOfMemoryError
özel durum oluşturulabilir.
Büyük bit eşlem görüntülerini yükleme ve kodunu çözme hakkında daha fazla bilgi için bkz . Büyük Bit Eşlemleri Verimli Bir Şekilde Yükleme.
Gelen kutusu stili
Gelen Kutusu biçimi, bildirimin gövdesinde ayrı metin satırları (e-posta gelen kutusu özeti gibi) görüntülemeye yönelik genişletilmiş bir düzen şablonudur. Gelen Kutusu biçim bildirimi ilk olarak sıkıştırılmış biçimde görüntülenir:
Kullanıcı bildirimde aşağı doğru sürüklendiğinde, aşağıdaki ekran görüntüsünde gösterildiği gibi bir e-posta özeti göstermek için genişler:
Gelen Kutusu bildirimi oluşturmak için, daha önce olduğu gibi bir NotificationCompat.Builder
nesne örneği oluşturur ve nesnesine NotificationCompat.Builder
bir InboxStyle nesnesi eklersiniz. Örnek aşağıda verilmiştir:
// Instantiate the Inbox style:
Notification.InboxStyle inboxStyle = new Notification.InboxStyle();
// Set the title and text of the notification:
builder.SetContentTitle ("5 new messages");
builder.SetContentText ("chimchim@xamarin.com");
// Generate a message summary for the body of the notification:
inboxStyle.AddLine ("Cheeta: Bananas on sale");
inboxStyle.AddLine ("George: Curious about your blog post");
inboxStyle.AddLine ("Nikko: Need a ride to Evolve?");
inboxStyle.SetSummaryText ("+2 more");
// Plug this style into the builder:
builder.SetStyle (inboxStyle);
Bildirim gövdesine yeni metin satırları eklemek için nesnenin Addline yöntemini InboxStyle
çağırın (Gelen Kutusu bildiriminin en yüksek yüksekliği 256 dp'dir). Büyük Metin stilinin aksine, Gelen Kutusu stilinin bildirim gövdesindeki tek tek metin satırlarını desteklediğini unutmayın.
Tek tek metin satırlarını genişletilmiş biçimde görüntülemesi gereken tüm bildirimler için Gelen Kutusu stilini de kullanabilirsiniz. Örneğin, Gelen Kutusu bildirim stili birden çok bekleyen bildirimi özet bildirimde birleştirmek için kullanılabilir. Tek bir Gelen Kutusu stil bildirimini yeni bildirim içeriği satırlarıyla güncelleştirebilirsiniz (yukarıdaki Bildirim Güncelleştirme bölümüne bakın), yeni, çoğunlukla benzer bildirimlerin sürekli akışını oluşturmak yerine.
Meta verileri yapılandırma
NotificationCompat.Builder
, bildiriminizle ilgili meta verileri ayarlamak için çağırabileceğiniz öncelik, görünürlük ve kategori gibi yöntemler içerir. Android, bildirimlerin nasıl ve ne zaman görüntüleneceğini belirlemek için kullanıcı tercih ayarlarıyla birlikte bu bilgileri kullanır.
Öncelik ayarları
Android 7.1 ve daha düşük sürümlerde çalışan uygulamaların önceliği doğrudan bildirimin üzerinde ayarlaması gerekir. Bildirimin öncelik ayarı, bildirim yayımlandığında iki sonucu belirler:
Bildirimin diğer bildirimlerle ilgili olarak göründüğü yer. Örneğin, yüksek öncelikli bildirimler, her bildirimin ne zaman yayımlandığına bakılmaksızın bildirimler çekmecesinde düşük öncelikli bildirimlerin üzerinde sunulur.
Bildirimin Uyarı bildirimi biçiminde görüntülenip görüntülenmeyeceği (Android 5.0 ve üzeri). Uyarı bildirimleri olarak yalnızca yüksek ve en yüksek öncelikli bildirimler görüntülenir.
Xamarin.Android, bildirim önceliğini ayarlamak için aşağıdaki numaralandırmaları tanımlar:
NotificationPriority.Max
– Kullanıcıyı acil veya kritik bir duruma (örneğin, gelen arama, sıralı yol tarifleri veya acil durum uyarısı) uyarır. Android 5.0 ve üzeri cihazlarda, en yüksek öncelik bildirimleri Uyarı biçiminde görüntülenir.NotificationPriority.High
– Kullanıcıyı önemli olaylardan (önemli e-postalar veya gerçek zamanlı sohbet iletilerinin gelmesi gibi) haberdar eder. Android 5.0 ve üzeri cihazlarda, yüksek öncelikli bildirimler Uyarı biçiminde görüntülenir.NotificationPriority.Default
– Kullanıcıya orta düzeyde önem derecesine sahip koşulları bildirir.NotificationPriority.Low
– Kullanıcının bilgilendirilmesi gereken acil olmayan bilgiler için (örneğin, yazılım güncelleştirme anımsatıcıları veya sosyal ağ güncelleştirmeleri).NotificationPriority.Min
– Kullanıcının yalnızca bildirimleri görüntülerken fark ettiğini arka plan bilgileri için (örneğin, konum veya hava durumu bilgileri).
Bildirimin önceliğini ayarlamak için, öncelik düzeyini geçirerek nesnesinin NotificationCompat.Builder
SetPriority yöntemini çağırın. Örneğin:
builder.SetPriority (NotificationPriority.High);
Aşağıdaki örnekte, bildirim çekmecesinin üst kısmında "Önemli bir ileti!" adlı yüksek öncelikli bildirim görüntülenir:
Bu yüksek öncelikli bir bildirim olduğundan, Android 5.0'da kullanıcının geçerli etkinlik ekranının üzerinde Bir Uyarı bildirimi olarak da görüntülenir:
Sonraki örnekte düşük öncelikli "Gün için düşünülmüş" bildirimi, daha yüksek öncelikli bir pil düzeyi bildirimi altında görüntülenir:
"Gün için düşünülmüş" bildirimi düşük öncelikli bir bildirim olduğundan, Android bunu Uyarı biçiminde görüntülemez.
Not
Android 8.0 ve üzeri sürümlerde bildirim kanalının ve kullanıcı ayarlarının önceliği bildirimin önceliğini belirler.
Görünürlük ayarları
Android 5.0 sürümünden itibaren, güvenli kilit ekranında ne kadar bildirim içeriğinin görüneceğini denetlemek için görünürlük ayarı kullanılabilir. Xamarin.Android, bildirim görünürlüğünü ayarlamak için aşağıdaki numaralandırmaları tanımlar:
NotificationVisibility.Public
– Bildirimin tüm içeriği güvenli kilit ekranında görüntülenir.NotificationVisibility.Private
– Güvenli kilit ekranında (bildirim simgesi ve bunu yayınlayan uygulamanın adı gibi) yalnızca temel bilgiler görüntülenir, ancak bildirimin diğer ayrıntıları gizlenir. Tüm bildirimler varsayılan olarak olurNotificationVisibility.Private
.NotificationVisibility.Secret
– Güvenli kilit ekranında hiçbir şey görüntülenmez, bildirim simgesi bile görüntülenmez. Bildirim içeriği yalnızca kullanıcı cihazın kilidini açtıktan sonra kullanılabilir.
Bir bildirimin görünürlüğünü ayarlamak için uygulamalar, görünürlük ayarını geçirerek nesnesinin yöntemini NotificationCompat.Builder
çağırırSetVisibility
. Örneğin, bu çağrısı SetVisibility
bildirimini Private
yapar:
builder.SetVisibility (NotificationVisibility.Private);
Bir Private
bildirim gönderildiğinde, güvenli kilit ekranında yalnızca uygulamanın adı ve simgesi görüntülenir. Kullanıcı, bildirim iletisi yerine "Bu bildirimi görmek için cihazınızın kilidini açın" ifadesini görür:
Bu örnekte NotificationsLab, kaynak uygulamanın adıdır. Bildirimin bu düzeltilmiş sürümü yalnızca Kilit ekranı güvenli olduğunda (PIN, desen veya parola ile güvenlidir) görüntülenir; kilit ekranı güvenli değilse, bildirimin tüm içeriği kilit ekranında kullanılabilir.
Kategori ayarları
Android 5.0'da başlayarak, önceden tanımlanmış kategoriler bildirimleri sıralamak ve filtrelemek için kullanılabilir. Xamarin.Android, bu kategoriler için aşağıdaki numaralandırmaları sağlar:
Notification.CategoryCall
– Gelen telefon görüşmesi.Notification.CategoryMessage
– Gelen kısa mesaj.Notification.CategoryAlarm
– Bir alarm koşulu veya süre sonu.Notification.CategoryEmail
– Gelen e-posta iletisi.Notification.CategoryEvent
– Takvim etkinliği.Notification.CategoryPromo
– Tanıtım amaçlı bir mesaj veya reklam.Notification.CategoryProgress
– Arka plan işleminin ilerleme durumu.Notification.CategorySocial
– Sosyal ağ güncelleştirmesi.Notification.CategoryError
– Arka plan işlemi veya kimlik doğrulama işlemi hatası.Notification.CategoryTransport
– Medya kayıttan yürütme güncelleştirmesi.Notification.CategorySystem
– Sistem kullanımı (sistem veya cihaz durumu) için ayrılmıştır.Notification.CategoryService
– Arka plan hizmetinin çalıştığını gösterir.Notification.CategoryRecommendation
– Çalışmakta olan uygulamayla ilgili bir öneri iletisi.Notification.CategoryStatus
– Cihaz hakkındaki bilgiler.
Bildirimler sıralandığında, bildirimin önceliği kategori ayarından önceliklidir. Örneğin, yüksek öncelikli bir bildirim, kategoriye Promo
ait olsa bile Uyarı olarak görüntülenir. Bildirimin kategorisini ayarlamak için, kategori ayarını geçirerek nesnesinin yöntemini NotificationCompat.Builder
çağırırsınızSetCategory
. Örneğin:
builder.SetCategory (Notification.CategoryCall);
Rahatsız etmeyin özelliği (Android 5.0'daki yenilikler) bildirimleri kategorilere göre filtreler. Örneğin, Ayarlar'daki Rahatsız etmeyin ekranı, kullanıcının telefon aramaları ve mesajlar için bildirimleri muaf tutmasına olanak tanır:
Kullanıcı, telefon aramaları dışında tüm kesintileri engellemek için Rahatsız etmeyin'i yapılandırdığında (yukarıdaki ekran görüntüsünde gösterildiği gibi), Android, cihaz Rahatsız etmeyin modundayken kategori ayarına Notification.CategoryCall
sahip bildirimlerin sunulmasına izin verir. Bildirimlerin Rahatsız etmeyin modunda hiçbir zaman engellenmediğini Notification.CategoryAlarm
unutmayın.
Bildirim stilleri
ile NotificationCompat.Builder
Büyük Metin, Görüntü veya Gelen Kutusu stil bildirimleri oluşturmak için uygulamanızın bu stillerin uyumluluk sürümlerini kullanması gerekir. Örneğin, Büyük Metin stilini kullanmak için örneğiNotificationCompat.BigTextstyle
:
NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle();
// Plug this style into the builder:
builder.SetStyle (textStyle);
Benzer şekilde, uygulamanız sırasıyla Gelen Kutusu ve Görüntü stilleri için ve NotificationCompat.BigPictureStyle
kullanabilirNotificationCompat.InboxStyle
.
Bildirim önceliği ve kategorisi
NotificationCompat.Builder
SetPriority
yöntemini destekler (Android 4.1'den itibaren kullanılabilir). Ancak, SetCategory
kategoriler Android 5.0'da kullanıma sunulan yeni bildirim meta veri sisteminin bir parçası olduğundan yöntemi tarafından NotificationCompat.Builder
desteklenmez.
Android'in kullanılamayan SetCategory
eski sürümlerini desteklemek için kodunuz, API düzeyi Android 5.0'a eşit veya bundan büyük olduğunda (API düzeyi 21) koşullu çağrı SetCategory
yapmak için çalışma zamanında API düzeyini denetleyebilir:
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
builder.SetCategory (Notification.CategoryEmail);
}
Bu örnekte uygulamanın Hedef Çerçevesi Android 5.0 ve En Düşük Android Sürümü Ise Android 4.1 (API Düzeyi 16) olarak ayarlanmıştır. SetCategory
API düzeyi 21 ve sonraki sürümlerde kullanılabildiğinden, bu örnek kod yalnızca kullanılabilir olduğunda çağırırSetCategory
; API düzeyi 21'den küçük olduğunda çağrı SetCategory
yapılmaz.
Kilit ekranı görünürlüğü
Android, Android 5.0'ın (API düzeyi 21) öncesinde kilit ekranı bildirimlerini desteklemediğinden yöntemi NotificationCompat.Builder
desteklemez SetVisibility
. için SetCategory
yukarıda açıklandığı gibi kodunuz çalışma zamanında API düzeyini denetleyebilir ve yalnızca kullanılabilir olduğunda çağrı SetVisiblity
yapabilir:
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
builder.SetVisibility (Notification.Public);
}
Özet
Bu makalede, Android'de yerel bildirimlerin nasıl oluşturulacağı açıklanmıştır. Bir bildirimin anatomisini, bildirimleri oluşturmak için nasıl kullanılacağınıNotificationCompat.Builder
, büyük simgedeki bildirimlerin nasıl stillendirildiği, Büyük Metin, Görüntü ve Gelen Kutusu biçimleri, öncelik, görünürlük ve kategori gibi bildirim meta veri ayarlarının nasıl ayarlanacağı ve bildirimden bir etkinliğin nasıl başlatılacağını açıkladı. Bu makalede ayrıca bu bildirim ayarlarının Android 5.0'da kullanıma sunulan yeni Heads-up, kilit ekranı ve Rahatsız etmeyin özellikleriyle nasıl çalıştığı açıklanmıştır. Son olarak, Android'in önceki sürümleriyle bildirim uyumluluğunu korumak için kullanmayı öğrendinsiniz NotificationCompat.Builder
.
Android için bildirim tasarlama hakkında yönergeler için bkz . Bildirimler.