[Xamarin] 關於發出Notification 的大小事 (转帖)
關於Anroid 的使用者來說,Notification 是一個非常會看到且用到的功能
他可以提醒使用者甚麼東西需要待處理,像是郵件或是會議的提醒等..
甚至有些APP ,直接使用Notification 來做記事像是 https://play.google.com/store/apps/details?id=bleetech.notificationnote

簡單且方便,這篇我們來談談如何來製作 Local Notification
首先我們來講解要實作的畫面
![]()
畫面上有三顆按鈕, 發動基本款的Notification(btn1) ,不同Id Notification(btn2),啟動Activity(btn3)
我們先來看第一個 簡單發動 Notification
//同一組id 的ˊ簡單 notification
var btn1 = FindViewById<Button>(Resource.Id.btn1);
btn1.Click += delegate
{
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.SetContentTitle("當麻的測試通知同一組ID")
.SetSmallIcon(Resource.Drawable.Icon2)
.SetContentText("你點擊了" + count + "次");
var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
//都用同一組id
notificationManager.Notify(0, builder.Build());
count++;
};
其中 notificationManager.Notify(, builder.Build());
這0 的部分就是你app 內部識別的ID 許多因為許多地方沒有說到,如果當這值相同的時候他並不會再多增加一個新的Noticication
而是會去覆蓋
結果:
![]()
像圖中,我點了12次但是依然會是用同一個Notification 他並不會去累加上去..差異點在哪我們看第二個範例
不同Id Notification(btn2):
//不同id 的ˊ簡單 notification
var btn2 = FindViewById<Button>(Resource.Id.btn2);
btn2.Click += delegate
{
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.SetContentTitle("當麻的測試通知不同ID")
.SetSmallIcon(Resource.Drawable.Icon2)
.SetContentText("你點擊了" + count + "次");
var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
//都用不同id count 是累加的,所以每次點擊皆不同
notificationManager.Notify(count, builder.Build());
count++;
};
notificationManager.Notify(count, builder.Build()); 因為count每次被點都會加一次,所以造成每次Id 皆不同
結果:
![]()
所以每一次都會去增加一個新的Notification
但是目前案例,我們發現,點擊之後並不會有任何反應
接下來,
這案例是我送出一個 Notification ,並且使用者點擊後,會啟動一個我指定名字叫做 ActivityNotiCall 的 Activity
並且我透過PendingIntent 將一個 key 為 user 值為donma的資料意圖帶入到開啟後的 ActivityNotiCall
// 會啟動Activity 的 Notification
var btn3 = FindViewById<Button>(Resource.Id.btn3);
btn3.Click += delegate
{
//成立一個新的Intent
//並且在bundle 中帶資料
var resultIntent = new Intent(this, typeof(ActivityNotiCall));
var bundleData=new Bundle();
bundleData.PutString("user","donma");
resultIntent.PutExtras(bundleData);
TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);
stackBuilder.AddNextIntent(resultIntent);
//建立一個PendingIntent 使用者點擊後透過TaskStackBuilder 送至新的Activity
PendingIntent resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.SetContentTitle("當麻測試叫起Activity")
.SetSmallIcon(Resource.Drawable.Icon5)
.SetContentText("點我啟動")
//帶入 PendingIntent
.SetContentIntent(resultPendingIntent);
var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
notificationManager.Notify(count, builder.Build());
count++;
};
ActivityNotiCall.cs :
using Android.App;
using Android.OS;
using Android.Widget;
namespace LocalNoti
{
[Activity(Label = "My Activity")]
public class ActivityNotiCall : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.LayoutNotiCall);
var txtView = (TextView)FindViewById(Resource.Id.textView1);
txtView.Text = this.Intent.GetStringExtra("user");
}
}
}
結果:
![]()
點擊後
![]()
看範例都蠻好操控的,只是要多補充一點觀念,下面附上source code 還有參考連結
參考連結:
http://tw.myblog.yahoo.com/jw!IfekG5aZE0ewhGesjPZ30w--/article?mid=19&prev=20&next=18
http://developer.android.com/reference/android/app/PendingIntent.html
http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html
[Xamarin] 關於發出Notification 的大小事 (转帖)的更多相关文章
- [Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)
最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.la ...
- [Xamarin] 關於SQLite 的操作 (转帖)
我們聊一下常用的東西,SQLite,這東西很常用到,當再寫手機APP的時候,有時候會在Client 做 cache或是做一些資料的管理都很必須會用到,我們來看看今天的範例 建立SQL Lite 資料庫 ...
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...
- 在laravel下關於blade模板的嘗試
Blade模板 關於模板繼承和分區段 @section和@yield的實驗 ①關於@section...@show嘗試 測試1 {{--appV2test.blade.php--}} <html ...
- 關於Validform 控件 值得注意的地方
Validform控件其實用起來挺方便的,直接百度就能找到官網,有直接的demo做參考.這些我就不提了,我所要說的是關於Validform控件的ajax的提交. Validform中有個參數ajaxP ...
- JDK1.6历史版本的下载(關於TLSv1.2)Oracle的官方文檔
[资源描述]:对于部分老项目 仍然采用的是JDK1.6 版本 但是打开官方 JDK 都是最新的 版本 想找 历史版本 不容易找到 [资源详情]:提供下载链接: http://www.oracle.co ...
- [Xamarin] 調用JSON.net 來解析JSON (转帖)
上一篇文章我們提到了透過WebClient從Facebook 拿到我的JSON資料 再來我們要怎麼解析JSON格示呢?在.net 中,我們很孰悉的JSON.net,沒錯,我們依然可以在Xamarin中 ...
- [Node.js] 關於 console.log 的格式化輸出
Node.js 當中的 console.log,除了基本字串的輸出之外,還可以利用 %s.%d.%j 格式化的輸出,就讓我們來看些例子吧! 一.範例1 (字串輸出):console.js consol ...
- Visual Studio 跨平台開發實戰(4) - Xamarin Android 基本控制項介紹 (转帖)
前言 不同於iOS, Xamarin 在Visual Studio中針對Android, 可以直接設計使用者介面. 在本篇教學文章中, 筆者會針對Android的專案目錄結構以及基本控制項進行介紹, ...
随机推荐
- css仅在指定ie浏览器生效
css中判断IE版本的语句<!--[if gte IE 6]> Only IE 6/+ <![endif]-->: 1. <!--[if !IE]> 除IE外都可识 ...
- java的InputStream和OutputStream的理解【转】
1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生 ...
- 【转载】C++ function、bind和lambda表达式
本篇随笔为转载,原贴地址:C++ function.bind和lambda表达式. 本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制 ...
- css设置中文字体(font-family:"黑体")后样式失效问题
做项目时偶遇的一诡异问题,同样的代码,在ff和IE7以上页面显示正常,但IE6无论怎么改都不起作用,本来以为是IE6的某些浮动bug所致,结果弄了很长时间也不行,后来不经意间把原来设定的font-fa ...
- LC.exe已退出,代码为-1错误
因为证书的原因,把项目中“properties”目录下的“license.licx”文件删除,再编译就成功了.如图:
- JQuery mobile 实例 api
http://www.w3school.com.cn/jquerymobile/jquerymobile_examples.asp
- nginx 设置反响代理实现nginx集群
ginx.conf: worker_processes 1; events { worker_connections 1024; } http { include mime.types ...
- node.js 基础学习 express安装使用
安装好nodeJs,我们需要使用命令行中安装express. 我这里默认将Node.js安装在C:\Program Files\nodCejs\盘中. 在保持联网的状态下,依次输入如下命令. npm ...
- Java写操作
//:ThinkingInJava/net.mindview.io/write2File.java package net.mindview.io; import java.io.BufferedRe ...
- [刘阳Java]_Java环境搭建_第2讲
1.为什么搭建Java的环境 Java的程序语言不能独立在操作系统上运行 Java程序需要一个JVM(Java虚拟机)才能将程序员写好的Java程序运行在操作系统 Java程序的跨平台(Mac, Li ...