Místní oznámení v Androidu
Tato část ukazuje, jak implementovat místní oznámení v Xamarin.Androidu. Vysvětluje různé prvky uživatelského rozhraní oznámení Androidu a popisuje, které rozhraní API se zabývá vytvořením a zobrazením oznámení.
Přehled místních oznámení
Android poskytuje dvě oblasti řízené systémem pro zobrazení ikon oznámení a informací o oznámeních uživateli. Při prvním publikování oznámení se jeho ikona zobrazí v oznamovací oblasti, jak je znázorněno na následujícím snímku obrazovky:
Aby uživatel získal podrobnosti o oznámení, může otevřít zásuvku oznámení (která rozbalí každou ikonu oznámení, aby zobrazila obsah oznámení) a provést všechny akce přidružené k oznámením. Následující snímek obrazovky ukazuje zásobník oznámení, který odpovídá oznamovací oblasti zobrazené výše:
Oznámení androidu používají dva typy rozložení:
Základní rozložení – kompaktní, pevný formát prezentace.
Rozbalené rozložení – formát prezentace, který se může rozšířit na větší velikost, aby se zobrazily další informace.
Každý z těchto typů rozložení (a jejich vytvoření) je vysvětlen v následujících částech.
Poznámka:
Tato příručka se zaměřuje na rozhraní API NotificationCompat z knihovny podpory Pro Android. Tato rozhraní API zajistí maximální zpětnou kompatibilitu s Androidem 4.0 (úroveň rozhraní API 14).
Základní rozložení
Všechna oznámení androidu jsou založená na základním formátu rozložení, který minimálně zahrnuje následující prvky:
Ikona oznámení, která představuje původní aplikaci nebo typ oznámení, pokud aplikace podporuje různé typy oznámení.
Název oznámení nebo jméno odesílatele, pokud je oznámení osobní zprávou.
Zpráva s oznámením
Časové razítko.
Tyto prvky jsou zobrazeny, jak je znázorněno v následujícím diagramu:
Základní rozložení jsou omezená na 64 pixelů nezávislých na hustotě (dp) ve výšce. Android ve výchozím nastavení vytvoří tento základní styl oznámení.
Oznámení můžou také zobrazit velkou ikonu, která představuje aplikaci nebo fotku odesílatele. Když se v oznámení v Androidu 5.0 a novějším použije velká ikona, zobrazí se malá ikona oznámení jako odznáček nad velkou ikonou:
Od Androidu 5.0 se oznámení můžou zobrazovat také na zamykací obrazovce:
Uživatel může poklepáním na oznámení zamykací obrazovky odemknout zařízení a přejít do aplikace, která oznámení pochází, nebo potáhnutím prstem oznámení zavřete. Aplikace můžou nastavit úroveň viditelnosti oznámení a řídit, co se zobrazuje na zamykací obrazovce, a uživatelé můžou zvolit, jestli se má v oznámeních na zamykací obrazovce zobrazovat citlivý obsah.
Android 5.0 zavedl formát prezentace s vysokou prioritou s názvem Heads-up. Oznámení o hlavě se posouvejte dolů z horní části obrazovky několik sekund a pak se vraťte zpět do oznamovací oblasti:
Předem připravená oznámení umožňují uživatelskému rozhraní systému umístit důležité informace před uživatele bez narušení stavu aktuálně spuštěné aktivity.
Android obsahuje podporu pro metadata oznámení, aby bylo možné oznámení řadit a zobrazovat inteligentně. Metadata oznámení také řídí, jak se oznámení zobrazují na zamykací obrazovce a ve formátu Heads-up. Aplikace můžou nastavit následující typy metadat oznámení:
Priorita – Úroveň priority určuje, jak a kdy se zobrazují oznámení. Například v Androidu 5.0 se oznámení s vysokou prioritou zobrazují jako oznámení typu Heads-up.
Viditelnost – Určuje, kolik obsahu oznámení se má zobrazit, když se oznámení zobrazí na zamykací obrazovce.
Kategorie – Informuje systém, jak zpracovat oznámení za různých okolností, například když je zařízení v režimu Nerušit .
Poznámka:
Viditelnost a kategorie byly zavedeny v Androidu 5.0 a nejsou k dispozici v dřívějších verzích Androidu. Od Androidu 8.0 se kanály oznámení používají k řízení způsobu zobrazování oznámení uživateli.
Rozbalené rozložení
Od Androidu 4.1 je možné nakonfigurovat oznámení s rozšířenými styly rozložení, které uživateli umožňují rozšířit výšku oznámení, aby zobrazila další obsah. Například následující příklad znázorňuje rozšířené oznámení rozložení v kontraktovaného režimu:
Když se toto oznámení rozbalí, zobrazí se celá zpráva:
Android podporuje tři rozšířené styly rozložení pro oznámení s jednou událostí:
Big Text – V kontraktované režimu zobrazí výňatek prvního řádku zprávy následovaný dvěma tečkami. V rozšířeném režimu se zobrazí celá zpráva (jak je vidět v předchozím příkladu).
Doručená pošta – V režimu kontraktu se zobrazí počet nových zpráv. V rozšířeném režimu zobrazí první e-mailovou zprávu nebo seznam zpráv ve složce Doručená pošta.
Obrázek – V režimu kontraktu se zobrazí pouze text zprávy. V rozšířeném režimu zobrazí text a obrázek.
Kromě základního oznámení (dále v tomto článku) vysvětluje, jak vytvořit oznámení big text, doručené pošty a obrázku .
Kanály oznámení
Od Androidu 8.0 (Oreo) můžete pomocí funkce kanály oznámení vytvořit uživatelsky přizpůsobitelný kanál pro každý typ oznámení, které chcete zobrazit. Kanály oznámení umožňují seskupit oznámení tak, aby všechna oznámení odesílaná do kanálu vykazovala stejné chování. Můžete mít například kanál oznámení, který je určený pro oznámení, která vyžadují okamžitou pozornost, a samostatný "tišší" kanál, který se používá pro informační zprávy.
Aplikace YouTube nainstalovaná s Androidem Oreo obsahuje dvě kategorie oznámení: Stažení oznámení a obecná oznámení:
Každá z těchto kategorií odpovídá kanálu oznámení. Aplikace YouTube implementuje kanál Pro stahování oznámení a kanál Obecných oznámení . Uživatel může klepnout na Stáhnout oznámení, která zobrazí obrazovku nastavení pro kanál oznámení aplikace ke stažení:
Na této obrazovce může uživatel změnit chování kanálu pro stahování oznámení následujícím způsobem:
Nastavte úroveň důležitosti na Urgent, High, Medium nebo Low, která konfiguruje úroveň zvuku a vizuálního přerušení.
Zapněte nebo vypněte tečku oznámení.
Zapněte nebo vypněte blikající světlo.
Zobrazení nebo skrytí oznámení na zamykací obrazovce
Přepište nastavení Nerušit.
Kanál Obecných oznámení má podobná nastavení:
Všimněte si, že nemáte absolutní kontrolu nad tím, jak kanály oznámení komunikují s uživatelem – uživatel může změnit nastavení libovolného kanálu oznámení na zařízení, jak je vidět na výše uvedených snímcích obrazovky. Můžete ale nakonfigurovat výchozí hodnoty (jak je popsáno níže). Jak je znázorněno v těchto příkladech, nová funkce kanálů oznámení umožňuje uživatelům jemně odstupňovanou kontrolu nad různými druhy oznámení.
Vytvoření oznámení
K vytvoření oznámení v Androidu použijete třídu NotificationCompat.Builder z balíčku NuGet Xamarin.Android.Support.v4 . Tato třída umožňuje vytvářet a publikovat oznámení ve starších verzích Androidu.
NotificationCompat.Builder
je také diskutováno.
NotificationCompat.Builder
poskytuje metody pro nastavení různých možností v oznámení, například:
Obsah, včetně názvu, textu zprávy a ikony oznámení
Styl oznámení, například Velký text, Doručená pošta nebo Styl obrázku .
Priorita oznámení: minimum, minimum, výchozí, maximum nebo maximum. Na Androidu 8.0 a vyšší je priorita nastavená prostřednictvím kanálu oznámení.
Viditelnost oznámení na zamykací obrazovce: veřejná, soukromá nebo tajná.
Metadata kategorií, která pomáhají Androidu klasifikovat a filtrovat oznámení.
Volitelný záměr, který označuje aktivitu, která se má spustit při klepnutí na oznámení.
ID kanálu oznámení, na který se oznámení publikuje (Android 8.0 a vyšší).
Po nastavení těchto možností v tvůrci vygenerujete objekt oznámení, který obsahuje nastavení. Chcete-li oznámení publikovat, předáte tento objekt oznámení správci oznámení. Android poskytuje třídu NotificationManager , která je zodpovědná za publikování oznámení a jejich zobrazení uživateli. Odkaz na tuto třídu lze získat z libovolného kontextu, jako je aktivita nebo služba.
Vytvoření kanálu oznámení
Aplikace, které běží na Androidu 8.0, musí pro oznámení vytvořit kanál oznámení. Kanál oznámení vyžaduje následující tři informace:
- Řetězec ID, který je jedinečný pro balíček, který identifikuje kanál.
- Název kanálu, který se zobrazí uživateli. Název musí být mezi 1 a 40 znaky.
- Důležitost kanálu.
Aplikace budou muset zkontrolovat verzi Androidu, na které běží. Zařízení se staršími verzemi než Android 8.0 by neměla vytvářet kanál oznámení. Následující metoda je jedním z příkladů vytvoření kanálu oznámení v aktivitě:
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);
}
Kanál oznámení by se měl vytvořit při každém vytvoření aktivity. Pro metodu CreateNotificationChannel
by měla být volána v OnCreate
metodě aktivity.
Vytvoření a publikování oznámení
Pokud chcete vygenerovat oznámení v Androidu, postupujte takto:
Vytvoření instance objektu
NotificationCompat.Builder
Voláním různých metod objektu
NotificationCompat.Builder
nastavíte možnosti oznámení.Volání Metody Sestavení objektu
NotificationCompat.Builder
vytvořit instanci objektu oznámení objektu.Zavolejte metodu Notify manažera oznámení, aby oznámení publikoval.
Pro každé oznámení musíte zadat alespoň následující informace:
Malá ikona (velikost 24 × 24 dp)
Krátký název
Text oznámení
Následující příklad kódu ukazuje, jak použít NotificationCompat.Builder
k vygenerování základního oznámení. Všimněte si, že metody podporují řetězení metod. To znamená, že NotificationCompat.Builder
každá metoda vrací objekt tvůrce, abyste mohli použít výsledek posledního volání metody k vyvolání dalšího volání metody:
// 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);
V tomto příkladu se vytvoří builder
instance nového NotificationCompat.Builder
objektu spolu s ID kanálu oznámení, který se má použít. Název a text oznámení jsou nastaveny a ikona oznámení se načte z prostředků, drawable/ic_notification.png. Volání metody tvůrce Build
oznámení vytvoří objekt oznámení s těmito nastaveními. Dalším krokem je volání Notify
metody správce oznámení. Pokud chcete najít správce oznámení, zavolejte GetSystemService
, jak je znázorněno výše.
Metoda Notify
přijímá dva parametry: identifikátor oznámení a objekt oznámení. Identifikátor oznámení je jedinečné celé číslo, které identifikuje oznámení vaší aplikaci. V tomto příkladu je identifikátor oznámení nastaven na nulu (0); V produkční aplikaci ale budete chtít každému oznámení poskytnout jedinečný identifikátor. Opětovné použití předchozí hodnoty identifikátoru ve volání způsobí Notify
přepsání posledního oznámení.
Když tento kód běží na zařízení s Androidem 5.0, vygeneruje oznámení, které vypadá jako v následujícím příkladu:
Ikona oznámení se zobrazí na levé straně oznámení – tento obrázek kruhového "i" má alfa kanál, aby Android mohl kreslit šedé kruhové pozadí za ním. Můžete také zadat ikonu bez alfa kanálu. Pokud chcete zobrazit fotografickou fotografii jako ikonu, přečtěte si část Formát velkých ikon dále v tomto tématu.
Časové razítko se nastaví automaticky, ale toto nastavení můžete přepsat voláním metody SetWhen tvůrce oznámení. Například následující příklad kódu nastaví časové razítko na aktuální čas:
builder.SetWhen (Java.Lang.JavaSystem.CurrentTimeMillis());
Povolení zvuku a vibrací
Pokud chcete, aby oznámení přehrávejte i zvuk, můžete volat metodu SetDefaults tvůrce oznámení a předat NotificationDefaults.Sound
příznak:
// 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);
Toto volání SetDefaults
způsobí, že zařízení při publikování oznámení přehraje zvuk. Pokud chcete, aby zařízení místo přehrávání zvuku vibruje, můžete ho předat NotificationDefaults.Vibrate
SetDefaults.
, pokud chcete, aby zařízení přehrálo zvuk a vibruje zařízení, můžete předat oběma příznaky SetDefaults
:
builder.SetDefaults (NotificationDefaults.Sound | NotificationDefaults.Vibrate);
Pokud povolíte zvuk bez zadání zvuku, který se má přehrát, použije Android výchozí systémový oznamovací zvuk. Můžete ale změnit zvuk, který se přehraje voláním metody SetSound tvůrce oznámení. Chcete-li například přehrát zvuk alarmu s oznámením (místo výchozího zvuku oznámení), můžete získat identifikátor URI pro zvuk alarmu z Vyzváněcího tónu a předat ho:SetSound
builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Alarm));
Případně můžete pro oznámení použít výchozí zvuk vyzváněcího tónu systému:
builder.SetSound (RingtoneManager.GetDefaultUri(RingtoneType.Ringtone));
Po vytvoření objektu oznámení je možné nastavit vlastnosti oznámení u objektu oznámení (nikoli je konfigurovat předem prostřednictvím NotificationCompat.Builder
metod). Například místo volání SetDefaults
metody pro povolení kmitání v oznámení můžete přímo upravit příznak bitu vlastnosti Defaults oznámení:
// Build the notification:
Notification notification = builder.Build();
// Turn on vibrate:
notification.Defaults |= NotificationDefaults.Vibrate;
Tento příklad způsobí, že zařízení při publikování oznámení vibruje.
Aktualizace oznámení
Pokud chcete aktualizovat obsah oznámení po jeho publikování, můžete existující objekt znovu použít NotificationCompat.Builder
k vytvoření nového objektu oznámení a publikování tohoto oznámení s identifikátorem posledního oznámení. Příklad:
// 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);
V tomto příkladu se existující NotificationCompat.Builder
objekt používá k vytvoření nového objektu oznámení s jiným názvem a zprávou.
Nový objekt oznámení se publikuje pomocí identifikátoru předchozího oznámení a tím se aktualizuje obsah dříve publikovaného oznámení:
Text předchozího oznámení se znovu použije – pouze název a text oznámení se změní, když se oznámení zobrazí v zásobníku oznámení. Text nadpisu se změní z "Ukázkové oznámení" na "Aktualizované oznámení" a text zprávy se změní z "Hello World! Toto je moje první oznámení! na "Změněno na tuto zprávu".
Oznámení zůstane viditelné, dokud se nestane jedna ze tří věcí:
Uživatel zavře oznámení (nebo klepne na Vymazat vše).
Aplikace volá
NotificationManager.Cancel
a předává jedinečné ID oznámení, které bylo přiřazeno při publikování oznámení.Aplikace volá
NotificationManager.CancelAll
.
Další informace o aktualizaci oznámení androidu najdete v tématu Úprava oznámení.
Spuštění aktivity z oznámení
V Androidu je běžné, že se oznámení přidružuje k akci – aktivita, která se spustí, když uživatel klepne na oznámení. Tato aktivita se může nacházet v jiné aplikaci nebo dokonce v jiné úloze. Chcete-li přidat akci do oznámení, vytvoříte objekt PendingIntent a přidružíte ho PendingIntent
k oznámení. A PendingIntent
je speciální typ záměru, který umožňuje aplikaci příjemce spustit předdefinovanou část kódu s oprávněními odesílající aplikace. Když uživatel klepne na oznámení, Android spustí aktivitu určenou uživatelem PendingIntent
.
Následující fragment kódu ukazuje, jak vytvořit oznámení s oznámenímPendingIntent
, které spustí aktivitu původní aplikace: MainActivity
// 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);
Tento kód je velmi podobný kódu oznámení v předchozí části s tím rozdílem PendingIntent
, že je přidán do objektu oznámení. V tomto příkladu PendingIntent
je přidružena k aktivitě původní aplikace před předáním do metody SetContentIntent tvůrce oznámení. Příznak PendingIntentFlags.OneShot
se předá PendingIntent.GetActivity
metodě tak, aby PendingIntent
se používal pouze jednou. Po spuštění tohoto kódu se zobrazí následující oznámení:
Klepnutím na toto oznámení uživatel přejde zpět na původní aktivitu.
V produkční aplikaci musí vaše aplikace zpracovat zásobník zpět, když uživatel v rámci aktivity oznámení stiskne tlačítko Zpět (pokud neznáte úlohy Androidu a zásobník zpět, přečtěte si téma Úkoly a zásobník zpět).
Ve většině případů by přechod zpět z oznamovací aktivity měl vrátit uživatele z aplikace a zpět na domovskou obrazovku. Ke správě back stacku vaše aplikace používá třídu TaskStackBuilder k vytvoření PendingIntent
se zpětným zásobníkem.
Dalším důležitým aspektem z reálného světa je, že původní aktivita může potřebovat odesílat data do aktivity oznámení. Oznámení může například znamenat, že přišla textová zpráva a aktivita oznámení (obrazovka pro zobrazení zprávy) vyžaduje ID zprávy, aby se zpráva zobrazila uživateli. Aktivita, která vytvoří PendingIntent
, může použít Intent.PutExtra metoda přidat data (například řetězec) do záměru, aby tato data byla předána aktivitě oznámení.
Následující ukázka kódu ukazuje, jak použít TaskStackBuilder
ke správě back stacku, a obsahuje příklad, jak odeslat jeden řetězec zprávy do aktivity oznámení volané SecondActivity
:
// 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);
V tomto příkladu kódu se aplikace skládá ze dvou aktivit: MainActivity
(která obsahuje výše uvedený kód oznámení) a SecondActivity
obrazovka, kterou uživatel uvidí po klepnutí na oznámení. Při spuštění tohoto kódu se zobrazí jednoduché oznámení (podobné předchozímu příkladu). Klepnutím na oznámení přejde uživatel na obrazovku SecondActivity
:
Řetězcová zpráva (předaná do metody záměru PutExtra
) se načte SecondActivity
prostřednictvím tohoto řádku kódu:
// Get the message from the intent:
string message = Intent.Extras.GetString ("message", "");
Tato načtená zpráva "Greetings from MainActivity!" se zobrazí na SecondActivity
obrazovce, jak je znázorněno na předchozím snímku obrazovky. Když uživatel stiskne tlačítko Zpět , SecondActivity
navigace přejde z aplikace a zpět na obrazovku před spuštěním aplikace.
Další informace o vytváření čekajících záměrů najdete v tématu PendingIntent.
Nad rámec základního oznámení
Oznámení ve výchozím nastavení mají jednoduchý základní formát rozložení v Androidu, ale tento základní formát můžete vylepšit provedením dalších NotificationCompat.Builder
volání metod. V této části se dozvíte, jak do oznámení přidat velkou ikonu fotky a uvidíte příklady, jak vytvořit rozšířená oznámení rozložení.
Velký formát ikony
Oznámení androidu obvykle zobrazují ikonu původní aplikace (na levé straně oznámení). Oznámení ale můžou místo standardní malé ikony zobrazit obrázek nebo fotku ( velkou ikonu). Aplikace pro zasílání zpráv může například místo ikony aplikace zobrazit fotku odesílatele.
Tady je příklad základního oznámení androidu 5.0 – zobrazuje jenom malou ikonu aplikace:
A tady je snímek obrazovky s oznámením po úpravě tak, aby zobrazoval velkou ikonu – používá ikonu vytvořenou z obrázku opice kódu Xamarin:
Všimněte si, že když se oznámení zobrazí ve velkém formátu ikon, zobrazí se malá ikona aplikace jako odznáček v pravém dolním rohu velké ikony.
Pokud chcete v oznámení použít obrázek jako velkou ikonu, zavoláte metodu SetLargeIcon tvůrce oznámení a předáte rastrový obrázek. Na rozdíl od SetSmallIcon
, SetLargeIcon
přijímá pouze rastrový obrázek. Chcete-li převést soubor obrázku na bitmapu, použijte BitmapFactory třídy. Příklad:
builder.SetLargeIcon (BitmapFactory.DecodeResource (Resources, Resource.Drawable.monkey_icon));
Tento ukázkový kód otevře soubor obrázku v umístění Resources/drawable/monkey_icon.png, převede ho na rastrový obrázek a předá výsledný rastrový obrázek NotificationCompat.Builder
. Rozlišení zdrojového obrázku je obvykle větší než malá ikona , ale ne mnohem větší. Obrázek, který je příliš velký, může způsobit zbytečné operace změny velikosti, které by mohly zpozdit publikování oznámení.
Styl velkého textu
Styl velkého textu je rozšířená šablona rozložení, kterou používáte k zobrazení dlouhých zpráv v oznámeních. Stejně jako všechna rozšířená oznámení rozložení se oznámení Big Text zpočátku zobrazí v kompaktním formátu prezentace:
V tomto formátu se zobrazí pouze výňatek zprávy, ukončený dvěma tečkami. Když uživatel přetáhne oznámení dolů, rozbalí se a zobrazí se celá zpráva s oznámením:
Tento rozšířený formát rozložení také obsahuje souhrnný text v dolní části oznámení. Maximální výška oznámení Big Text je 256 dp.
Pokud chcete vytvořit oznámení bigtextu, vytvoříte instanci objektu NotificationCompat.Builder
jako předtím a potom vytvoříte instanci objektu BigTextStyle a přidáte ho do objektuNotificationCompat.Builder
. Zde je příklad:
// 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 ...
V tomto příkladu se text zprávy a souhrnný text ukládají do objektu () před předáním do objektu BigTextStyle
(textStyle
). NotificationCompat.Builder.
Styl obrázku
Styl obrázku (označovaný také jako styl Big Picture ) je rozšířený formát oznámení, který můžete použít k zobrazení obrázku v textu oznámení. Například aplikace snímku obrazovky nebo aplikace pro fotku může použít styl oznámení obrázku , který uživateli poskytne oznámení o posledním zachyceném obrázku. Všimněte si, že maximální výška oznámení obrázku je 256 dp – Android změní velikost obrázku tak, aby se vešel do tohoto omezení maximální výšky v rámci limitů dostupné paměti.
Stejně jako všechna oznámení rozšířeného rozložení se oznámení obrázků poprvé zobrazí v kompaktním formátu, který zobrazí výňatek textu doprovodné zprávy:
Když uživatel přetáhne na oznámení obrázek dolů, rozbalí se obrázek. Tady je například rozšířená verze předchozího oznámení:
Všimněte si, že když se oznámení zobrazí v kompaktním formátu, zobrazí text oznámení (text předaný metodě tvůrce SetContentText
oznámení, jak je znázorněno výše). Když se ale oznámení rozbalí, aby se obrázek zobrazil, zobrazí se nad ním souhrnný text.
Chcete-li vytvořit oznámení Image, vytvoříte instanci objektu NotificationCompat.Builder
jako předtím a pak vytvoříte a vložíte objekt BigPictureStyle do objektuNotificationCompat.Builder
. Příklad:
// 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
Podobně jako metoda NotificationCompat.Builder
, BigPicture metoda BigPictureStyle
vyžaduje rastrový obrázek, který chcete zobrazit v těle oznámení. V tomto příkladu decodeResource metoda BitmapFactory
přečte soubor obrázku umístěný v Resources/drawable/x_bldg.png a převede ho na rastrový obrázek.
Můžete také zobrazit obrázky, které nejsou zabalené jako prostředek. Například následující ukázkový kód načte obrázek z místní karty SD a zobrazí ho v oznámení obrázku:
// 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 ...
V tomto příkladu se načte soubor obrázku umístěný v umístění /sdcard/Pictures/my-tshirt.jpg , změní se na polovinu původní velikosti a pak se převede na rastrový obrázek pro použití v oznámení:
Pokud předem neznáte velikost souboru obrázku, je vhodné zabalit volání BitmapFactory.DecodeFile do obslužné rutiny výjimky – OutOfMemoryError
pokud je obrázek příliš velký na změnu velikosti Androidu.
Další informace o načítání a dekódování velkých rastrových obrázků naleznete v tématu Efektivní načtení velkých rastrových obrázků.
Styl doručené pošty
Formát doručené pošty je rozbalená šablona rozložení určená k zobrazení samostatných řádků textu (například souhrnu doručené pošty e-mailu) v textu oznámení. Oznámení o formátu doručené pošty se poprvé zobrazí v kompaktním formátu:
Když uživatel přetáhne oznámení dolů, rozbalí se a zobrazí se souhrn e-mailů, jak je vidět na následujícím snímku obrazovky:
Chcete-li vytvořit oznámení doručené pošty , vytvoříte instanci objektu NotificationCompat.Builder
jako předtím a přidáte objekt InboxStyle do objektu NotificationCompat.Builder
. Zde je příklad:
// 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);
Pokud chcete do textu oznámení přidat nové řádky textu, zavolejte metodu Addline objektu InboxStyle
(maximální výška oznámení doručené pošty je 256 dp). Na rozdíl od stylu Big Text podporuje styl Doručená pošta jednotlivé řádky textu v textu oznámení.
Styl doručené pošty můžete použít také pro všechna oznámení, která musí zobrazovat jednotlivé řádky textu v rozšířeném formátu. Například styl oznámení doručené pošty se dá použít ke kombinování více nevyřízených oznámení do souhrnného oznámení – jedno oznámení ve stylu doručené pošty můžete aktualizovat novými řádky obsahu oznámení (viz Aktualizace oznámení výše) a negenerovat nepřetržitý proud nových, většinou podobných oznámení.
Konfigurace metadat
NotificationCompat.Builder
obsahuje metody, které můžete volat k nastavení metadat o oznámení, jako je priorita, viditelnost a kategorie. Android používá tyto informace – spolu s nastavením předvoleb uživatelů – k určení, jak a kdy se mají zobrazovat oznámení.
Nastavení priority
Aplikace běžící na Androidu 7.1 a nižší potřebují nastavit prioritu přímo na samotném oznámení. Nastavení priority oznámení určuje dva výsledky při publikování oznámení:
Kde se oznámení zobrazuje ve vztahu k jiným oznámením. Oznámení s vysokou prioritou se například zobrazují nad oznámeními s nižší prioritou v zásuvce oznámení bez ohledu na to, kdy bylo každé oznámení publikováno.
Jestli se oznámení zobrazí ve formátu oznámení heads-up (Android 5.0 a novější). Oznámení s vysokou a maximální prioritou se zobrazují jenom jako oznámení typu Heads-up.
Xamarin.Android definuje následující výčty pro nastavení priority oznámení:
NotificationPriority.Max
– Upozorní uživatele na urgentní nebo kritický stav (například příchozí hovor, směr otáčení nebo výstrahu tísňového volání). Na zařízeních s Androidem 5.0 a novějším se oznámení o maximální prioritě zobrazují ve formátu Heads-up.NotificationPriority.High
– Informuje uživatele o důležitých událostech (například o důležitých e-mailech nebo o příchodu chatových zpráv v reálném čase). Na zařízeních s Androidem 5.0 a novějším se oznámení s vysokou prioritou zobrazují ve formátu Heads-up.NotificationPriority.Default
– upozorní uživatele na podmínky, které mají střední úroveň důležitosti.NotificationPriority.Low
– Pro neodkladné informace, o které musí být uživatel informován (například připomenutí aktualizací softwaru nebo aktualizace sociálních sítí).NotificationPriority.Min
– Informace na pozadí, které si uživatel všimne, pouze při prohlížení oznámení (například informace o poloze nebo počasí).
Chcete-li nastavit prioritu oznámení, zavolejte SetPriority metoda NotificationCompat.Builder
objektu předávání úrovně priority. Příklad:
builder.SetPriority (NotificationPriority.High);
V následujícím příkladu se v horní části zásobníku oznámení zobrazí oznámení s vysokou prioritou " Důležitá zpráva!":
Vzhledem k tomu, že se jedná o oznámení s vysokou prioritou, zobrazí se také jako oznámení typu Heads-up nad obrazovkou aktuální aktivity uživatele v Androidu 5.0:
V dalším příkladu se v oznámení o úrovni baterie s vyšší prioritou zobrazí oznámení "Myslelo se na den":
Protože oznámení "Myšlenka na den" je oznámení s nízkou prioritou, Android ho nezobrazí ve formátu Heads-up.
Poznámka:
U Androidu 8.0 a vyšší bude priorita kanálu oznámení a uživatelských nastavení určovat prioritu oznámení.
Nastavení viditelnosti
Od Androidu 5.0 je k dispozici nastavení viditelnosti, které určuje, kolik obsahu oznámení se zobrazí na zabezpečené zamykací obrazovce. Xamarin.Android definuje následující výčty pro nastavení viditelnosti oznámení:
NotificationVisibility.Public
– Úplný obsah oznámení se zobrazí na zabezpečené zamykací obrazovce.NotificationVisibility.Private
– Na zabezpečené zamykací obrazovce se zobrazí jenom základní informace (například ikona oznámení a název aplikace, která ji zveřejnila), ale zbytek podrobností oznámení je skrytý. Všechna oznámení mají výchozí hodnotuNotificationVisibility.Private
.NotificationVisibility.Secret
– Na zabezpečené zamykací obrazovce se nic nezobrazuje, ani ikona oznámení. Obsah oznámení je k dispozici až po odemknutí zařízení uživatelem.
Pokud chcete nastavit viditelnost oznámení, aplikace volají SetVisibility
metodu objektu NotificationCompat.Builder
a předávají nastavení viditelnosti. Toto volání SetVisibility
například provede oznámení Private
:
builder.SetVisibility (NotificationVisibility.Private);
Private
Při publikování oznámení se na zabezpečené zamykací obrazovce zobrazí jenom název a ikona aplikace. Místo zprávy s oznámením se uživateli zobrazí "Odemknutí zařízení, aby se zobrazilo toto oznámení":
V tomto příkladu je NotificationsLab názvem původní aplikace. Tato redactovaná verze oznámení se zobrazí jenom v případě, že je zamykací obrazovka zabezpečená (tj. zabezpečená prostřednictvím KÓDU PIN, vzoru nebo hesla) – pokud zamykací obrazovka není zabezpečená, je úplný obsah oznámení k dispozici na zamykací obrazovce.
Nastavení kategorií
Od Androidu 5.0 jsou předdefinované kategorie k dispozici pro oznámení o řazení a filtrování. Xamarin.Android poskytuje následující výčty pro tyto kategorie:
Notification.CategoryCall
– Příchozí telefonní hovor.Notification.CategoryMessage
– Příchozí textová zpráva.Notification.CategoryAlarm
– Stav alarmu nebo vypršení platnosti časovače.Notification.CategoryEmail
– Příchozí e-mailová zpráva.Notification.CategoryEvent
– Událost kalendáře.Notification.CategoryPromo
– Propagační zpráva nebo reklama.Notification.CategoryProgress
– Průběh operace na pozadí.Notification.CategorySocial
– aktualizace sociálních sítí.Notification.CategoryError
– Selhání operace na pozadí nebo procesu ověřování.Notification.CategoryTransport
– Aktualizace přehrávání médií.Notification.CategorySystem
– Vyhrazeno pro použití systému (stav systému nebo zařízení).Notification.CategoryService
– Označuje, že je spuštěná služba na pozadí.Notification.CategoryRecommendation
– Zpráva doporučení týkající se aktuálně spuštěné aplikace.Notification.CategoryStatus
– Informace o zařízení.
Když jsou oznámení seřazená, priorita oznámení má přednost před nastavením kategorie. Oznámení s vysokou prioritou se například zobrazí jako heads-up, i když patří do Promo
kategorie. Chcete-li nastavit kategorii oznámení, zavoláte SetCategory
metodu NotificationCompat.Builder
objektu a předáte nastavení kategorie. Příklad:
builder.SetCategory (Notification.CategoryCall);
Funkce Nerušit (novinka v Androidu 5.0) filtruje oznámení na základě kategorií. Například obrazovka Nerušit v Nastavení umožňuje uživateli vyloučit oznámení o telefonních hovorech a zprávách:
Když uživatel nakonfiguruje Nerušit tak, aby blokoval všechna přerušení s výjimkou telefonních hovorů (jak je znázorněno na výše uvedeném snímku obrazovky), Umožňuje Android oznámení s nastavením Notification.CategoryCall
kategorie, která se zobrazí, když je zařízení v režimu Nerušit . Upozorňujeme, že Notification.CategoryAlarm
v režimu Nerušit se oznámení nikdy nezablokují.
Styly oznámení
Pokud chcete vytvořit oznámení ve stylu Velké texty, Obrázek nebo Doručená pošta , NotificationCompat.Builder
musí vaše aplikace používat verze kompatibility těchto stylů. Pokud například chcete použít styl velkého textu , vytvořte instanci NotificationCompat.BigTextstyle
:
NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle();
// Plug this style into the builder:
builder.SetStyle (textStyle);
Podobně může vaše aplikace používat NotificationCompat.InboxStyle
a NotificationCompat.BigPictureStyle
používat styly Doručená pošta a Obrázek .
Priorita a kategorie oznámení
NotificationCompat.Builder
podporuje metodu SetPriority
(k dispozici od Androidu 4.1). Metoda SetCategory
však není podporována NotificationCompat.Builder
, protože kategorie jsou součástí nového systému metadat oznámení, který byl zaveden v Androidu 5.0.
Pokud chcete podporovat starší verze Androidu, pokud SetCategory
není k dispozici, může váš kód zkontrolovat úroveň rozhraní API za běhu a podmíněně volat SetCategory
, pokud je úroveň rozhraní API rovna nebo vyšší než Android 5.0 (úroveň rozhraní API 21):
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
builder.SetCategory (Notification.CategoryEmail);
}
V tomto příkladu je cílová architektura aplikace nastavená na Android 5.0 a minimální verze Androidu je nastavená na Android 4.1 (úroveň rozhraní API 16). Protože SetCategory
je k dispozici v rozhraní API úrovně 21 a novější, bude tento ukázkový kód volat SetCategory
pouze v případě, že je k dispozici – nebude volat SetCategory
, když je úroveň rozhraní API menší než 21.
Viditelnost zamykací obrazovky
Vzhledem k tomu, že Android nepodporuje oznámení na zamykací obrazovce před Androidem 5.0 (úroveň rozhraní API 21), NotificationCompat.Builder
nepodporuje metodu SetVisibility
. Jak je vysvětleno výše SetCategory
, váš kód může zkontrolovat úroveň rozhraní API za běhu a volat SetVisiblity
pouze v případě, že je k dispozici:
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
builder.SetVisibility (Notification.Public);
}
Shrnutí
Tento článek vysvětluje, jak vytvořit místní oznámení v Androidu. Popisuje anatomii oznámení, vysvětluje, jak používat NotificationCompat.Builder
k vytváření oznámení, jak nastavit styl oznámení ve velkých ikonách, formátech Big Text, Obrázek a Doručená pošta , jak nastavit nastavení metadat oznámení, jako je priorita, viditelnost a kategorie a jak spustit aktivitu z oznámení. Tento článek také popisuje, jak tato nastavení oznámení fungují s novými funkcemi Heads-up, lock screen a Do not disturb zavedenými v Androidu 5.0. Nakonec jste se dozvěděli, jak zajistit NotificationCompat.Builder
kompatibilitu s oznámeními s dřívějšími verzemi Androidu.
Pokyny k návrhu oznámení pro Android najdete v tématu Oznámení.