通知栏消息是Android的一个最成功的发明,的确给用户带来很好的体验。
主要用到的类有NotificationManager。是用来管理提醒的。
还有PendingIntent用来指定点击后跳转的。
现在公司的需求就是:需要检查服务端有没有消息要推送,每次打开软件都去检查太消耗了,所以我的策略是每天第一次打开软件时去检测,这一天后来再打开软件就不检测了。
看代码吧:
/**
* 是否需要检查通知栏提示
* @return
*/
private boolean isNeedNotify(){
SharedPreferences share = getSharedPreferences(SHARE_APP_TAG, Context.MODE_PRIVATE);
String notifyDate = share.getString(MAP_NOTIFY_DATE, "");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
String dateStr = df.format(new Date());
if(dateStr.equals(notifyDate)){
return false;}
else{return true;}}
上面这段代码是检查今天有没有检查过。
if(isNeedNotify()){
//如果需要检查通知栏提示的话,3秒之后去检查
new Timer().schedule(new TimerTask() {
@Override
public void run() {
createNotify();
}
}, 3000);
}
上面这段代码是判断是否需要检查,如果需要的话,3秒钟之后开始检查。
//创建通知栏信息
private void createNotify(){
putNotifyDate();
Log.i("notify=====", "notify");
init();
//新建状态栏通知
baseNF = new Notification();
//设置通知在状态栏显示的图标
baseNF.icon = R.drawable.icon_01;
//通知时在状态栏显示的内容
baseNF.tickerText = "纵横通知消息";
//通知被点击后,自动消失
baseNF.flags |= Notification.FLAG_AUTO_CANCEL;
//第二个参数 :下拉状态栏时显示的消息标题 expanded message title
//第三个参数:下拉状态栏时显示的消息内容 expanded message text
//第四个参数:点击该通知时执行页面跳转
baseNF.setLatestEventInfo(ListViewActivity.this, "标题", "内容", pd);
//发出状态栏通知
nm.notify(Notification_ID_BASE, baseNF);
}
为了方便,我暂时用本地数据代替到服务器获取数据。上面的代码是创建状态栏通知。
/**
* 初始化状态栏通知
*/
private void init(){
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(this,ListViewActivity.class);
pd = PendingIntent.getActivity(ListViewActivity.this, 0, intent, 0);
}
上面的代码是初始化一些状态栏通知需要的
/**
* 将发出检查通知的时间存入文件
*/
private void putNotifyDate(){
SharedPreferences share = getSharedPreferences(SHARE_APP_TAG, 0);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
String dateStr = df.format(new Date());
share.edit().putString(MAP_NOTIFY_DATE,dateStr).commit();
}
上面的代码是将发出检查通知的时间存入文件,以备后来每次判断。
Android 通知栏消息,布布扣,bubuko.com
Android 通知栏消息