状态栏通知常涉及到的三个参数:
ticker text
title
content
将状态栏下拉完全展示后,title和content分别对应一则通知的标题和正文。
ticker text 则是状态栏非下拉展示时,在状态栏显示1~2秒的提示文字。
ticker text 的作用用
1. 提示用户,我们的APP在通知栏新建了一则通知,下拉可查看详情。
2. 提示用户,APP的重要状态变更。
下面的代码模拟一个下载的事件,下载开始 和 下载结束 时会用ticker text 提示用户。其余进度则用 title + content 展示。
效果如下:
代码如下:
从代码执行效果中可以看出,我们每次执行 notify(..) 函数时,ticker text 和上一次不同时,ticker text 才会被展示。
package com.example.androiddemo;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
public Notification.Builder mBuilder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDownloadProgressNotif();
Thread t = new Thread() {
public void run() {
int i = 0;
for (; i <= 100; i+=5) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
final int j = i;
MainActivity.this.runOnUiThread(
new Runnable() {
@Override
public void run() {
updateProgressNotif(j);
}
});
}
}
};
t.start();
}
private void updateProgressNotif(int progress) {
if (progress == 100) {
mBuilder.setContentTitle("下载完成");
mBuilder.setOngoing(false);
mBuilder.setTicker("下载完成");
}
mBuilder.setProgress(100, progress, false);
mBuilder.setContentText("已完成 " + progress + "%");
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, mBuilder.build());
}
private void initDownloadProgressNotif() {
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder = new Notification.Builder(this);
mBuilder.setTicker("开始下载更新包");
mBuilder.setContentTitle("下载中...");
mBuilder.setSmallIcon(R.drawable.ic_launcher);
mBuilder.setContentIntent(pendingIntent);
mBuilder.setOngoing(true);
mBuilder.setProgress(0, 0, true);
}
}