一、Android通知的简单介绍
之前我们使用Android通知的时候用的是Notification,可是今天我查阅了一下Android官网API,发现官方已经不推荐使用Notification,而是推荐使用v4包下的NotifitionCompat,总结了一下通知大概分为一下几种:
1.简单通知
2.点击通知进入一个Activity,点击返回时进入指定页面
3.点击通知进入一个Activity,点击返回时回到桌面
4.带进度条的通知
5.可下拉拖动的通知
6.自定义布局的通知
二、通知的具体实现
简单通知
private void simpleNotice() { //此Builder为android.support.v4.app.NotificationCompat.Builder中的,下同。 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); //系统收到通知时,通知栏上面显示的文字。 mBuilder.setTicker("通知标题1"); //显示在通知栏上的小图标 mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup); //通知标题 mBuilder.setContentTitle("通知标题1"); //通知内容 mBuilder.setContentText("文本1"); //设置大图标,即通知条上左侧的图片(如果只设置了小图标,则此处会显示小图标) mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.launcher)); //显示在小图标左侧的数字 mBuilder.setNumber(6); //设置为不可清除模式 mBuilder.setOngoing(false); //显示通知,id必须不重复,否则新的通知会覆盖旧的通知(利用这一特性,可以对通知进行更新) nm.notify(1, mBuilder.build()); }
点击通知进入一个Activity,点击返回时进入指定页面
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) public void resultActivityBackApp() { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setTicker("通知标题2"); mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup); mBuilder.setContentTitle("通知标题2"); mBuilder.setContentText("点击通知进入一个Activity,点击返回时进入指定页面。"); //设置点击一次后消失(如果没有点击事件,则该方法无效。) mBuilder.setAutoCancel(true); //点击通知之后需要跳转的页面 Intent resultIntent = new Intent(this, ResultActivity.class); //使用TaskStackBuilder为“通知页面”设置返回关系 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); //为点击通知后打开的页面设定 返回 页面。(在manifest中指定) stackBuilder.addParentStack(ResultActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(pIntent); // mId allows you to update the notification later on. nm.notify(2, mBuilder.build());
}
点击通知进入一个Activity,点击返回时回到桌面
public void resultActivityBackHome() { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setTicker("通知标题3"); mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup); mBuilder.setContentTitle("通知标题3"); mBuilder.setContentText("点击通知进入一个Activity,点击返回时回到桌面"); //设置点击一次后消失(如果没有点击事件,则该方法无效。) mBuilder.setAutoCancel(true); Intent notifyIntent = new Intent(this, ResultActivity.class); notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(pIntent); nm.notify(3, mBuilder.build()); }
带进度条的通知
public void progressNotice() { final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setTicker("通知标题4"); mBuilder.setContentTitle("Picture Download") .setContentText("Download in progress") .setSmallIcon(R.drawable.ic_wode_thumbup); // Start a lengthy operation in a background thread new Thread(new Runnable() { @Override public void run() { int progress; for (progress = 0; progress <= 100; progress++) { // Sets the progress indicator to a max value, the current completion percentage, // and determinate state mBuilder.setProgress(100, progress, false); //不明确进度的进度条 //mBuilder.setProgress(0, 0, true); nm.notify(4, mBuilder.build()); // 模拟延时 try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } // When the loop is finished, updates the notification F mBuilder.setContentText("Download complete"); // Removes the progress bar mBuilder.setProgress(0, 0, false); nm.notify(4, mBuilder.build()); } } ).start(); }
可下拉拖动的通知
public void expandLayoutNotice() { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setTicker("通知标题5"); mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup); mBuilder.setContentTitle("通知标题5"); mBuilder.setContentText("按住通知下拉可显示扩展布局"); NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"}; // 设置扩展布局的标题 inboxStyle.setBigContentTitle("Event tracker details:"); for (String s : events) { inboxStyle.addLine(s); } mBuilder.setStyle(inboxStyle); nm.notify(5, mBuilder.build()); }
自定义布局的通知
public void customLayoutNotice() { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); mBuilder.setTicker("通知标题6"); mBuilder.setTicker("通知标题6"); mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup); RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice); mBuilder.setContent(remoteViews); remoteViews.setTextViewText(R.id.tv_content, "自定义content"); remoteViews.setTextViewText(R.id.tv_title, "自定义title"); remoteViews.setImageViewResource(R.id.iv_icon, R.drawable.launcher); //为RemoteViews上的按钮设置点击事件 Intent intent = new Intent(this, ResultActivity.class); PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); remoteViews.setOnClickPendingIntent(R.id.ll_notice, pIntentButton1); nm.notify(6, mBuilder.build()); }