Toast类可以用来显示消息给用户,虽然它很方便,但是有不能持久。它只是在屏幕上显示几秒后就自动消失掉了。对于重要的信息或消息,要使用更加持久的方法。这种情形下,就应当使用通知,即使用NotificationManager在设备顶部的状态栏(也叫做通知栏)中显示一条持久化的信息或消息。

要显示一个通知,首先要创建一个指向NotificationView类 Intent对象:

  1. Intent intent = new Intent(this,NotificationViewActivity.class);
  2. intent.putExtra("notificationID", notificationID);

当用户从通知列表中选择一个通知的时候,这个Intent就被用来启动另一个活动。

另外还需要创建一个PendingIntent对象。PendingIntent对象可以代表应用程序帮助您在后面某个时候执行一个动作,而不用考虑应用程序是否正在运行。一般如下初始化:

  1. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);

getActivity()方法检索一个PendingIntent对象并使如下参数设置它:

上下文-应用程序上下文

请求码-用于意图的请求码

意图-用来启动目标活动的意图

标志-活动启动时使用的标志

然后,获取一个NotificationManager类的实例并创建一个Notification类的实例:

  1. NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  2. Notification notification = new Notification(
  3. R.drawable.ic_launcher,
  4. "Reminder:Meeting stats in 5 minutes",
  5. System.currentTimeMillis());

接下来,使用setLatestEventInfo()方法来设置通知的详细内容:

  1. CharSequence from = "System Alarm";
  2. CharSequence message = "Meeting with cusomer at 3pm...";
  3.  
  4. notification.setLatestEventInfo(this, from, message, pendingIntent);
  5.  
  6. notification.vibrate = new long[]{100,250,100,500};//设置通知为震动手机形式
  7. nm.notify(notificationID, notification);

当用户点击通知时候,NotificationViewActivity活动就会启动,这里使用NotificationManager对象的cancel()方法来取消这个通知:

  1. NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  2. nm.cancel(getIntent().getExtras().getInt("notificationID"));

完整实例代码如下:

MainActivity活动类:

  1. package com.example.notifications;
  2.  
  3. import android.os.Bundle;
  4. import android.R.integer;
  5. import android.app.Activity;
  6. import android.app.Notification;
  7. import android.app.NotificationManager;
  8. import android.app.PendingIntent;
  9. import android.content.Intent;
  10. import android.view.Menu;
  11. import android.view.View;
  12.  
  13. public class MainActivity extends Activity {
  14.  
  15. private int notificationID = 1;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. }
  21. public void onClick(View view){
  22. displayNotification();
  23. }
  24. protected void displayNotification(){
  25. Intent intent = new Intent(this,NotificationViewActivity.class);
  26. intent.putExtra("notificationID", notificationID);
  27.  
  28. PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
  29.  
  30. NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  31. Notification notification = new Notification(
  32. R.drawable.ic_launcher,
  33. "Reminder:Meeting stats in 5 minutes",
  34. System.currentTimeMillis());
  35. CharSequence from = "System Alarm";
  36. CharSequence message = "Meeting with cusomer at 3pm...";
  37.  
  38. notification.setLatestEventInfo(this, from, message, pendingIntent);
  39.  
  40. notification.vibrate = new long[]{100,250,100,500};
  41. nm.notify(notificationID, notification);
  42.  
  43. }
  44. // @Override
  45. // public boolean onCreateOptionsMenu(Menu menu) {
  46. // // Inflate the menu; this adds items to the action bar if it is present.
  47. // getMenuInflater().inflate(R.menu.main, menu);
  48. // return true;
  49. // }
  50.  
  51. }

NotificationViewActivity活动类:

  1. package com.example.notifications;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.app.NotificationManager;
  6. import android.view.Menu;
  7.  
  8. public class NotificationViewActivity extends Activity {
  9.  
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.notification_view);
  14.  
  15. NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
  16. nm.cancel(getIntent().getExtras().getInt("notificationID"));
  17. }
  18.  
  19. }

