Xamarin.Android实现通知推送功能(1)

目录

  • 1、背景说明
    • 1.1 开发环境
    • 1.2 实现效果
      • 1.2.1 推送的界面
      • 1.2.2 推送的设置
      • 1.2.3 推送的功能实现
        • 1.2.3.1、`Activity`的设置【重要】
        • 1.2.3.2、代码的实现
  • 2、源码下载
  • 3、总结
  • 4、参考资料

1、背景说明

在App开发中,通知(或消息)的推送,是必须要有的功能。若在纯互联网的环境中,可以使用第三方的通知推送的功能,例如:小米推送、极光推送等,这个可以参考第三方的使用手册既可。但是在局域网中,例如医院内部的局域网中,则无法使用第三方的通知推送。因此在局域网环境中实现App通知推送的功能,就非常重要和关键。

本文将分为上下两部分。第一部分主要阐述Xamarin.Android的通知推送的功能实现。第二部分阐述如何在局域网环境下实现推送,并借助第一部分消息推送,从而实现整体的通知推送。

1.1 开发环境

使用VS2022社区版17.10.1,其中Xamarin为17.10.0.110

1.2 实现效果

Xamarin.Android中实现通知推送与Android基本一致。实现的效果如下:
在这里插入图片描述
图1 为主界面,点击右下角信封按钮,则系统会进行消息推送(主界面为:MainActivity
在这里插入图片描述
图2 系统收到推送后,在状态栏中弹出的推送内容
在这里插入图片描述
图3 当点击状态栏中的推送消息时,跳转到该推送的详细说明页面(即后续的NotificationDetailInfoActivity
在这里插入图片描述
图4 当在推送详细页面(NotificationDetailInfoActivity)点击返回按钮后,App返回至第二个Activity(即:SecondActivity
在这里插入图片描述
图5 在图4的界面上(即SecondActivity),点击返回按钮后,App返回至主界面(即MainActivity

1.2.1 推送的界面

在整个工程中,涉及到3个Activity:MainActivitySecondActivityNotificationDetailInfoActivity。如下图6所示
在这里插入图片描述
图6 工程涉及到的三个Activity

1.2.2 推送的设置

因为推送是在Activity中发生,所以需要再ActivityOnCreate方法中初始化通知设置NotificationChannel

private string CHANNEL_ID = "20000";
protected override void OnCreate(Bundle savedInstanceState)
{base.OnCreate(savedInstanceState);//初始化一个ChannelCreateNotificationChannel();
}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.second_channel_name);var channelDescription = GetString(Resource.String.second_channel_description);var channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationImportance.Default){Description = channelDescription};var notificationManager = (NotificationManager)GetSystemService(NotificationService);notificationManager.CreateNotificationChannel(channel);
}

其中会涉及到Channel的名称和描述。也就是Resource.String.second_channel_nameResource.String.second_channel_description。这部分信息在Strings.xml中。具体如下:

<resources><string name="app_name">通知推送Demo</string><string name="action_settings">Settings</string><string name="channel_name">推送测试的名称</string><string name="channel_description">用于说明本推送的具体内容</string><string name="second_channel_name">第二个推送的名称</string><string name="second_channel_description">第二个用于说明推送的说明性文字(例如:本推送用于推送患者的用药服用信息!)</string>
</resources>

MainActivitySecondActivity中的OnCreate方法中都应用,因此效果如下
在这里插入图片描述
图7 在MainActivitySecondActivity设置通知后,可以在手机的通知界面看到这两个推送的设置
在这里插入图片描述
图8 这个是MainActivity中推送设置
在这里插入图片描述
图8 这个是SecondActivity中推送设置详细信息界面,可以看到标题和提示的内容

1.2.3 推送的功能实现

1.2.3.1、Activity的设置【重要】

若要设置返回时,按指定的顺序返回,则必须要设置ActivityParentActivity属性。在Android原生开发中,是在AndroidManifest.xml进行设置的。设置一般是这样子的:

<activity android:name=".MessageActivity"  android:parentActivityName=".MainActivity"/>

但是,在Xamarin.Android中,没法在AndroidManifest.xml设置,需要在Activity.cs中定义。

//在这儿设置******【重要】
[Activity(Label = "SecondActivity", ParentActivity = typeof(MainActivity))]
public class SecondActivity : Activity
{private TextView tvTitle;private string CHANNEL_ID = "20000";protected override void OnCreate(Bundle savedInstanceState){base.OnCreate(savedInstanceState);// Create your application hereCreateNotificationChannel();//设置推送的通知}....

这个地方是最特殊的地方,一定要注意。
在本项目中,将NotificationDetailInfoActivityParentActivity设为SecondActivity;而SecondActivityParentActivity设置为MainActivity

1.2.3.2、代码的实现

以上设置完成后,便可以在按钮的click方法中,实现消息的推送及实现,代码如下:

private void FabOnClick(object sender, EventArgs eventArgs)
{//View view = (View) sender;//Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong)//    .SetAction("Action", (View.IOnClickListener)null).Show();//第二步,在某个地方触发这个通知(此处是点击按钮)//点击推送通知后,要调用起来的ActivityIntent intent = new Intent(this, typeof(NotificationDetailInfoActivity));//传递的数据。也可以使用Bundle,可以搜索Bundle传值intent.PutExtra("message", "附加的详细信息,用于展示提示的具体内容!");//创建TaskStackBuilder,用于形成任务链,就是点击通知后,后续的返回界面等设置Android.App.TaskStackBuilder stackBuilder = Android.App.TaskStackBuilder.Create(this);//1、在Activity中设置ParentActivity属性。在Android的原生开发中,是在Manifest中设置,//但是在Xamarin中,需要直接在Activity中设置//2、直接调用AddNextIntentWithParentStack方法既可stackBuilder.AddNextIntentWithParentStack(intent);//网络上的设置,但在Xamarin中没有作用//stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(MainActivity)));//stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(SecondActivity)));//stackBuilder.AddNextIntent(intent);//设置PendingIntentconst int pendingIntentId = 0;PendingIntent pendingIntent =stackBuilder.GetPendingIntent(pendingIntentId, PendingIntentFlags.UpdateCurrent);NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID).SetContentIntent(pendingIntent).SetContentTitle("推送的标题内容") //1.SetContentText("推送的具体内容信息") //2.SetAutoCancel(true)  //设置自动取消.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()).SetSmallIcon(Resource.Drawable.zl001);//调用通知Notification notification = builder.Build();NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;const int notificationId = 1;notificationManager.Notify(notificationId, notification);
}

代码说明:
1、网上查找的资料(设置微软的官网上),在设置返回时,是如下面代码设置的。

//stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(MainActivity)));
//stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(SecondActivity)));
//stackBuilder.AddNextIntent(intent);

但在实际使用中,确是不起作用。在NotificationDetailInfoActivity界面,点击返回时,会返回至MainActivity,而不是按照指定的顺序进行。

因此直接使用了stackBuilder.AddNextIntentWithParentStack(intent);这句话。按自身的Stack顺序,进行返回。

2、PendingIntentFlags.UpdateCurrent标识位
这个标识位有很多,比较简单,使用比较多就是UpdateCurrent,大家可以自行查看资料

2、源码下载

源码已上传,正在审核中。若审核通过,将添加正式的连接地址

3、总结

第一部分主要讲述推送基本设置,推送设置中还有一些样式的设置,大家可以到官网上进行学习。
下一部分将讲述在局域网内实时实现消息的推送

4、参考资料

主要查看了官网微软官网和这篇博文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​​​​​​ 基于Nmap的异步无状态端口扫描技术

​​​​​​ 基于Nmap的异步无状态端口扫描技术 传统的端口扫描&#xff0c;主要是依靠TCP三次握手去连接&#xff0c;而建立连接的各个过程都存在连接状态&#xff0c;这些状态由操作系统在底层实现存储&#xff0c;可利用这些状态对应用层的数据进行处理。但是&#xff0c;…

企业必备技能-打造全屏轮播图的终极指南

标题&#xff1a;“视觉盛宴&#xff1a;打造全屏轮播图的终极指南” 引言 在网页设计中&#xff0c;轮播图是一种常见的视觉元素&#xff0c;它能够吸引访客的注意力并展示重要内容。本文档将指导你如何使用HTML和CSS快速创建一个全屏轮播图&#xff0c;使您的网站更加生动和…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; ##435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; ##56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; ##什么是区间调…

毫米波雷达深度学习技术-1.6目标识别2

1.6.4 自动编码器和变体自动编码器 自编码器包括一个编码器神经网络&#xff0c;随后是一个解码器神经网络&#xff0c;其目的是在输出处重建输入数据。自动编码器的设计在网络中施加了一个瓶颈&#xff0c;它鼓励原始输入的压缩表示。通常&#xff0c;自编码器旨在利用数据中的…

学习周报:文献阅读+Fluent案例+Fluent相关算法学习

目录 摘要 Abstract 文献阅读&#xff1a;求解正逆运动波问题的物理信息神经网络 文献摘要 讨论|结论 理论基础 KWM&#xff08;运动波动方程&#xff09; Hard constraint &#xff08;硬约束方式&#xff09; 具有重新分布的搭配点的PINN 具有停止梯度的分数阶方程 …

实验二、网络属性设置《计算机网络》

精神状态 be like&#xff1a;边写边崩溃&#xff0c;越写越得劲儿。 目录 一、实验目的&#xff1a; 二、实验内容 三、实验步骤&#xff1a; 四、实验小结 一、实验目的&#xff1a; 掌握 IP 地址、子网掩码等网络属性的设置。 二、实验内容 预备知识&#xff1a; 1、…

耐酸碱腐蚀可溶性聚四氟乙烯(PFA)溶样罐

PFA溶样罐也叫PFA溶样瓶&#xff0c;可直接放在加热板上及油浴里加热&#xff0c;也可液氮下长期保存&#xff0c;使用温度-200—260℃。 根据不同实验的需求&#xff0c;PFA溶样罐有U型、V型、平底3种设计。V型底的设计&#xff0c;更加方便少量样品的集中收集。溶样罐广泛用…

Java 实验8 集合类

&#xff08;一&#xff09;实验目的 1、掌握JAVA集合类中的Collection的特点及其应用情形&#xff1b; 3、掌握Collection、熟悉集合的特点及应用。 &#xff08;二&#xff09;实验内容和步骤 1、仿照课堂练习的MyStack示例&#xff0c;使用LinkedList集合类实现一个先进…

探索多头混合专家(MH-MoE)模型的先进架构

在深度学习领域&#xff0c;大型模型如大型语言模型&#xff08;LLMs&#xff09;和大型多模态模型&#xff08;LMMs&#xff09;因其在各个领域的有效性而受到广泛关注。然而&#xff0c;这些模型在训练和推理时面临着巨大的计算成本。为了解决这一问题&#xff0c;研究者们提…

多分类混淆矩阵详解

⭐️ 前言 在机器学习和数据科学中&#xff0c;混淆矩阵&#xff08;Confusion Matrix&#xff09;是一个重要的工具&#xff0c;用于评估分类模型的性能。特别是在多分类问题中&#xff0c;混淆矩阵能够清晰地展示模型在每个类别上的预测结果。以下是对多分类混淆矩阵的详细解…

IDEA下项目发送到Gitee

一、首先在Gitee创建一个仓库&#xff08;什么都不选&#xff0c;这是最简单的方式&#xff0c;否则需要 pull push等一些操作&#xff0c;我嫌麻烦&#xff09; 二、按图点击&#xff08;创建存储区&#xff0c;选择你要上传的项目&#xff09; 三、按图点击后正常文件名会变绿…

python中关于函数的两种链式调用

函数之间的嵌套调用之函数的返回值就是另一个函数的参数 用一个函数的返回值作为另一个函数的参数。 如上图所示&#xff0c;将is0dd&#xff08;10&#xff09;的结果交给print函数来执行。 如上图所示&#xff0c;也是一个链式调用的案例&#xff0c;先将add&#xff08;x&a…

gitlab之cicd的gitlab-runner cicd实践-rpm离线安装

目录 概述资源官方资源离线资源 操作环境验证gitlab-runner安装注意事项重启向gitlab注册CICD流程测试 概述 gitlab此文使用rpm离线安装的方式&#xff0c;使用 gitlab-runner dockerfile构建运行环境&#xff1a; 如有兴趣可以参考这篇文章   gitlab选择 docker-compose 执行…

关于JavaScript技术的基础内容汇总

目录 JavaScript 基础知识1. JavaScript 基本语法2. 变量和常量3. 数据类型4. 运算符5. 控制结构6. 函数7. 对象8. 数组9. 事件处理10. DOM 操作 JavaScript 基础知识 学习 JavaScript&#xff08;简称 JS&#xff09;是前端开发的重要组成部分&#xff0c;它是一种动态的、弱…

GIGE 协议摘录 —— GVCP 协议(二)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现&#xff08;一&#xff09; GIGE 协议摘录 —— GVCP 协议&#xff08;二&#xff09; GIGE 协议摘录 —— GVSP 协议&#xff08;三&#xff09; GIGE 协议摘录 —— 引导寄存器&#xff08;四&#xff09; GIGE 协议…

新品!和芯星通全系统全频高精度板卡UB9A0首发

6月6日&#xff0c;和芯星通发布了UB9A0全系统全频高精度GNSS板卡&#xff0c;主要应用于CORS站、便携基站、GNSS全球监测跟踪站等。延续了上一代产品高质量原始观测量的特点&#xff0c;UB9A0在性能和稳定性方面均表现出众。 UB9A0基于射频基带及高精度算法一体化的GNSS SoC芯…

新能源汽车内卷真相

导语&#xff1a;2025年&#xff0c;我国新能源汽车总产能预计可达3661万辆&#xff0c;如此产能如何消化&#xff1f; 文 | 胡安 “这样卷下去不是办法&#xff0c;企业目的是什么&#xff1f;是盈利&#xff0c;为国家作贡献&#xff0c;为社会作贡献。我们应该有大格局&…

问题:1、彩色餐巾可以渲染就餐气氛,下列说法错误的是 #知识分享#其他

问题&#xff1a;1、彩色餐巾可以渲染就餐气氛&#xff0c;下列说法错误的是 A&#xff0e;如艳红、大红餐巾给人以庄重热烈的感觉&#xff1b; B&#xff0e;橘黄、鹅黄色餐巾给人以高贵典雅的感觉&#xff1b; C&#xff0e;湖蓝色在夏天能给人以凉爽、舒适之感&#xff1…

大数据之HDFS磁盘扩容(linux磁盘扩容)

之所以扩容,是因为当前大数据平台已经接入了不同来源的数据,当执行mapreduce任务时,会发生磁盘爆满,导致hdfs爆红 具体扩容方案如下: 1、查看云磁盘分区情况 fdisk -l . 可以从图看出&#xff1a; /dev/vda 数据盘磁盘容量为21.5GB&#xff0c;包含/dev/vda1分区 /dev/vdb 数…

【大模型】Ollama+open-webui/Anything LLM部署本地大模型构建RAG个人知识库教程(Mac)

目录 一、Ollama是什么&#xff1f; 二、如何在Mac上安装Ollama 1. 准备工作 2. 下载并安装Ollama 3. 运行Ollama 4. 安装和配置大型语言模型 5. 使用Ollama 三、安装open-webui 1. 准备工作 2. Open WebUI ⭐的主要特点 3. Docker安装OpenWebUI&#xff0c;拉去太慢…