整体步骤:
1、创建 NotificationManager对象对通知进行管理:
2、创建 Notification对象,用于存储通知所需的各种信息
3、设定点击通知后触发的意图(optional)
4、设定通知效果(声音、振动等,optional)
5、设定通知布局
6、取消通知
上述的每一步在代码中都有详细注释^_^
实现方法(两种方式):
/** 建议使用的方法,API 16及以上 */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
protected void sendByUsingAPIAfter16() {
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 下述操作与API 11以前的方法基本相同,查看文档把所有deprecated的方法改掉即可
Notification.Builder builder = new Notification.Builder(
SendNotificationActivity.this).
setTicker("This is a test notification").
setSmallIcon(R.drawable.ic_launcher);;
Intent intent = new Intent(SendNotificationActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(
SendNotificationActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = builder.
setContentIntent(pendingIntent).
setContentTitle("Test Title").
setContentText("Test Text").build();
// 设置通知效果(optional)
// setNotificationEffects(notification);
manager.notify(1, notification);
}
//-----------------------------华丽的分界线------------------------------//
/** deprecated 不建议使用,API 11以下的方法 */
@SuppressWarnings("deprecation")
protected void sendByUsingOldAPI() {
// 创建 NotificationManager对象对通知进行管理
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// 创建 Notification对象,用于存储通知所需的各种信息
Notification notification = new Notification(
R.drawable.ic_launcher,// 通知的图标
"This is a test notification",// 通知的内容
System.currentTimeMillis());// 通知被创建的时间,以毫秒为单位
// 设置点击Notification触发事件
Intent intent = new Intent(SendNotificationActivity.this, MainActivity.class);
// 如果Intent要启动的Activity在栈顶,则不创建新的实例
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// PendingIntent和Intent的区别:前者倾向于在某个合适的时机执行某个动作
// 后者倾向于立即执行某个动作
PendingIntent pendingIntent = PendingIntent.getActivity(
SendNotificationActivity.this,
0, // request code,暂时没发现用途,据说通常传0即可
intent, // 通过该Intent对象构建PendingIntent的意图
PendingIntent.FLAG_UPDATE_CURRENT); // PendingIntent的行为,四个常量值,具体可以自行查看文档
// 设定通知布局
notification.setLatestEventInfo(SendNotificationActivity.this,
"Test Title",// 标题内容
"Test Text",// 正文内容
pendingIntent);// 点击通知后触发的意图,可以为null
// 设置通知效果(optional)
// setNotificationEffects(notification);
// 发送通知
manager.notify(2, notification);
}
设置通知振动、铃声等效果:
/** 设置通知效果 */
private void setNotificationEffects(Notification notification) {
// 设置通知声音
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/Basic_tone.ogg"));
notification.sound = soundUri;
// 设置通知振动
// 需添加权限
long[] vibrates = {1000,// 静止1秒
1000,// 振动1秒
1000,// 再静止1秒
1000};// 再振动1秒,可以以此类推设置下去
notification.vibrate = vibrates;
// 设置LED灯闪烁
notification.ledARGB = Color.GREEN;
notification.ledOnMS = 1000;
notification.ledOffMS = 1000;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
// 不设置上述繁冗效果,可采用默认设置
// 根据手机当前环境决定铃声、振动等
// notification.defaults = Notification.DEFAULT_ALL;
}
要控制手机振动,需声明权限,在Manifest文件添加:
<uses-permission android:name="android.permission.VIBRATE"/><!-- 振动 -->
在上面的代码启动的Activity的onCreate()方法中,添加取消通知的代码:
cancel()方法中传入的就是要取消的通知的id
/** 取消通知 */
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);