Android应用开发学习之状态栏通知
作者:刘昊昱
博客: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应用开发学习之状态栏通知的更多相关文章
- Android应用开发学习之表格视图
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来学习一个使用表格视图的程序,下图是该程序的运行效果: 该程序主Activity文件内容如下: packag ...
- 2021年正确的Android逆向开发学习之路
2021年正确的Android逆向开发学习之路 说明 文章首发于HURUWO的博客小站,本平台做同步备份发布.如有浏览或访问异常或者相关疑问可前往原博客下评论浏览. 原文链接 2021年正确的Andr ...
- Android应用开发学习笔记之播放音频
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android支持常用音视频格式文件的播放,本文我们来学习怎样开发Android应用程序对音视频进行操作. Andr ...
- android移动开发学习笔记(二)神奇的Web API
本次分两个大方向去讲解Web Api,1.如何实现Web Api?2.如何Android端如何调用Web Api?对于Web Api是什么?有什么优缺点?为什么用WebApi而不用Webservice ...
- Android成长日记-Noification实现状态栏通知
Notification可以作为状态栏的通知,实现这个效果需要使用NotificationManager实现控制类,才能实现对这个效果的显示 下面是实现状态栏显示效果的通知: 1. 首先在Layout ...
- Android应用开发学习笔记之事件处理
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android提供的事件处理机制分为两类:一是基于监听的事件处理:二是基于回调的事件处理.对于基于监听的事件处理,主 ...
- Android 系统开发学习杂记(转)
http://blog.csdn.net/shagoo/article/details/6709430 > 开发环境1.安装 Eclipse 和 android-sdk 并解压安装2.Eclip ...
- Android应用开发学习之相对布局
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 相对布局RelativeLayout是指按照组件之间的相对位置进行布局,如一个组件在另一个组件的左边.右边.上边或下 ...
- Android应用开发学习笔记之AsyncTask
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在上一篇文章中我们学习了多线程和Handler消息处理机制,如果有计算量比较大的任务,可以创建一个新线程执行计算工作 ...
随机推荐
- Could not open ServletContext resource [/WEB-INF/applicationContext.xml]解决方法
抛错: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document ...
- 查看syslog-ng内存,兼容容器情况
syslog_pid=`ps -ef|grep syslog-ng|grep -v grep |awk '{print $2}'` pid_count=`ps -ef|grep syslog-ng|g ...
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...
- Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示
Android 系统版本号非常多,较新的 4.4 ,较老的 2.3 ,都有人用. Qt on Android 开发的 Android 应用.默认在 Android 设备上是非全屏的. 而有些应用的需求 ...
- MVC4 成员资格、 身份验证
SimpleMembership,成员资格提供程序. 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板 ASP.NET MVC 4 互联网模板中添加一些新的 ...
- 安装MySQL和Navicat,并与MyEclipse连接
1.下载安装MySQL 1)到http://dev.mysql.com/downloads/下载MySQL社区版Server,和用于JDBC的Connector.一路默认安装就可以,须要注意的是记住M ...
- Visual Studio在页面按F7不能跳转至cs代码页的解决方法
检查页面Page设置内的CodeBehind属性,看是否与代码页的文件名相同,不同则改正,问题得以解决.
- delete语句与reference约束 FK_subplan_job_id冲突问题,导致job无法删除解决办法
在SQL Server 2008上删除已运行维护计划后,维护计划job没有自动删除掉,手工再删除维护计划job,提示删除失败. 错误现象:delete 语句与 reference 约束"F ...
- Spring中的WebDataBinder浅析
Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等).如果传递过来 ...
- 我的django之旅(二)模板和静态文件
我的django之旅(二)模板和静态文件 标签(空格分隔): django 1.为什么要使用模板 在上一篇博文中,提到了HttpReponse,但是HttpReponse只能传送字符串,如果要构建一个 ...