作者:刘昊昱

博客:http://blog.csdn.net/liuhaoyutz

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

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

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

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

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

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

下面我们来看一个例子,其运行效果如下所示:

主布局文件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文件,其内容如下所示:

package com.liuhaoyu;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity {
final int NOTIFYID_1 = 123; //第一个通知的ID
final int NOTIFYID_2 = 124; //第二个通知的ID /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.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.image01;
notify.tickerText = "有新通知啦!";
notify.when = System.currentTimeMillis();
notify.defaults = Notification.DEFAULT_ALL;
notify.setLatestEventInfo(MainActivity.this, "通知1", "周六下午5点打篮球", null);
notificationManager.notify(NOTIFYID_1, notify); Notification notify1 = new Notification(R.drawable.image01, "哈哈,又有新通知了", System.currentTimeMillis());
notify1.flags|=Notification.FLAG_AUTO_CANCEL;
Intent intent=new Intent(MainActivity.this,ContentActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
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) {
// notificationManager.cancel(NOTIFYID_1); //清除ID号为常量NOTIFYID_1的通知
notificationManager.cancelAll(); //清除全部通知 }
});
}
}

当点击第一个按钮时,发送两个通知,第一个直接显示通知内容,第二个通过启动另外一个Activity 即ContentActivity来显示通知内容。

当点击第二个按钮时,清空所有通知,也可以删除指定ID号的通知。

因为第一个通知设置使用默认声音、默认振动及默认闪光灯,即程序需要访问系统闪光灯资源和振动器,所以我们需要在AndroidManifest.xml文件中声明使用权限,加上如下语句:

    <uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.VIBRATE"/>

因为第二个通知要启动另外一个Activity来显示通知内容,所以我们也要在AndroidManifest.xml文件中声明这个Activity,加入如下语句:

        <activity
android:label="通知"
android:name=".ContentActivity"
android:theme="@android:style/Theme.Dialog" />

通知2调用的活动ContentActivity比较简单,仅仅是显示一条通知,但注意我们通过在AndroidManifest.xml中的android:theme="@android:style/Theme.Dialog"指定它为对话框的形式。该活动实现如下:

package com.liuhaoyu;

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

其布局文件内容如下:

<?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="周日下午5点打羽毛球"
android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout>

Android应用开发学习之状态栏通知的更多相关文章

  1. Android应用开发学习之表格视图

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来学习一个使用表格视图的程序,下图是该程序的运行效果: 该程序主Activity文件内容如下: packag ...

  2. 2021年正确的Android逆向开发学习之路

    2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...

  3. Android应用开发学习笔记之播放音频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...

  4. android移动开发学习笔记(二)神奇的Web API

    本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice ...

  5. Android成长日记-Noification实现状态栏通知

    Notification可以作为状态栏的通知,实现这个效果需要使用NotificationManager实现控制类,才能实现对这个效果的显示 下面是实现状态栏显示效果的通知: 1. 首先在Layout ...

  6. Android应用开发学习笔记之事件处理

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...

  7. Android 系统开发学习杂记(转)

    http://blog.csdn.net/shagoo/article/details/6709430 > 开发环境1.安装 Eclipse 和 android-sdk 并解压安装2.Eclip ...

  8. Android应用开发学习之相对布局

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 相对布局RelativeLayout是指按照组件之间的相对位置进行布局,如一个组件在另一个组件的左边.右边.上边或下 ...

  9. Android应用开发学习笔记之AsyncTask

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...

随机推荐

  1. hadoop2对比hadoop1

    hadoop2对比hadoop1 1.体系结构 HDFS+MapReduce,共同点都是分布式的,主从关系结构. HDFS=一个NameNode+多个DataNode, NameNode含有我们用户存 ...

  2. http接口测试浏览器插件

    http接口测试浏览器插件: Chrome: https://chrome.google.com/webstore/detail/chrome-poster/cdjfedloinmbppobahmon ...

  3. uva 11081 - Strings(LCS)

    题目链接:11081 - Strings 题目大意:给出三个字符串,从分别从第一个字符串和第二个字符串中挑选子串a,b,用a和b组成第三个字符串,问可组成的子串有多少种. 解题思路:说起来惭愧啊,题目 ...

  4. C#隐式执行CMD命令

    本文实现C#隐式执行CMD功能命令.下图是示例程序的主界面. 在命令文本框输入DOS命令,点击"Run"button.在以下的文本框中输出执行结果. 以下是程序的完整代码. 本程序 ...

  5. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  6. linux加入windows域之完美方案(转载)

    概念理解:1.kdc:可信任的密钥分发中心(KDC, Key Distribution Center).2.Winbind是Samba套件的功能之一.它允许Unix系统利用Windows NT的用户帐 ...

  7. SQL函数简述

    数字函数ABS 取绝对值 POWER 乘方 LN 10为底数取幂SQRT 平方根 EXP e的n次乘方 LOG(m,n) m为底数n取幂数学运算函数:ACOS ATAN ATAN2 COS COSH ...

  8. [转]MVP模式开发

    转自:http://www.jianshu.com/p/f7ff18ac1c31 基于面向协议MVP模式下的软件设计-(iOS篇) 字数9196 阅读505 评论3 喜欢11 基于面向协议MVP模式下 ...

  9. (转)HTTP 无法注册 URL http://+:9999/CalculatorService/。进程不具有此命名空间的访问权限

    写WCF时在 1 host.Open(); 报错:HTTP 无法注册 URL http://+:9999/CalculatorService/.进程不具有此命名空间的访问权限(有关详细信息,请参见 h ...

  10. VC++ try catch (转)

    VC++ try catch (转)   以前都是用try{} catch(-){}来捕获C++中一些意想不到的异常, 今天看了Winhack的帖子才知道,这种方法在VC中其实是靠不住的.例如下面的代 ...