Android中的Notification通知详解

本文深入探讨了Android手机上实现通知功能的具体方法,包括如何获取通知管理器、创建Notification对象、设置通知详细内容及运行状态,以及如何通过PendingIntent实现点击通知后的跳转操作。同时,介绍了兼容不同Android版本的注意事项和关键细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写的不好的地方,烦请各位给留个言说一声,,我会改进的。相互学习啊~~
Notification通知这一功能在我们安卓手机上应用的是非常频繁啊。
特别是手机助手,QQ,微信等等各种APP,都会动不动就给谭出一个通知,通知你有多少软件需要更新或者谁发来什么消息等等。。那么我们应该怎么样实现这个功能呢?
其实都是一些死代码。先上代码,需要注意的地方我再说。
package com.itheima40.notificationdemo;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
private NotificationManager nm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取通知管理器对象, 用于显示和关闭通知
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
@SuppressWarnings("deprecation")
public void show(View v) {
Notification notification = new Notification(
R.drawable.about_brand,
"您有一条新的消息过来了...",
System.currentTimeMillis());
// 使用隐式方式指向小芳的聊天页面
Intent intent = new Intent("com.itheima40.xiaofang");
/**
* PendingIntent是一个延期意图(在未来的某个时间段, 开启一个页面, 并且可以指定使用的次数)
* 其实就是对Intent类的一个包装, 增加了一个使用次数的功能
*
* intent 是指向某个页面的意图. 注意: 此意图必须使用隐式的方式.
*/
PendingIntent contentIntent = PendingIntent.getActivity(this, 10, intent, PendingIntent.FLAG_ONE_SHOT);
notification.setLatestEventInfo(this,
"小芳", // 通知详细内容的标题
"今晚汉庭168旁边的肯德基旁边的...不见不散.", // 通知详细内容的详情信息
contentIntent); // 当点击通知时, 跳转到哪一个页面的PendingIntent
// 设置通知的标识
// notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击后自动关闭
notification.flags = Notification.FLAG_FOREGROUND_SERVICE; // 运行在前台的服务, 类似于手机卫士的通知
// 设置弹出通知时需要的场景: 声音, 亮灯, 震动
notification.defaults = Notification.DEFAULT_ALL; // 弹出通知时, 播放声音, 亮灯和震动.
nm.notify(123, notification);
}
public void close(View v) {
nm.cancel(123);
}
}
XiaoFangActivity.java的代码:
package com.itheima40.notificationdemo;
import android.app.Activity;
import android.os.Bundle;
public class XiaoFangActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("我是小芳的聊天页面...");
}
}
在清单文件中注册Activity
<activity android:name=".XiaoFangActivity">
<intent-filter>
//这个必须写
<action android:name="com.itheima40.xiaofang" />
//这个可以不写的
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

布局文件如下:


细节注意点如下:
1,获取通知的管理器: NotificationManager
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
getSystemService:代表系统的服务。
通知也是系统所具有的一项功能,当我们需要调用哪项系统的服务时,就传入我们所需要的功能服务的名称即可。

2,获取Notification对象。
3.0之后可以通过Notification.Builder来获取Notification对象。
但是为了兼容到2.3版本。所以我们还是继续使用过时的方法:
Notification notification = new Notification(icon,titleText,when);
  icon:第一个参数代表的是通知显示的时候的图标。比如显示QQ消息时通知旁边的那个小企鹅;
  titleText:第二个参数代表的是通知显示的时候的标题。
  when:第三个参数代表的是通知显示的时间,可以通过System.currentTimeMillis()获取当前的         
       时间。
如下图所示:此时还没有下拉通知。



3,设置最新的消息的详细内容
notification.setLatestEventInfo(contextcontentTitlecontentText, contentIntent);
context:上下文对象
contentTitle:内容的标题
contentText:内容的详情
contentIntent:一个延迟意图
详细使用方式请看如下代码:解释的很详细了
// 使用隐式方式指向小芳的聊天页面
Intent intent = new Intent("com.itheima40.xiaofang");
/**
* PendingIntent是一个延期意图(在未来的某个时间段, 开启一个页面, 并且可以指定使用的次数)
* 其实就是对Intent类的一个包装, 增加了一个使用次数的功能
*
* intent 是指向某个页面的意图. 注意: 此意图必须使用隐式的方式.
*/
PendingIntent contentIntent = PendingIntent.getActivity(this, 10, intent, PendingIntent.FLAG_ONE_SHOT);
//notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.setLatestEventInfo(this,
"小芳", // 通知详细内容的标题
"今晚汉庭168旁边的肯德基旁边的...不见不散.", // 通知详细内容的详情信息
contentIntent); // 当点击通知时, 跳转到哪一个页面的PendingIntent
运行效果如下,向下拉的时候显示的信息:



4,设置通知的运行状态
// 设置通知的标识
// notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击后自动关闭
notification.flags = Notification.FLAG_FOREGROUND_SERVICE; // 运行在前台的服务, 类似于手机卫士的通知
参数有:
具体的就不解释了。。没什么意思。。


5,怎么设置弹出通知时让手机震动或者响音或者手机屏幕亮一下
// 设置弹出通知时需要的场景: 声音, 亮灯, 震动
notification.defaults = Notification.DEFAULT_ALL; // 弹出通知时, 播放声音, 亮灯和震动.
Notification.有三个参数可选

DEFAULT_ALL代表三个效果都要有。
并且需要注意的是震动的时候需要权限:
<uses-permission android:name="android.permission.VIBRATE"/>
好了。。需要解释的就是以上了。。





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值