今天在学习Notification时同时参考了一些相关的博客,现在结合自身学习实际来总结一下。

在使用手机时,当有未接来电或者短消息时,通常会在手机屏幕上的状态栏上显示。而在Android中有提醒功能的也可以用AlertDialog,但是当使用AlertDialog 的时候,用户正在进行的操作将会被打断。因为当前焦点被AlertDialog得到。我们可以想像一下,当用户打游戏正爽的时候,这时候来了一条短信。如果这时候短信用AlertDialog提醒,用户必须先去处理这条提醒,从而才能继续游戏。用户可能会活活被气死。而使用Notification就不会带来这些麻烦事,用户完全可以打完游戏再去看这条短信。所以在开发中应根据实际需求,选择合适的控件。

状态栏通知涉及到两个类,一是Notification,它代表一个通知;另一个是NotificationManager,它是用于发送Notification的系统服务。

使用状态栏通知一般有4个步骤:

1、  通过getSystemService()方法获取NotificationManager服务。

2、  创建一个Notification对象,并为其设置各种属性。

3、  为Notification对象设置事件信息。

4、  通过NotificationManager类的notify()方法将通知发送到状态栏。

下面我们通过一个例子来实际操作一下:

首先是布局文件new_main.xml的使用:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <Button
android:id="@+id/button1"
android:text="发送消息"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> <Button
android:id="@+id/button2"
android:text="清空消息"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>

再创建一个Activity跳转后,新的Activity所需的页面content.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test"
android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>

接着创建一个ContentActivity(点击通知后跳转到的页面):

 public class ContentActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.content);
}
}

在MainActivity中定义两个变量:

final int NOTIFYID_1 = 123; // 第一个通知的ID
final int NOTIFYID_2 = 124; // 第二个通知的ID

然后重写onCreate()方法:

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_main);
//获取通知管理器,用于发送通知
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { Notification notify = new Notification();
notify.icon = R.drawable.ic_launcher;
notify.tickerText = "您有一个新的消息!";
notify.when = System.currentTimeMillis();//获取当前时间,返回的是毫秒
notify.defaults = Notification.DEFAULT_ALL;//设置默认的通知方式(声音、震动、闪光灯)
notify.setLatestEventInfo(MainActivity.this, "通知1",
"今天下午不上课啦!", null);
notificationManager.notify(NOTIFYID_1, notify);
Notification notify1 = new
Notification(R.drawable.ic_launcher, "又是一条短信",
System.currentTimeMillis());
Intent intent = new Intent(MainActivity.this,
ContentActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
MainActivity.this, 0, intent, 0);
// Notification notify1 = new Notification.Builder(MainActivity.this)
// .setContentTitle("第二个通知 ")
// .setContentText("查看详情")
// .setSmallIcon(R.drawable.ic_launcher)
// .setContentIntent(pendingIntent).build();
notify1.flags |= Notification.FLAG_AUTO_CANCEL; notify1.setLatestEventInfo(MainActivity.this, "通知2", "点击查看详情",
pendingIntent);
notificationManager.notify(NOTIFYID_2, notify1);
}
}); Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// //清除ID号为常量NOTIFYID_1的通知
notificationManager.cancelAll(); // 清除全部通知 }
}); }

最后在清单文件中添加相关代码:

<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <activity android:name="com.topcsa.demo_notification.ContentActivity"
android:label="通知"
android:theme="@android:style/Theme.Dialog" />

好了,一个简单的Demo就做好了。

值得注意的是,在这两个通知的代码中有已经被遗弃的方法,在eclipse中会被黑线划掉。其相关文档是:

从中我们知道上面的方法和构造器在Android API 11中已被遗弃,下面我们来看看它推荐的方法:

上面实例的MainActivity中有这种推荐方法实现的代码(需要取消注释),在使用新的推荐代码时,请注释以下代码:

 Notification notify1 = new
