public void BookPurchased(Book book) { var currentContext = Application.Context; var appIcon = BitmapFactory.DecodeResource(currentContext.Resources, Resource.Drawable.petrinkauppa); var pictureStyle = new Notification.BigPictureStyle(); pictureStyle.BigPicture(BitmapFactory.DecodeByteArray(book.Image, 0, book.Image.Length)); pictureStyle.BigLargeIcon(appIcon); pictureStyle.SetBigContentTitle(book.Name); pictureStyle.SetSummaryText(string.Format("Ostettu hintaan {1} €", book.Name, book.Price)); long[] vibrationPattern = { 100, 300, 500, 700, 1000 }; var notification = new Notification.Builder(currentContext) .SetStyle(pictureStyle) .SetPriority((int)NotificationPriority.High) .SetCategory(Notification.CategoryPromo) .SetSmallIcon(Resource.Drawable.ic_collections_bookmark_black_18dp) .SetVisibility(NotificationVisibility.Public) .SetLargeIcon(appIcon) .SetContentText("Kirja ostettu") .SetContentTitle(book.Name) .SetVibrate(vibrationPattern) .Build(); var manager = currentContext.GetSystemService(Context.NotificationService) as NotificationManager; manager.Notify(0, notification); }
private void Button_Click(object sender, EventArgs e) { notyBuilder = new Notification.Builder(this); notyBuilder.SetContentTitle("عنوان پیام"); notyBuilder.SetContentText("متن پیام در اینجا قرار میگیرد"); notyBuilder.SetSmallIcon(Resource.Drawable.noty_small_icon); notyBuilder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.noty_large_icon)); notyBuilder.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()); notyBuilder.SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate); notyBuilder.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification)); notyBuilder.SetAutoCancel(true); notyBuilder.SetPriority((int)NotificationPriority.High); if ((int)Android.OS.Build.VERSION.SdkInt >= 21) { notyBuilder.SetVisibility(NotificationVisibility.Public); notyBuilder.SetCategory(Notification.CategoryEmail); } #region BigTextStyle Notification.BigTextStyle textStyle = new Notification.BigTextStyle(); string longTextMessage = "I went up one pair of stairs."; longTextMessage += " / Just like me. "; textStyle.BigText(longTextMessage); textStyle.SetSummaryText("The summary text goes here."); //notyBuilder.SetStyle(textStyle); #endregion #region InboxStyle var inboxStyle = new Notification.InboxStyle(); 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"); notyBuilder.SetStyle(inboxStyle); #endregion #region imageStyle var imageStyle = new Notification.BigPictureStyle(); imageStyle.BigPicture(BitmapFactory.DecodeResource(Resources, Resource.Drawable.facebook)); imageStyle.SetSummaryText("+2 more"); //notyBuilder.SetStyle(imageStyle); #endregion var notification = notyBuilder.Build(); var notyManager = GetSystemService(Context.NotificationService) as NotificationManager; notyManager.Notify(notyId, notification); }
void SendNotification(RemoteMessage message) { try { var intent = new Intent(this, typeof(MainActivity)); intent.AddFlags(ActivityFlags.ClearTop); foreach (var item in message.Data) { if (item.Key == "Id") { intent.PutExtra("Id", item.Value); } if (item.Key == "Type") { intent.PutExtra("Type", item.Value); } if (item.Key == "GroupId") { intent.PutExtra("GroupId", item.Value); } } var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot); Context context = this; Android.Content.Res.Resources res = context.Resources; Bitmap aBitmap = BitmapFactory.DecodeResource(res, Resource.Drawable.Splash); // 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.Splash)); picStyle.SetSummaryText("Test"); var notificationBuilder = new Notification.Builder(this) .SetLargeIcon(aBitmap) //.SetFullScreenIntent(pendingIntent, true) .SetSmallIcon(Resource.Drawable.icon) .SetContentTitle(message.GetNotification().Title) .SetContentText(message.GetNotification().Body) .SetAutoCancel(true) .SetStyle(picStyle) .SetDefaults(NotificationDefaults.Vibrate | NotificationDefaults.Sound) .SetContentIntent(pendingIntent); var notificationManager = NotificationManager.FromContext(this); notificationManager.Notify(0, notificationBuilder.Build()); } #pragma warning disable CS0168 // The variable 'ex' is declared but never used catch (Exception ex) #pragma warning restore CS0168 // The variable 'ex' is declared but never used { } }
void SendNotification(string message, string title, string imagem = null, string tipo = null, string summary = null) { var intent = new Intent(this, typeof(MainActivity)); intent.AddFlags(ActivityFlags.ClearTop); var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot); Notification.Builder notificationBuilder = new Notification.Builder(this) .SetSmallIcon(Resource.Drawable.icon) .SetContentTitle(title) .SetContentText(message) .SetAutoCancel(true) .SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate) .SetContentIntent(pendingIntent) .SetVisibility(NotificationVisibility.Public) .SetCategory(Notification.CategoryPromo); if (tipo.Equals("1")) { var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService); notificationManager.Notify(0, notificationBuilder.Build()); } else if (tipo.Equals("2")) { var bigText = new Notification.BigTextStyle(); bigText.BigText(message); bigText.SetSummaryText(summary); notificationBuilder.SetStyle(bigText); var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService); notificationManager.Notify(0, notificationBuilder.Build()); } else if (tipo.Equals("3")) { var bigImage = new Notification.BigPictureStyle(); bigImage.BigPicture(GetImageBitmapFromUrl(imagem)); bigImage.SetSummaryText(summary); notificationBuilder.SetStyle(bigImage); var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService); notificationManager.Notify(0, notificationBuilder.Build()); } }
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView(Resource.Layout.activity_notifications); ActionBar.SetDisplayHomeAsUpEnabled(true); ActionBar.SetDisplayShowHomeEnabled(true); ActionBar.SetIcon(Android.Resource.Color.Transparent); highPriority = FindViewById <Switch> (Resource.Id.high_priority); var intent = new Intent(this, typeof(NotificationsActivity)); var contentIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.CancelCurrent); var manager = GetSystemService(Context.NotificationService) as NotificationManager; FindViewById <Button>(Resource.Id.simple).Click += (sender, e) => { manager.Cancel(0); //Generate a notification with just short text and small icon var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetContentTitle("Daniel") .SetContentText("I went to the zoo and saw a monkey!") .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if (highPriority.Checked) { notification.Defaults |= NotificationDefaults.Sound; } manager.Notify(0, notification); }; FindViewById <Button>(Resource.Id.simple_photo).Click += (sender, e) => { manager.Cancel(1); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); //Generate a notification with just short text, small icon & large icon var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(icon) .SetContentTitle("Daniel") .SetContentText("I went to the zoo and saw a monkey!") .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if (highPriority.Checked) { notification.Defaults |= NotificationDefaults.Sound; } manager.Notify(1, notification); icon.Recycle(); }; FindViewById <Button>(Resource.Id.extended).Click += (sender, e) => { manager.Cancel(2); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); //Extended with big text var message = "I went to the zoo and saw a monkey! And then I saw even more awesome stuff and itt was great and then we went back to see the monkeys again."; var style = new Notification.BigTextStyle(); style.BigText(message); style.SetSummaryText(message); var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(icon) .SetStyle(style) .SetContentTitle("Daniel") .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if (highPriority.Checked) { notification.Defaults |= NotificationDefaults.Sound; } manager.Notify(2, notification); icon.Recycle(); }; FindViewById <Button>(Resource.Id.extended_photo).Click += (sender, e) => { manager.Cancel(3); //Extended with big text var message = "I went to the zoo and saw a monkey! And then I saw even more awesome stuff and itt was great and then we went back to see the monkeys again."; var style = new Notification.BigPictureStyle(); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); style.BigPicture(icon); style.SetSummaryText(message); var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.evolve)) .SetStyle(style) .SetContentTitle("Daniel") .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if (highPriority.Checked) { notification.Defaults |= NotificationDefaults.Sound; } manager.Notify(3, notification); icon.Recycle(); }; spinner = FindViewById <Spinner>(Resource.Id.spinner_visibility); // Create an ArrayAdapter using the string array and a default spinner layout var adapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_priority, Android.Resource.Layout.SimpleSpinnerItem); // Specify the layout to use when the list of choices appears adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); // Apply the adapter to the spinner spinner.Adapter = adapter; }
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); // Set the view from the "main" layout resource SetContentView(Resource.Layout.Main); // Get the notifications manager: NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager; //.......................................................................... // Edit box: // Find the notification edit text box in the layout: notifyMsg = FindViewById <EditText>(Resource.Id.notifyText); //.......................................................................... // Selection Spinners: // The spinners in this file use the strings defined in Resources/values/arrays.xml. // Find the Style spinner in the layout and configure its adapter. Spinner styleSpinner = FindViewById <Spinner>(Resource.Id.styleSpinner); var styleAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_style, Android.Resource.Layout.SimpleSpinnerDropDownItem); styleSpinner.Adapter = styleAdapter; // Handler for Style spinner, changes the text in the text box: styleSpinner.ItemSelected += new EventHandler <AdapterView.ItemSelectedEventArgs> (styleSpinnerSelected); // Find the Visibility spinner in the layout and configure its adapter: Spinner visibilitySpinner = FindViewById <Spinner>(Resource.Id.visibilitySpinner); var visibilityAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_visibility, Android.Resource.Layout.SimpleSpinnerDropDownItem); visibilitySpinner.Adapter = visibilityAdapter; // Find the Priority spinner in the layout and configure its adapter: Spinner prioritySpinner = FindViewById <Spinner>(Resource.Id.prioritySpinner); var priorityAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_priority, Android.Resource.Layout.SimpleSpinnerDropDownItem); prioritySpinner.Adapter = priorityAdapter; // Find the Category spinner in the layout and configure its adapter: Spinner categorySpinner = FindViewById <Spinner>(Resource.Id.categorySpinner); var categoryAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_category, Android.Resource.Layout.SimpleSpinnerDropDownItem); categorySpinner.Adapter = categoryAdapter; // Handler for Style spinner: changes the text in the text box: styleSpinner.ItemSelected += new EventHandler <AdapterView.ItemSelectedEventArgs> (styleSpinnerSelected); //.......................................................................... // Option Switches: // Get large-icon, sound, and vibrate switches from the layout: Switch largeIconSw = FindViewById <Switch>(Resource.Id.largeIconSwitch); Switch soundSw = FindViewById <Switch>(Resource.Id.soundSwitch); Switch vibrateSw = FindViewById <Switch>(Resource.Id.vibrateSwitch); //.......................................................................... // Notification Launch button: // Get notification launch button from the layout: Button launchBtn = FindViewById <Button>(Resource.Id.launchButton); // Handler for the notification launch button. When this button is clicked, this // handler code takes the following steps, in order: // // 1. Instantiates the builder. // 2. Calls methods on the builder to optionally plug in the large icon, extend // the style (if called for by a spinner selection), set the visibility, set // the priority, and set the category. // 3. Uses the builder to instantiate the notification. // 4. Turns on sound and vibrate (if selected). // 5. Uses the Notification Manager to launch the notification. launchBtn.Click += delegate { // Instantiate the notification builder: Notification.Builder builder = new Notification.Builder(this) .SetContentTitle("Sample Notification") .SetContentText(notifyMsg.Text) .SetSmallIcon(Resource.Drawable.ic_notification) .SetAutoCancel(true); // Add large icon if selected: if (largeIconSw.Checked) { builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.monkey_icon)); } // Extend style based on Style spinner selection. switch (styleSpinner.SelectedItem.ToString()) { case "Big Text": // Extend the message with the big text format style. This will // use a larger screen area to display the notification text. // Set the title for demo purposes: builder.SetContentTitle("Big Text Notification"); // Using the Big Text style: var textStyle = new Notification.BigTextStyle(); // Use the text in the edit box at the top of the screen. textStyle.BigText(notifyMsg.Text); textStyle.SetSummaryText("The summary text goes here."); // Plug this style into the builder: builder.SetStyle(textStyle); break; case "Inbox": // Present the notification in inbox format instead of normal text style. // Note that this does not display the notification message entered // in the edit text box; instead, it displays the fake email inbox // summary constructed below. // Using the inbox style: var inboxStyle = new Notification.InboxStyle(); // Set the title of the notification: builder.SetContentTitle("5 new messages"); builder.SetContentText("*****@*****.**"); // Generate inbox notification text: 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); break; case "Image": // Extend the message with image (big picture) format style. This displays // the Resources/drawables/x_bldg.jpg image in the notification body. // Set the title for demo purposes: builder.SetContentTitle("Image Notification"); // Using the Big Picture style: var picStyle = new Notification.BigPictureStyle(); // Convert the image file to a bitmap before passing it into the style // (there is no exception handler since we know the size of the image): picStyle.BigPicture(BitmapFactory.DecodeResource(Resources, Resource.Drawable.x_bldg)); picStyle.SetSummaryText("The summary text goes here."); // Alternately, uncomment this code to use an image from the SD card. // (In production code, wrap DecodeFile in an exception handler in case // the image is too large and throws an out of memory exception.): // BitmapFactory.Options options = new BitmapFactory.Options(); // options.InSampleSize = 2; // string imagePath = "/sdcard/Pictures/my-tshirt.jpg"; // picStyle.BigPicture(BitmapFactory.DecodeFile(imagePath, options)); // picStyle.SetSummaryText("Check out my new T-shirt!"); // Plug this style into the builder: builder.SetStyle(picStyle); break; default: // Normal text notification is the default. break; } // Set visibility based on Visibility spinner selection: switch (visibilitySpinner.SelectedItem.ToString()) { case "Public": builder.SetVisibility(NotificationVisibility.Public); break; case "Private": builder.SetVisibility(NotificationVisibility.Private); break; case "Secret": builder.SetVisibility(NotificationVisibility.Secret); break; } // Set priority based on Priority spinner selection: switch (prioritySpinner.SelectedItem.ToString()) { case "High": builder.SetPriority((int)NotificationPriority.High); break; case "Low": builder.SetPriority((int)NotificationPriority.Low); break; case "Maximum": builder.SetPriority((int)NotificationPriority.Max); break; case "Minimum": builder.SetPriority((int)NotificationPriority.Min); break; default: builder.SetPriority((int)NotificationPriority.Default); break; } // Set category based on Category spinner selection: switch (categorySpinner.SelectedItem.ToString()) { case "Call": builder.SetCategory(Notification.CategoryCall); break; case "Message": builder.SetCategory(Notification.CategoryMessage); break; case "Alarm": builder.SetCategory(Notification.CategoryAlarm); break; case "Email": builder.SetCategory(Notification.CategoryEmail); break; case "Event": builder.SetCategory(Notification.CategoryEvent); break; case "Promo": builder.SetCategory(Notification.CategoryPromo); break; case "Progress": builder.SetCategory(Notification.CategoryProgress); break; case "Social": builder.SetCategory(Notification.CategorySocial); break; case "Error": builder.SetCategory(Notification.CategoryError); break; case "Transport": builder.SetCategory(Notification.CategoryTransport); break; case "System": builder.SetCategory(Notification.CategorySystem); break; case "Service": builder.SetCategory(Notification.CategoryService); break; case "Recommendation": builder.SetCategory(Notification.CategoryRecommendation); break; case "Status": builder.SetCategory(Notification.CategoryStatus); break; default: builder.SetCategory(Notification.CategoryStatus); break; } // Setup an intent for SecondActivity: Intent secondIntent = new Intent(this, typeof(SecondActivity)); // Pass the current notification string value to SecondActivity: secondIntent.PutExtra("message", notifyMsg.Text); // Pressing the Back button in SecondActivity exits the app: TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this); // Add the back stack for the intent: stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(SecondActivity))); // Push the intent (that starts SecondActivity) onto the stack. The // pending intent can be used only once (one shot): stackBuilder.AddNextIntent(secondIntent); const int pendingIntentId = 0; PendingIntent pendingIntent = stackBuilder.GetPendingIntent(pendingIntentId, PendingIntentFlags.OneShot); // Uncomment this code to setup an intent so that notifications return to this app: // Intent intent = new Intent (this, typeof(MainActivity)); // const int pendingIntentId = 0; // pendingIntent = PendingIntent.GetActivity (this, pendingIntentId, intent, PendingIntentFlags.OneShot); // builder.SetContentText("Hello World! This is my first action notification!"); // Launch SecondActivity when the users taps the notification: builder.SetContentIntent(pendingIntent); // Build the notification: Notification notification = builder.Build(); // Turn on sound if the sound switch is on: if (soundSw.Checked) { notification.Defaults |= NotificationDefaults.Sound; } // Turn on vibrate if the sound switch is on: if (vibrateSw.Checked) { notification.Defaults |= NotificationDefaults.Vibrate; } // Notification ID used for all notifications in this app. // Reusing the notification ID prevents the creation of // numerous different notifications as the user experiments // with different notification settings -- each launch reuses // and updates the same notification. const int notificationId = 1; // Launch notification: notificationManager.Notify(notificationId, notification); // Uncomment this code to update the notification 5 seconds later: // Thread.Sleep(5000); // builder.SetContentTitle("Updated Notification"); // builder.SetContentText("Changed to this message after five seconds."); // notification = builder.Build(); // notificationManager.Notify(notificationId, notification); }; }
protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.activity_notifications); ActionBar.SetDisplayHomeAsUpEnabled (true); ActionBar.SetDisplayShowHomeEnabled (true); ActionBar.SetIcon (Android.Resource.Color.Transparent); highPriority = FindViewById<Switch> (Resource.Id.high_priority); var intent = new Intent (this, typeof(NotificationsActivity)); var contentIntent = PendingIntent.GetActivity (this, 0, intent, PendingIntentFlags.CancelCurrent); var manager = GetSystemService (Context.NotificationService) as NotificationManager; FindViewById<Button>(Resource.Id.simple).Click += (sender, e) => { manager.Cancel(0); //Generate a notification with just short text and small icon var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetContentTitle("Daniel") .SetContentText("I went to the zoo and saw a monkey!") .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if(highPriority.Checked) notification.Defaults |= NotificationDefaults.Sound; manager.Notify(0, notification); }; FindViewById<Button>(Resource.Id.simple_photo).Click += (sender, e) => { manager.Cancel(1); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); //Generate a notification with just short text, small icon & large icon var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(icon) .SetContentTitle("Daniel") .SetContentText("I went to the zoo and saw a monkey!") .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if(highPriority.Checked) notification.Defaults |= NotificationDefaults.Sound; manager.Notify(1, notification); icon.Recycle(); }; FindViewById<Button>(Resource.Id.extended).Click += (sender, e) => { manager.Cancel(2); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); //Extended with big text var message = "I went to the zoo and saw a monkey! And then I saw even more awesome stuff and itt was great and then we went back to see the monkeys again."; var style = new Notification.BigTextStyle(); style.BigText(message); style.SetSummaryText(message); var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(icon) .SetStyle(style) .SetContentTitle("Daniel") .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if(highPriority.Checked) notification.Defaults |= NotificationDefaults.Sound; manager.Notify(2, notification); icon.Recycle(); }; FindViewById<Button>(Resource.Id.extended_photo).Click += (sender, e) => { manager.Cancel(3); //Extended with big text var message = "I went to the zoo and saw a monkey! And then I saw even more awesome stuff and itt was great and then we went back to see the monkeys again."; var style = new Notification.BigPictureStyle(); var icon = BitmapFactory.DecodeResource(Resources, Resource.Drawable.over_there); style.BigPicture(icon); style.SetSummaryText(message); var builder = new Notification.Builder(this) .SetContentIntent(contentIntent) .SetSmallIcon(Resource.Drawable.ic_notification) .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.evolve)) .SetStyle(style) .SetContentTitle("Daniel") .SetContentText(message) .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()) .SetAutoCancel(true); SetMetadata(builder); var notification = builder.Build(); if(highPriority.Checked) notification.Defaults |= NotificationDefaults.Sound; manager.Notify(3, notification); icon.Recycle(); }; spinner = FindViewById<Spinner>(Resource.Id.spinner_visibility); // Create an ArrayAdapter using the string array and a default spinner layout var adapter = ArrayAdapter.CreateFromResource(this, Resource.Array.notification_priority, Android.Resource.Layout.SimpleSpinnerItem); // Specify the layout to use when the list of choices appears adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem); // Apply the adapter to the spinner spinner.Adapter = adapter; }
protected override void OnCreate(Bundle bundle) { TabLayoutResource = Resource.Layout.tabs; ToolbarResource = Resource.Layout.toolbar; base.OnCreate(bundle); notificationManager = GetSystemService(Context.NotificationService) as NotificationManager; global::Xamarin.Forms.Forms.Init(this, bundle); var fooApp = new App(new AndroidInitializer()); #region 檢查是否是由通知開啟 App,並且依據通知,切換到適當頁面 //自訂通知被點擊後的動作 //當通知出現在通知欄之後,在習慣的趨使下,有很大的機率會被使用者點擊。 //所以應該要實作出通知被點擊後的動作,好比開啟哪個Activity之類的。 //通知被點擊後的動作可以使用PendingIntent來實作,PendingIntent並不是一個Intent,它是一個Intent的容器, // 可以傳入context物件,並以這個context的身份來做一些事情,例如開啟Activity、開啟Service,或是發送Broadcast。 // 如果要使通知可以在被點擊之後做點什麼事,可以使用Notification.Builder的setContentIntent方法來替通知加入PendingIntent fooLocalNotificationPayload = null; if (Intent.Extras != null) { if (Intent.Extras.ContainsKey("NotificationObject")) { string fooNotificationObject = Intent.Extras.GetString("NotificationObject", ""); fooLocalNotificationPayload = JsonConvert.DeserializeObject <LocalNotificationPayload>(fooNotificationObject); } } #endregion XFLocalNotificationDroid.App.fooLocalNotificationPayload = fooLocalNotificationPayload; LoadApplication(new App(new AndroidInitializer())); #region 訂閱要發送本地通知的事件 // 取得 Xamarin.Forms 中的 Prism 注入物件管理容器 IUnityContainer myContainer = (App.Current as PrismApplication).Container; var fooEvent = myContainer.Resolve <IEventAggregator>().GetEvent <LocalNotificationEvent>().Subscribe(x => { #region 建立本地訊息通知物件 Notification.Builder builder = new Notification.Builder(this) .SetContentTitle(x.ContentTitle) .SetContentText(x.ContentText) .SetSmallIcon(Resource.Drawable.ic_notification) .SetAutoCancel(true); // 決定是否要顯示大圖示 if (x.LargeIcon) { builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.monkey_icon)); } #region 針對不同通知類型作出設定 switch (x.Style) { case LocalNotificationStyleEnum.Normal: break; case LocalNotificationStyleEnum.BigText: //builder.SetContentText(x.ContentText); var textStyle = new Notification.BigTextStyle(); textStyle.BigText(x.ContentText); textStyle.SetSummaryText(x.SummaryText); builder.SetStyle(textStyle); break; case LocalNotificationStyleEnum.Inbox: var inboxStyle = new Notification.InboxStyle(); foreach (var item in x.InboxStyleList) { inboxStyle.AddLine(item); } inboxStyle.SetSummaryText(x.SummaryText); builder.SetStyle(inboxStyle); break; case LocalNotificationStyleEnum.Image: var picStyle = new Notification.BigPictureStyle(); picStyle.BigPicture(BitmapFactory.DecodeResource(Resources, Resource.Drawable.x_bldg)); picStyle.SetSummaryText(x.SummaryText); builder.SetStyle(picStyle); break; default: break; } #endregion #region 設定 visibility switch (x.Visibility) { case LocalNotificationVisibilityEnum.Public: builder.SetVisibility(NotificationVisibility.Public); break; case LocalNotificationVisibilityEnum.Private: builder.SetVisibility(NotificationVisibility.Private); break; case LocalNotificationVisibilityEnum.Secret: builder.SetVisibility(NotificationVisibility.Secret); break; default: break; } #endregion #region 設定 priority switch (x.Priority) { case LocalNotificationPriorityEnum.Default: builder.SetPriority((int)NotificationPriority.Default); break; case LocalNotificationPriorityEnum.High: builder.SetPriority((int)NotificationPriority.High); break; case LocalNotificationPriorityEnum.Low: builder.SetPriority((int)NotificationPriority.Low); break; case LocalNotificationPriorityEnum.Maximum: builder.SetPriority((int)NotificationPriority.Max); break; case LocalNotificationPriorityEnum.Minimum: builder.SetPriority((int)NotificationPriority.Min); break; default: break; } #endregion #region 設定 category switch (x.Category) { case LocalNotificationCategoryEnum.Call: builder.SetCategory(LocalNotificationCategoryEnum.Call.ToString()); break; case LocalNotificationCategoryEnum.Message: builder.SetCategory(LocalNotificationCategoryEnum.Message.ToString()); break; case LocalNotificationCategoryEnum.Alarm: builder.SetCategory(LocalNotificationCategoryEnum.Alarm.ToString()); break; case LocalNotificationCategoryEnum.Email: builder.SetCategory(LocalNotificationCategoryEnum.Email.ToString()); break; case LocalNotificationCategoryEnum.Event: builder.SetCategory(LocalNotificationCategoryEnum.Event.ToString()); break; case LocalNotificationCategoryEnum.Promo: builder.SetCategory(LocalNotificationCategoryEnum.Promo.ToString()); break; case LocalNotificationCategoryEnum.Progress: builder.SetCategory(LocalNotificationCategoryEnum.Progress.ToString()); break; case LocalNotificationCategoryEnum.Social: builder.SetCategory(LocalNotificationCategoryEnum.Social.ToString()); break; case LocalNotificationCategoryEnum.Error: builder.SetCategory(LocalNotificationCategoryEnum.Error.ToString()); break; case LocalNotificationCategoryEnum.Transport: builder.SetCategory(LocalNotificationCategoryEnum.Transport.ToString()); break; case LocalNotificationCategoryEnum.System: builder.SetCategory(LocalNotificationCategoryEnum.System.ToString()); break; case LocalNotificationCategoryEnum.Service: builder.SetCategory(LocalNotificationCategoryEnum.Service.ToString()); break; case LocalNotificationCategoryEnum.Recommendation: builder.SetCategory(LocalNotificationCategoryEnum.Recommendation.ToString()); break; case LocalNotificationCategoryEnum.Status: builder.SetCategory(LocalNotificationCategoryEnum.Status.ToString()); break; default: break; } #endregion #region 準備設定當使用者點選通知之後要做的動作 // Setup an intent for SecondActivity: Intent secondIntent = new Intent(this, typeof(MainActivity)); // 設定當使用點選這個通知之後,要傳遞過去的資料 secondIntent.PutExtra("NotificationObject", JsonConvert.SerializeObject(x)); // 若在首頁且使用者按下回上頁實體按鈕,則會離開這個 App TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this); stackBuilder.AddNextIntent(secondIntent); PendingIntent pendingIntent = stackBuilder.GetPendingIntent(pendingIntentId++, PendingIntentFlags.OneShot); // Uncomment this code to setup an intent so that notifications return to this app: // Intent intent = new Intent (this, typeof(MainActivity)); // const int pendingIntentId = 0; // pendingIntent = PendingIntent.GetActivity (this, pendingIntentId, intent, PendingIntentFlags.OneShot); // builder.SetContentText("Hello World! This is my first action notification!"); // Launch SecondActivity when the users taps the notification: builder.SetContentIntent(pendingIntent); // 產生一個 notification 物件 Notification notification = builder.Build(); #region 決定是否要發出聲音 if (x.Sound) { notification.Defaults |= NotificationDefaults.Sound; } #endregion #region 決定是否要有震動 if (x.Vibrate) { notification.Defaults |= NotificationDefaults.Vibrate; } #endregion // 顯示本地通知: notificationManager.Notify(notificationId++, notification); // 解開底下程式碼註解,將會於五秒鐘之後,才會發生本地通知 // Thread.Sleep(5000); // builder.SetContentTitle("Updated Notification"); // builder.SetContentText("Changed to this message after five seconds."); // notification = builder.Build(); // notificationManager.Notify(notificationId, notification); #endregion #endregion }); #endregion }
private async Task UpdateNotifications() { this._notificationManager.CancelAll(); var res = Resources; var largeIcon = BitmapFactory.DecodeResource(res, Resource.Drawable.LargeIconEmpty); var colorAccent = Resources.GetColor(Resource.Color.Accent); var colorAccentDark = Resources.GetColor(Resource.Color.AccentDark); var timetable = ApplicationMain.ServiceLocator.GetInstance<Timetable>(); var timetableDataset = await timetable.GetDatasetAsync().ConfigureAwait(false); var now = LogicalDateTime.Now; // 番組と番組の画像のマッピング var mapping = await GetProgramImageMappingAsync().ConfigureAwait(false); // 最新と次の番組をとってくる foreach (var program in timetableDataset.Data[now.DayOfWeek].Where(x => x.End >= now.Time).Take(2)) { var isNowPlaying = program.IsNowPlaying; var intent = new Intent(this.ApplicationContext, typeof(MainActivity)); var builder = new Notification.Builder(this.ApplicationContext) .SetContentTitle(program.Title) .SetContentText(isNowPlaying ? $"現在放送中: {program.End.ToString("hh\\:mm")}まで" : $"もうすぐスタート: {program.Start.ToString("hh\\:mm")}から") .SetPriority((int)(isNowPlaying ? NotificationPriority.Max : NotificationPriority.Default)) .SetLocalOnly(true) .SetOngoing(true) .SetCategory(Notification.CategoryRecommendation) .SetLargeIcon(largeIcon) .SetSmallIcon(Resource.Drawable.SmallIcon) .SetContentIntent(PendingIntent.GetActivity(this.ApplicationContext, 0, intent, PendingIntentFlags.UpdateCurrent)) .SetColor(colorAccentDark); var builderBigPicture = new Notification.BigPictureStyle(builder); try { // 画像があればそれを使うしなければ文字を描画するぞい if (mapping.ContainsKey(program.MailAddress) || mapping.ContainsKey(program.Title)) { var imageUrl = mapping.ContainsKey(program.MailAddress) ? mapping[program.MailAddress] : mapping[program.Title]; using (var httpClient = new HttpClient()) using (var stream = await httpClient.GetStreamAsync(imageUrl).ConfigureAwait(false)) { var bitmap = BitmapFactory.DecodeStream(stream); builder.SetLargeIcon(bitmap); builderBigPicture.BigPicture(bitmap); } } else { var width = Resources.GetDimensionPixelSize(Resource.Dimension.RecommendationEmptyWidth); var height = Resources.GetDimensionPixelSize(Resource.Dimension.RecommendationEmptyHeight); var textSize = Resources.GetDimensionPixelSize(Resource.Dimension.RecommendationTextSize); textSize = Resources.DisplayMetrics.ToDevicePixel(textSize); width = Resources.DisplayMetrics.ToDevicePixel(width); height = Resources.DisplayMetrics.ToDevicePixel(height); var bitmap = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888); using (var paint = new Paint() { TextSize = textSize, Color = Color.White, AntiAlias = true }) using (var textPaint = new TextPaint() { TextSize = textSize, Color = Color.White, AntiAlias = true }) using (var canvas = new Canvas(bitmap)) { canvas.Save(); paint.Color = colorAccent; canvas.DrawRect(0, 0, bitmap.Width, bitmap.Height, paint); paint.Color = Color.White; var textWidth = paint.MeasureText(program.Title); // 回転する // canvas.Rotate(45); //canvas.DrawText(program.Title, 0, 0, paint); // // canvas.DrawText(program.Title, (bitmap.Width / 2) - (textWidth / 2), (bitmap.Height / 2) + (paint.TextSize / 2), paint); // 折り返しつつ描画 var margin = 16; var textLayout = new StaticLayout(program.Title, textPaint, canvas.Width - (margin * 2), Layout.Alignment.AlignCenter, 1.0f, 0.0f, false); canvas.Translate(margin, (canvas.Height / 2) - (textLayout.Height / 2)); textLayout.Draw(canvas); canvas.Restore(); } builder.SetLargeIcon(bitmap); } } catch (Exception ex) { Log.Error(Tag, ex.ToString()); } this._notificationManager.Notify(program.Start.Ticks.GetHashCode(), builderBigPicture.Build()); } }
private async Task SendNotification(string messageBody, IDictionary <string, string> data) { var intent = new Intent(this, typeof(MainActivity)); //intent.AddFlags(ActivityFlags.ReorderToFront | ActivityFlags.SingleTop); intent.AddFlags(ActivityFlags.ClearTop); foreach (string key in data.Keys) { intent.PutExtra(key, data[key]); } var title = "Alarmo! Alarmo!"; if (data.ContainsKey("title")) { var titleOverride = data["title"]; if (!string.IsNullOrWhiteSpace(titleOverride)) { title = titleOverride; } } var message = "Unrecognized Person Detected!"; if (data.ContainsKey("message")) { var messageOverride = data["message"]; if (!string.IsNullOrWhiteSpace(messageOverride)) { message = messageOverride; } } var uri = RingtoneManager.GetDefaultUri(RingtoneType.Notification); var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot); var notificationBuilder = new Notification.Builder(this) .SetSmallIcon(Resource.Drawable.ic_logo) .SetContentTitle(title) .SetContentText(message) .SetAutoCancel(true) .SetContentIntent(pendingIntent) .SetDefaults(NotificationDefaults.Sound); var imageReference = data.ContainsKey("imageReference") ? data["imageReference"] : null; if (!string.IsNullOrWhiteSpace(imageReference)) { try { imageReference = imageReference.WithToken(); var notificationStyle = new Notification.BigPictureStyle(); notificationStyle.SetSummaryText(message); var client = new HttpClient(); var imageStream = await client.GetStreamAsync(imageReference); var detectionImage = global::Android.Graphics.BitmapFactory.DecodeStream(imageStream); notificationStyle.BigPicture(detectionImage); notificationStyle.BigLargeIcon((global::Android.Graphics.Bitmap)null); notificationBuilder.SetLargeIcon(detectionImage); notificationBuilder.SetStyle(notificationStyle); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } } var notificationManager = NotificationManager.FromContext(this); if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.O) { var channelId = "DetectionsChannel_01"; var channel = new NotificationChannel(channelId, "Detections Channel", NotificationImportance.High); notificationManager.CreateNotificationChannel(channel); notificationBuilder.SetChannelId(channelId); } var notification = notificationBuilder.Build(); notificationManager.Notify(0, notification); }