Android實現3種Notification(狀態欄通知)


推薦文章(期待大家的star):
Android實現購物車頁面及購物車效果(點擊動畫)
Android自定義收銀鍵盤(原創)

源碼下載地址

Notification,是一種具有全局效果的通知,可以在系統的通知欄中顯示。當 APP 向系統發出通知時,它將先以圖標的形式顯示在通知欄中。用戶可以下拉通知欄查看通知的詳細信息。下面會分別實現普通的通知,帶自定義視圖的通知,還有懸掛似的通知

3種方式開始前都要先執行下面這行代碼:

 mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

1.普通通知:

效果圖:

gif1.gif
創建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.帶視圖的通知

效果圖:

gif2.gif

自定義視圖有兩種狀態,一種是上面的效果圖,即展開狀態的視圖;另一種是普通狀態下的視圖,需要我們手動的拉一下,折疊部分才會出來。我們需要用到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.懸掛式的通知

效果圖:

gif3.gif

懸掛式是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);設置.


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com