Notification(R.drawable.ic_launcher, "又是一条短信",
System.currentTimeMillis()); notify1.setLatestEventInfo(MainActivity.this, "通知2", "点击查看详情",
pendingIntent);

运行程序就OK了,这时运行的就是推荐的方法了。

本文结束后又看到了一篇觉得不错的文章:http://blog.csdn.net/loongggdroid/article/details/17616509

状态栏通知Notification的简单使用的更多相关文章

  1. Android 状态栏通知Notification、NotificationManager简介

    Notification(通知)一般用在电话,短信,邮件,闹钟铃声,在手机的状态栏上就会出现一个小图标,提示用户处理这个通知,这时手从上方滑动状态栏就可以展开并处理这个通知: 在Android系统中, ...

  2. 【Android】状态栏通知Notification、NotificationManager详解(转)

    在Android系统中,发一个状态栏通知还是很方便的.下面我们就来看一下,怎么发送状态栏通知,状态栏通知又有哪些参数可以设置? 首先,发送一个状态栏通知必须用到两个类:  NotificationMa ...

  3. Android的状态栏通知(Notification)

    通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息. 1.Layout布局文件: <RelativeLayout xmlns:an ...

  4. Android 状态栏通知 Notification

    private NotificationManager manager; private Notification.Builder builder; @Override protected void ...

  5. Android 状态栏通知Notification、NotificationManager详解

    http://www.cnblogs.com/onlyinweb/archive/2012/09/03/2668381.html

  6. 安卓状态栏通知Status Bar Notification

    安卓系统通知用户三种方式: 1.Toast Notification 2.Dialog Notification 3.Status Bar Notification Status Bar Notifi ...

  7. Android学习总结(十五) ———— Notification(状态栏通知)基本用法

    一.Notification基本概念  Notification是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容.我们在用手机的时候 ...

  8. 【WPF】右下角弹出自定义通知样式(Notification)——简单教程

    原文:[WPF]右下角弹出自定义通知样式(Notification)--简单教程 1.先看效果 2.实现 1.主界面是MainWindow 上面就只摆放一个Button即可.在Button的点击事件中 ...

  9. 通知 Notification 详解

    效果 通知栏-刚收到通知时 通知栏-收到通知几秒后 标准视图 大视图-下滑前是标准视图 大视图-下滑后显示大视图 自定义通知 讲解 Notification,俗称通知,是一种具有全局效果的通知,它展示 ...

随机推荐

  1. nginx错误汇总

    一.Nginx出现413 Request Entity Too Large错误解决方法 Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现, ...

  2. HDU 5667 Sequence 矩阵快速幂

    官方题解: 观察递推式我们可以发现,所有的fi​​都是a的幂次,所以我们可以对f​i​​取一个以a为底的log,g​i​​=log​a​​ f​i​​ 那么递推式变g​i​​=b+c∗g​i−1​​+ ...

  3. ZOJ3732 Graph Reconstruction Havel-Hakimi定理

    分析: 给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化. 进一步,若图为简单图,则称此序列可简单图化 (来自百度百科) 可简单图化的判定可以用Have ...

  4. Upgrading to EF6

    In previous versions of EF the code was split between core libraries (primarily System.Data.Entity.d ...

  5. 经典sql总结(2)

    如何做呢,跟上文区别不大. 我建个表,输入以下 select year, () as m1, () as m2, () as m3 from info2 as t group by year;

  6. iOS开发——GCD多线程详解

    GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...

  7. HW3.7

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  8. 转HTMLTestRunner 生成测试报告

    1.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 1>下载HTMLTestRunner.py文件,地址为: h ...

  9. .NET中常见对象

    .NET中六大内置对象:1.Response    2.Request   3.Session   4.Appliction  5.Server  6.Cookie System.Web.HttpCo ...

  10. [置顶] 单机版hadoop实例安装

    目标:运行单机版hadoop http://localhost:50030mapredule监控界面 http://localhost:50070HDFS监控页面 -->安装linux系统 -- ...