Android通知(Notification)详解(by 星空武哥)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsyz0021/article/details/53525614

转载请标注原创地址: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


拿出微信 扫码关注下面的微信订阅号,及时获取更多推送文章


猜你喜欢

转载自blog.csdn.net/lsyz0021/article/details/53525614
今日推荐