Android实现3种Notification(状态栏通知)
Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。当 APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。下面会分别实现普通的通知,带自定义视图的通知,还有悬挂似的通知
3种方式开始前都要先执行下面这行代码:
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
1.普通通知:
效果图:
创建Builder对象,利用PendingIntent来跳转,然后给Builder添加各种属性。
完整的代码如下:
Notification.Builder builder=new Notification.Builder(this); Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.jianshu.com/p/82e249713f1b"));
PendingIntent pendingIntent=PendingIntent.getActivity(this,0,intent,0);
builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.mipmap.ic_launcher); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); builder.setAutoCancel(true); builder.setContentTitle("普通通知"); mNotificationManager.notify(1, builder.build());
2.带视图的通知
效果图:
自定义视图有两种状态,一种是上面的效果图,即展开状态的视图;另一种是普通状态下的视图,需要我们手动的拉一下,折叠部分才会出来。我们需要用到RemoteViews哎创建视图。
视图的布局我就不贴出来了,就是个普通的水平布局.
指定展开状态的视图:
notification.bigContentView=remoteViews;
普通状态视图:
notification.contentView=remoteViews;
完整代码如下:
Notification.Builder builder2=new Notification.Builder(this); Intent intent2=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.jianshu.com/p/82e249713f1b"));
PendingIntent pendingIntent2=PendingIntent.getActivity(this,0,intent2,0);
builder2.setContentIntent(pendingIntent2); builder2.setSmallIcon(R.mipmap.ic_launcher); builder2.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); builder2.setAutoCancel(true); builder2.setContentTitle("折叠通知");
RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.layout_view);
Notification notification=builder2.build(); notification.bigContentView=remoteViews; mNotificationManager.notify(1,notification);
3.悬挂式的通知
效果图:
悬挂式是Android5.0以后的新特性,前两种需要手动拉通知栏,而这种方式不需要,直接就可以显示在屏幕上方.
完整代码如下:
Notification.Builder builder3=new Notification.Builder(this); Intent intent3=new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.jianshu.com/p/82e249713f1b"));
PendingIntent pendingIntent3=PendingIntent.getActivity(this,0,intent3,0);
builder3.setContentIntent(pendingIntent3); builder3.setSmallIcon(R.mipmap.ic_launcher); builder3.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)); builder3.setAutoCancel(true); builder3.setContentTitle("悬挂通知");
Intent XuanIntent=new Intent();
XuanIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
XuanIntent.setClass(this,MainActivity.class);
PendingIntent xuanpengdIntent=PendingIntent.getActivity(this,0,XuanIntent,PendingIntent.FLAG_CANCEL_CURRENT);
builder3.setFullScreenIntent(xuanpengdIntent,true); mNotificationManager.notify(2,builder3.build());
附加:Android5.0以后可以设置通知的等级
VISIBILITY_PUBLIC: 任何情况的显示
VISIBILITY_PRIVATE: 只有在没有锁屏时显示
VISIBILITY_SECRET: 在安全锁下或者没锁屏下显示
Android5.0以后可以通过builder.setVisibility(Notification.VISIBILITY_PUBLIC);设置.
源码地址:http://download.csdn.net/download/qq_34908107/9898690
简书地址: http://www.jianshu.com/p/a84ddaf530ec
github推荐:https://github.com/javaexception/ShoppingCart