android notification,notificationmanager详解手机开发

我们知道在使用Android的通知的时候一定会用到NotificationManager 、 Notification这两个类,这两个类的作用分别是

NotificationManager :  是状态栏通知的管理类,负责发通知、清楚通知等。

Notification:状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数。

这里需要声明一点,由于Android的系统升级,Android在通知这块也有很多老的东西被抛弃了,一个是api11的版本,一个是api16的版本。我们来比较下api11之前的用法这是通用的:

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,                       new Intent(this, MainActivity.class), 0);               // 下面需兼容Android 2.x版本是的处理方式                Notification notify1 = new Notification();               notify1.icon = R.drawable.message;               notify1.tickerText = "TickerText:您有新短消息,请注意查收!";               notify1.when = System.currentTimeMillis();               notify1.setLatestEventInfo(this, "Notification Title",                       "This is the notification message", pendingIntent);               notify1.number = 1;               notify1.flags |= Notification.FLAG_AUTO_CANCEL;              manager.notify(NOTIFICATION_FLAG, notify1);  

api11-api16的用法是这样的(主要是新增了自定义通知图标,并且通知的构造方式也发生了改变)

 PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0,                       new Intent(this, MainActivity.class), 0);               // API11之后才支持               Notification notify2 = new Notification.Builder(this)                       .setSmallIcon(R.drawable.message)                      .setTicker("TickerText:" + "您有新短消息,请注意查收!")                      .setContentTitle("Notification Title")                       .setContentText("This is the notification message")                     .setContentIntent(pendingIntent2)                     .setNumber(1)                      .getNotification(); // 需要注意build()是在API level               // 16及之后增加的,在API11中可以使用getNotificatin()来代替               notify2.flags |= Notification.FLAG_AUTO_CANCEL;               manager.notify(NOTIFICATION_FLAG, notify2);  

api16之后

PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0,                       new Intent(this, MainActivity.class), 0);               // API16之后才支持               Notification notify3 = new Notification.Builder(this)                       .setSmallIcon(R.drawable.message)                       .setTicker("TickerText:" + "您有新短消息,请注意查收!")                       .setContentTitle("Notification Title")                       .setContentText("This is the notification message")                       .setContentIntent(pendingIntent3).setNumber(1).build();              notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。               manager.notify(NOTIFICATION_FLAG, notify3);//关联通知

我们这里讲的主要是api16之后的使用方法

首先我们通过系统的Service获取NotificationManager对象,然后通过他将消息发送给系统,获取方法如下:

NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);  

Notification主要包含以下参数:

  • An icon  (通知的图标)
  • A title and expanded message  (通知的标题和内容)
  • A PendingIntent   (点击通知执行页面跳转)

使用流程:

1、创建NotificationManager 

通过NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);获取NotificationNotificationManager 消息管理类,

2,创建Notification实体

通过Notification.Builder builder = new Notification.Builder(this);创建一个通知的实体,里面可以包含很多的参数,如通知的Icon,消息内容,跳转等。

3,通过notificationManager.notify(0, builder.build());将消息绑定,里面会用到NotificationService(这里不做讲解)

普通通知

Notification.Builder builder = new Notification.Builder(this); 
        Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/xiangzhihong8")); 
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); 
        builder.setContentIntent(pendingIntent); 
        builder.setSmallIcon(R.drawable.lanucher); 
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.lanucher)); 
        builder.setAutoCancel(true); 
        builder.setContentTitle("普通通知"); 
        builder.setContentText("您有新短消息,请注意查收"); 
        notificationManager.notify(0, builder.build());

折叠式通知

我们还可以通过RemoteViews(这里就是桌面小控件的实现,不知道大家是否还有印象)

Notification.Builder builder = new Notification.Builder(this); 
        Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/itachi85/")); 
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); 
        builder.setContentIntent(pendingIntent); 
        builder.setSmallIcon(R.drawable.foldleft); 
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.lanucher)); 
        builder.setAutoCancel(true); 
        builder.setContentTitle("折叠菜单"); 
        builder.setContentText("您有新短消息,请注意查收"); 
        //用RemoteViews来创建自定义Notification视图 
        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.view_fold); 
        Notification notification = builder.build(); 
        //指定展开时的视图 
        notification.bigContentView = remoteViews; 
        notificationManager.notify(1, notification);

自定义通知

  Notification.Builder builder = new Notification.Builder(this); 
        Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/xiangzhihong8")); 
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); 
        builder.setContentIntent(pendingIntent); 
        builder.setSmallIcon(R.drawable.foldleft); 
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon)); 
        builder.setAutoCancel(true); 
        builder.setContentTitle("自定义菜单"); 
        builder.setContentText("您有新短消息,请注意查收"); 
        //设置点击跳转 
        Intent hangIntent = new Intent(this,NotificationActivity.class); 
        hangIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        PendingIntent hangPendingIntent = PendingIntent.getActivity(this, 0, hangIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
        builder.setFullScreenIntent(hangPendingIntent, true); 
 
        notificationManager.notify(2, builder.build());

android notification,notificationmanager详解手机开发
android notification,notificationmanager详解手机开发


源码:
http://download.csdn.net/detail/xiangzhihong8/9639345


原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/app/5536.html

(0)
上一篇 2021年7月16日 23:50
下一篇 2021年7月16日 23:50

相关推荐

发表回复

登录后才能评论