Android Notification的简单应用

本文介绍如何在Android应用中实现Notification,包括基本设置如ticker、标题和内容,以及自定义Notification的详细步骤。同时展示了如何使用PendingIntent跳转到指定页面,并提供了自定义通知栏样式的代码示例。

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

Notification是显示在手机状态栏的通知,手机状态栏位于手机屏幕的最上方,哪里一般显示了手机当前的网络状态、电池状态、时间等。Notification锁代表的是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。


MainActivity.java

public class MainActivity extends Activity {
	final int  NOTIFICATION_ID=1;
	NotificationManager nm;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		
	}
	public void send(View view){
		Intent intent = new Intent(MainActivity.this,NextActivity.class);
		//PendingIntent里边封装了一个Intent,意味着要启动的界面
		PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
		Builder builder = new Notification.Builder(MainActivity.this);
		//设置打开该通知,该通知自动消失
		Notification notification = builder.setAutoCancel(true)
		//设置显示在状态栏的通知提示信息
		.setTicker("有新消息")
		//设置小通知图标
		.setSmallIcon(R.drawable.ic_launcher)
		//设置通知内容的标题
		.setContentTitle("通知的内容的标题")
		//设置通知的内容
		.setContentText("通知的内容。。。。。。。。。。。。")
		//设置使用系统默认的声音,默认LED灯
		.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS)
		//设置通知要启动的Intent
		.setContentIntent(pi)
		.build();
		
		//设置完毕,发送通知
		nm.notify(NOTIFICATION_ID, notification);
	}
	public void cancel(View view){
		//根据设置的ID取消通知
		nm.cancel(NOTIFICATION_ID);
	}
}
如果不想使用默认设置,也可以使用如下代码

		//设置自定义声音
		setSound((Uri.parse("file:///sdcard/click.mp3")));
		//设置自定义震动
		setVibrate(new long[]{0,50,100,150});

效果图:


不知道大家是否有所疑问?AlertDialog.Builder为什么要写在内部类中呢?这是建造者模式(将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,白话文:它的意思就是将一个对象和怎么构建这个对象分离开来,如果你想构建一个对象,你把这个消息告诉构建者,并且将自己对这个对象的各种要求告诉建造者,然后建造者根据这些要求进行捣鼓,然后,你所需要的一个对象就出来了。)更简单来说对象的表示较为干净,繁琐创建过程给别人做。



自定义通知栏

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void btn(View view) {
		// 获得系统通知服务,这个服务是单例模式
		NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		// Android3.0以后使用NotificationCompat 以前使用Notification
		NotificationCompat.Builder builder = new NotificationCompat.Builder(
				this);
		RemoteViews rv = new RemoteViews(getPackageName(), R.layout.layout_buju);
		rv.setTextViewText(R.id.tv1, "标题");
		rv.setTextViewText(R.id.tv2, "内容-----------");
		rv.setImageViewResource(R.id.img, R.drawable.ic_launcher);
		//自定义的视图
		builder.setContent(rv);
		//设置刚弹出通知栏的:小图标、文字提示、标题
		builder.setSmallIcon(R.drawable.ic_launcher).setTicker("您有一条新消息").setContentTitle("标题1");
		//点击通知跳转的界面
		Intent intent = new Intent(this,NextActivity.class);
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
		builder.setContentIntent(pendingIntent);
		//自己维护通知栏的消失
		builder.setAutoCancel(true);
		// 发送通知
		manager.notify(2, builder.build());
	};
}

上述代码可以看出,并没有用简单的infalter填充视图,因为通知是全局的,因为可能触发通知的时候APP已经关闭,无法获取XML布局文件,所以这里借助了RemoteViews类。builder.setSmallIcon(R.drawable.ic_launcher).setTicker("您有一条新消息").setContentTitle("标题1"); 这三个方法至少调用一个才能够显示的。NotificationCompat和Notification的区别就是前者3.0以后使用,后者3.0之前使用。

Notification对象,必须包含3个部分:

smallIcon:setSmallIcon()

Title:setContentTitle()

Detail text:setContentText()


效果图:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值