在 Xamarin.Android 中使用 Notification.Builder 构建通知
0 背景
在 Android 4.0 以后,系统支持一种更先进的 Notification.Builder 类来发送通知。但 Xamarin 文档含糊其辞,多方搜索无果,遂决定自己摸索。
之前的代码:
//定义通知管理类
NoitficationManager nMgr;
nMgr = (NotificationManager)GetSystemService(NotificationService);
//设置通知的图标以及显示的简介Title
Notification notify = new Notification(Resource.Drawable.Icon, "普通通知");
//初始化点击通知后打开的活动
PendingIntent pintent = PendingIntent.GetActivity(this, 0, new Intent(this, typeof(MainActivity)), PendingIntentFlags.UpdateCurrent);
//设置通知的主体
notify.SetLatestEventInfo(this, "普通通知标题", "普通通知内容", pintent);
//发送通知
nMgr.Notify(0, notify);
如果在 VS2015 ,Xamarin 4.0 版本时,使用此方法,会报错:
“Notification.SetLatestEventInfo(Context, string, string, PendingIntent)”已过时:“deprecated”
1 Android 通知结构
一个通知的最基本元素:
- SmallIcon - 图标
- ContentTitle - 通知标题
- ContentText - 通知内容
可选元素
- Sound - 通知声音
- Priority - 通知优先级
- Ticker - 通知摘要。在 Android 5.0 以下版本,表现为在状态栏闪过的文字
- Number - 通知计数,显示为通知横幅右下角的角标数字
- 还有更多,本文不再赘述
2 使用Notification.Builder 构建普通通知
下面,以在 Activity 中构建通知为例。
首先,新建项目,并声明通知管理类。
namespace HelloNotification
{
[Activity(Label = "HelloNotification", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
NotificationManager nMgr;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
//声明通知管理类
nMgr = (NotificationManager)GetSystemService(NotificationService);
}
}
}
第二步,使用 Notification.Builedr
构建一个通知。
var notify = new Notification.Builder(this)
.SetContentTitle("ContentTitle")
.SetContentText("ContentText")
.SetSmallIcon(Resource.Drawable.Icon);
发送通知时,需要用到当前 Activity 的 Context ,就是这个 this 。
第三步,发送通知!
nMgr.Notify(1, notify.Build());
值得注意的是 Notify() 方法的第一个参数 int id
。这个 id 唯一标识 Android App 里面的每个通知,也就是在同一个 App 中, id 不能重复。否则后发出的通知会覆盖之前的通知。
当然,也可以用此方法达到“覆盖通知”的目的。
3 给通知添加声音
即调用 Notification.Builder 的 SetSound 方法。这里使用默认铃声做演示,因为自定义铃声的方法。。。跟这个差很多 = =
需要添加引用: Android.Media
var notify = new Notification.Builder(this)
//省略了其他参数
.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
这样发送的通知就可以带音效了。是不是很酷炫
4 在 Android 5.0 以上发送浮动通知
这很简单,只要把通知的 Priority
设为 High
即可。
不过需要注意的是,高优先级的通知必须设置通知铃声。
var notify = new Notification.Builder(this)
//省略了其他参数
.SetPriority((int)NotificationPriority.High)
.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
5 自定义通知声音
这才是本文的灵魂所在!
调用此方法,需要把通知铃声文件放置在 Recourse
文件夹中。通常要再新建一个子文件夹(这里使用了 raw ,别问我为什么,我也不知道。也许是写起来方便吧)用来存储所有的声音文件。
目录结构:
- HelloNotification
* Recourse
* raw
* AnotherRingTone.mp3
* MyRingTone.mp3
引用外部声音文件时,需要使用文件的 Uri 。具体用法及介绍,请看代码。
//注意添加引用!!
using Uri = Android.Net.Uri;
notify = new Notification.Builder(this)
//省略的其他参数
.SetPriority((int)NotificationPriority.High)
//从 Uri 设置声音
.SetSound(Uri.Parse("android.resource://" + PackageName + "/" + Resource.Raw.MyRingTone));
可以看到,Xamarin 似乎把目录转化为了 .Net 对象,使用 .
运算符直接可以调用到,并不需要在什么奇怪的地方进行注册。
下面说一点个人理解:
SetSound
方法需要使用类型为 Android.Net.Uri
的参数,而此 Uri 只能在自己包名的目录下寻找吧 = =
所以要用 Uri.Prase
转换路径为 Uri
声明通知之后,便可以使用 nMgr.Notify(1,notify.Build());
发送此通知了。这是便可以听见 狂拽酷炫 的自定义铃声。
6 所有代码
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Media;
namespace HelloNotification
{
[Activity(Label = "HelloNotification", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
NotificationManager nMgr;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
nMgr = (NotificationManager)GetSystemService(NotificationService);
var notify = new Notification.Builder(this)
.SetContentTitle("ContentTitle")
.SetContentText("ContentText")
.SetPriority((int)NotificationPriority.High)
.SetSound(Uri.Parse("android.resource://" + PackageName + "/" + Resource.Raw.MyRingTone));
.SetSmallIcon(Resource.Drawable.Icon);
nMgr.Notify(1, notify.Build());
}
}
}
在 Xamarin.Android 中使用 Notification.Builder 构建通知的更多相关文章
- Android中使用Notification实现进度通知栏(Notification示例三)
我们在使用APP的过程中,软件会偶尔提示我们进行版本更新,我们点击确认更新后,会在通知栏显示下载更新进度(已知长度的进度条)以及安装情况(不确定进度条),这就是我们今天要实现的功能.实现效果如下: 在 ...
- 5、xamarin.android 中如何对AndroidManifest.xml 进行配置和调整
降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 我们在翻看一些java的源码经常会说我们要在AndroidManifest.xml 中添加一些东西.而我们使用xamari ...
- SignalR在Xamarin Android中的使用
原文:SignalR在Xamarin Android中的使用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...
- Xamarin.Android中使用android:onClick="xxx"属性
原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...
- [置顶]
Xamarin android中使用signalr实现即时通讯
前面几天也写了一些signalr的例子,不过都是在Web端,今天我就来实践一下如何在xamarin android中使用signalr,刚好工作中也用到了这个,也算是总结一下学到的东西吧,希望能帮助你 ...
- Xamarin Android 中Acitvity如何传递数据
在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...
- Android中使用Notification实现宽视图通知栏(Notification示例二)
Notification是在你的应用常规界面之外展示的消息.当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏.要查看消息的详情需要进入通知抽屉(notificationdrawer) ...
- Android中使用Notification实现普通通知栏(Notification示例一)
Notification是在你的应用常规界面之外展示的消息.当app让系统发送一个消息的时候,消息首先以图表的形式显示在通知栏.要查看消息的详情需要进入通知抽屉(notificationdrawer) ...
- 关于Android中new Notification
目前 Android 已经不推荐使用下列方式创建 Notification实例: Notification notification = new Notification(R.drawable.ic_ ...
随机推荐
- 深入了解ibatis源码----简单ibatis示例代码
搭建源码环境: 1.创建sql数据库. CREATE TABLE USER_ACCOUNT ( USERID INT(3) NOT NULL AUTO_INCREMENT, USERNAME VARC ...
- 美妙的 CSS3 动画!一组梦幻般的按钮效果
今天给大家带来的是五款梦幻般的动画按钮效果.下面是在线演示,把鼠标放在按钮上试试,有惊喜哦!CSS3 引入了众多供功能强大的新特性,让设计和开发人员能够轻松的创作出各种精美的界面效果. 温馨提示:为保 ...
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
在visual studio 中添加数据库应用时,报错,提示如下: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL ...
- PHP学习总结(一)
对最近学习PHP做个简单的总结吧 书籍:<PHP和MySQL Web开发> 环境/工具:wamp/Editplus&Chrome 时间:8月2日-8月7日 内容: 以前把前3章学了 ...
- JS魔法堂:再识ASCII实体、符号实体和字符实体
一.前言 相信大家都熟悉通过字符实体 来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢. 二.初识HTML实 ...
- Socket接收大数据的方法
byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStr ...
- 前端代码标准最佳实践:CSS
前端工程师对写标准的前端代码的重视程度很高.这些最佳标准实践并不是那个权威组织发布的,而是由大量的前端工程师们在实践过程中的经验总结,目的在于提高代码的可读性,可维护性和性能.那么接着上一篇,我们再来 ...
- HTTP & HTTPs
HTTP HTTP 消息 HTTP 方法 参考 [1]. HTTP 协议初识 - 阮一峰: HTTPS 参考 [1]. HTTPS 升级指南 - 阮一峰:
- error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCom ...
- Android短信Notification的几个ID
private static final int NOTIFICATION_ID = 123; public static final int MESSAGE_FAILED_NOTIFICATION_ ...