转载请标注原创地址:http://blog.csdn.net/lsyz0021/article/details/53525614
最近项目用到了安卓下的Notification,也就是通知。今天我们就通过一个列子来了解一下android下的Notification,首先是先看怎么使用Notification。
其实发送一个通知到通知栏特别简单
private void showNotification(int id, String title, String data) {
Intent broadcastIntent = new Intent(this, NotificationReceiver.class); // 设置一个广播接收者去打开要做的事情
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle(title) // 设置通知标题
.setContentText(data) // 设置通知内容
.setContentIntent(pendingIntent) // 设置点击通知消息的action
.setSmallIcon(R.drawable.pushsmall) // 设置通知栏显示的小图标,国产手机一般不显示,默认是用大图标来代替
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) // 设置通知栏显示的大图标
.setAutoCancel(true); // 点击通知消息后通知消息消失
.setPriority(Notification.PRIORITY_DEFAULT)//设置通知优先级,如果不设置将不会悬浮显示(部分国产手机需要在手机设置开启)
.setDefaults(Notification.DEFAULT_SOUND)// 设置铃声提醒,可以设置震动、提示灯同时Notification.DEFAULT_ALL
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(id, mBuilder.build());
}
方法setDefaults(int defaults) (NotificationCompat.Builder中的方法,用于提示)
功能:向通知添加声音、闪灯和振动效果的最简单、使用默认(defaults)属性,可以组合多个属性(和方法1中提示效果一样的)
对应属性:
Notification.DEFAULT_VIBRATE //添加默认震动提醒 需要 VIBRATE permission
Notification.DEFAULT_SOUND // 添加默认声音提醒
Notification.DEFAULT_LIGHTS// 添加默认三色灯提醒
Notification.DEFAULT_ALL// 添加默认以上3种全部提醒
广播接收者NotificationReceiver的代码
public class NotificationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//判断app进程是否存活
if (isAppAlive(context, "com.bandeng.temp")) {
Intent startIntent = new Intent(context, PushActivity.class);
startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startIntent);
} else {
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage("com.bandeng.temp");
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
Intent detailIntent = new Intent(context, PushActivity.class);
Intent[] intents = {launchIntent, detailIntent};
context.startActivities(intents);
}
}
private boolean isAppAlive(Context context, String packageName) {
boolean isAppRunning = false;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
for (ActivityManager.RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals(packageName) && info.baseActivity.getPackageName().equals(packageName)) {
isAppRunning = true;
break;
}
}
return isAppRunning;
}
}
看效果
关于通知栏消息我们需要注意一点,就是在android5.0之后setSmallIcon()设置小图标,如果这个小图标不是背景透明色,小图标就会出现整个白色,上面演示的通知栏小图标的背景是透明的,所以不会出现小白点。下面我就演示将小图标设置成背景不是透明色的大图标
小图标设置为大图标
mBuilder.setSmallIcon(R.drawable.ic_launcher)
看下面效果
其实在国产手机上一般是没有问题的,因为国产手机的系统被修改过,一般用大图标代替小图标。
建议参考文章:http://blog.csdn.net/vipzjyno1/article/details/25248021