Android开发之显示通知的更多相关文章

  1. Android 开发——如何显示 GIF 动画

    gif 图动画在 android 中还是比较常用的,比如像新浪微博中,有很多 gif 图片,而且展示非常好,所以我也想弄一个.经过我多方的搜索资料和整理,终于弄出来了,其实 github 上有很多开源 ...

  2. Android开发之显示进度对话框

    一般有两种对话框,一个是普通的简单的please wait对话框,另一种是创建显示操作进度(如下载状态)的对话框. 第一种普通的效果图如下: 第一种普通的实现代码: public void onCli ...

  3. Android开发之漫漫长途 Ⅴ——Activity的显示之ViewRootImpl的PreMeasure、WindowLayout、EndMeasure、Layout、Draw

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  4. Android开发——Notification通知的各种Style详解

    本来是想与之前讲解使用Notification通知使用一起写的,查看了资料,觉得有必要将这Style部分单独拿出来讲解 前篇:Android开发——Notification通知的使用及Notifica ...

  5. Android开发——Notification通知的使用及NotificationCopat.Builder常用设置API

    想要看全部设置的请看这一篇 [转]NotificationCopat.Builder全部设置 常用设置: 设置属性 说明 setAutoCancel(boolean autocancel) 设置点击信 ...

  6. android开发学习---layout布局、显示单位和如何进行单元测试

    一.五大布局(layout) android中的用五大布局:LinearLayout (线性布局).AbsoluteLayout(绝对布局).RelativeLayout(相对布局).TableLay ...

  7. Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(2)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  8. Android开发之漫漫长途 Ⅱ——Activity的显示之Window和View(1)

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  9. Android开发之漫漫长途 Ⅳ——Activity的显示之ViewRootImpl初探

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

随机推荐

  1. .h头文件、 .lib库文件、 .dll动态链接库文件之间的关系

    转自.h头文件. .lib库文件. .dll动态链接库文件之间的关系 h头文件作用:声明函数接口 dll动态链接库作用:含有函数的可执行代码 lib库有两种: (1)静态链接库(Static Liba ...

  2. Desert King

    poj2728:http://poj.org/problem?id=2728 题意:给你n的点,每一个点会有一个坐标(x,y),然后还有一个z值,现在上你求一棵生成树,是的这棵生成树的所有边的费用/所 ...

  3. 【USACO 2012 Open】Running Laps(树状数组)

    53 奶牛赛跑 约翰有 N 头奶牛,他为这些奶牛准备了一个周长为 C 的环形跑牛场.所有奶牛从起点同时起跑,奶牛在比赛中总是以匀速前进的,第 i 头牛的速度为 Vi.只要有一头奶牛跑完 L 圈之后,比 ...

  4. 【HDU 3435】 A new Graph Game (KM|费用流)

    A new Graph Game Problem Description An undirected graph is a graph in which the nodes are connected ...

  5. [转贴]一个将表格变成 INSERT 的SQL 语句的存储过程(sql server)

    来源自http://vyaskn.tripod.com/code.htm#inserts SET NOCOUNT ON GO PRINT 'Using Master database' USE mas ...

  6. 在TMemo上画一条线

    var C:TControlCanvas; begin C := TControlCanvas.Create; C.Pen.Color := clRed; C.Pen.Width := ; C.Con ...

  7. Delphi模式设计

    http://blog.csdn.net/starsky2006/article/category/664014/7

  8. Exporter - 实现默认的导入方法用于模块

    Exporter - 实现默认的导入方法用于模块 简介: In module YourModule.pm: package YourModule; require Exporter; @ISA = q ...

  9. Super Phyllis(穷举+搜索)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2723 题意:给出一些字符串u,v,代表u-&g ...

  10. 通过Microsoft Azure服务设计网络架构的经验分享

    作者 王枫  发布于 2014年4月8日 本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构. Mic ...