文档章节

Xamarin Forms 实现发送通知点击跳转

o
 osc_ogi0qclx
发布于 2019/08/23 13:59
字数 368
阅读 7
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

1. Ensure the you have set LaunchMode.SingleTop on your MainActivity:

LaunchMode.SingleTop

1     [Activity(Label = "云销管家",
2         Icon = "@mipmap/ic_launcher",
3         Theme = "@style/MainTheme",
4         LaunchMode = LaunchMode.SingleTop,
5         ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
6     public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity, IBDLocationListener
7     {

In your MainActivity (the FormsAppCompatActivity subclass) add a OnNewIntent override:

OnNewIntent:

1 protected override void OnNewIntent(Intent intent)
2 {
3     base.OnNewIntent(intent);
4     NotificationClickedOn(intent);
5 }

Now you can check the intent.Action / intent.HasExtra to determine if it is your notification that was send and thus process it. With Xamarin.Forms the easiest would be to use MessagingCenter to send a message that is subscribed to within your .NetStd/PCL Xamarin.Forms code base.

NotificationClickedOn:

 1         void NotificationClickedOn(Intent intent)
 2         {
 3 
 4             if (intent.Action == "LocalNotifierIntent1300" && intent.HasExtra("LocalNotification"))
 5             {
 6                 var notificationMessage = intent.Extras.GetString("LocalNotification");
 7                 var winnerToast = Toast.MakeText(this, $"{notificationMessage}.", ToastLength.Long);
 8                 winnerToast.SetGravity(Android.Views.GravityFlags.Center, 0, 0);
 9                 winnerToast.Show();
10             }
11         }

Send notification example:

 1 void SendNotifacation()
 2 {
 3     var title = "Winner, Winner, Chicken Dinner";
 4     var message = "You just won a million StackOverflow reputation points";
 5 
 6     var intent = new Intent(BaseContext, typeof(MainActivity));
 7     intent.SetAction("ASushiNotification");
 8     intent.PutExtra("MessageFromSushiHangover", message);
 9     var pending = PendingIntent.GetActivity(BaseContext, 0, intent, PendingIntentFlags.CancelCurrent);
10 
11     using (var notificationManager = NotificationManager.FromContext(BaseContext))
12     {
13         Notification notification;
14         if (Android.OS.Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.O)
15         {
16 #pragma warning disable CS0618 // Type or member is obsolete
17             notification = new Notification.Builder(BaseContext)
18                                                         .SetContentTitle(title)
19                                                         .SetContentText(message)
20                                                         .SetAutoCancel(true)
21                                                         .SetSmallIcon(Resource.Drawable.icon)
22                                                         .SetDefaults(NotificationDefaults.All)
23                                                         .SetContentIntent(pending)
24                                                         .Build();
25 #pragma warning restore CS0618 // Type or member is obsolete
26         }
27         else
28         {
29             var myUrgentChannel = BaseContext.PackageName;
30             const string channelName = "Messages from SushiHangover";
31 
32             NotificationChannel channel;
33             channel = notificationManager.GetNotificationChannel(myUrgentChannel);
34             if (channel == null)
35             {
36                 channel = new NotificationChannel(myUrgentChannel, channelName, NotificationImportance.High);
37                 channel.EnableVibration(true);
38                 channel.EnableLights(true);
39                 channel.SetSound(
40                     RingtoneManager.GetDefaultUri(RingtoneType.Notification),
41                     new AudioAttributes.Builder().SetUsage(AudioUsageKind.Notification).Build()
42                 );
43                 channel.LockscreenVisibility = NotificationVisibility.Public;
44                 notificationManager.CreateNotificationChannel(channel);
45             }
46             channel?.Dispose();
47 
48             notification = new Notification.Builder(BaseContext)
49                                                         .SetChannelId(myUrgentChannel)
50                                                         .SetContentTitle(title)
51                                                         .SetContentText(message)
52                                                         .SetAutoCancel(true)
53                                                         .SetSmallIcon(Resource.Drawable.icon)
54                                                         .SetContentIntent(pending)
55                                                         .Build();
56         }
57         notificationManager.Notify(1331, notification);
58         notification.Dispose();
59     }
60 }

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.2K
3
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.4K
16
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7K
8

没有更多内容

加载失败,请刷新页面

加载更多

SwaggerUI看烦了,IGeekFan.AspNetCore.Knife4jUI 帮你换个新皮肤

背景 好像是上周四,看到微信群有人说java有轮子swagger-bootstrap-ui,而c#,就是找不到。 于是我一看,就说大话:“这个只是一套UI,他这个有开源地址么” 被@at说:你试试... 当天晚上就把...

张善友
今天
6
0
字符串驻留是个什么鬼!

先看下面这段代码 >>> a = 'apple' >>> b = 'apple' >>> a is b True 返回结果看起来没毛病 再来看这段: >>> a = 'apple!' >>> b = 'apple!' >>> a is b False 这个结果是不是有点诡异 前后......

谭庆波
昨天
21
0
golang包的日常(2)——log包

普通使用 log包定义了Logger类型,该类型提供了一些格式化输出的方法。 log包中预定义了一个标准logger对象std,使我们可以直接调用函数来打印日志,默认是标准错误输出(Stderr),打印到终...

osc_dg21zk4i
28分钟前
0
0
近10年全国高校双青人才排名TOP50,苏州大学表现抢眼

转眼又到了每年的杰青和优青项目评选的日子,作为高校人才水平的重要评判标准,每年高校的自然科学基金项目数都是一个非常重要的指标。当然,由于杰青每年只有200个名额,而国内有3000多所高...

科研菌
昨天
0
0
意派Epub360丨从制作到推广,H5页面如何刷屏?

不是所有H5最终都可以引爆朋友圈,也不是所有未能刷屏的H5都不够优秀。如何找到爆点、如何制作实现、如何传播转化……每一个要点都可能是影响刷屏的关键。即使是再资深的营销专家,也很难在H...

牙牙乐牙牙乐
28分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部