这里是目录qwq 试着用了一下markdown

  • 1. 简单创建
  • ①对通知进行管理
  • ②使用一个Builder构造器来创建Notification 对象
  • ③使用notify()方法显示
  • ④实战用法
  • 2、通知详细信息 PendingIntent
  • ①通知的具体内容展示
  • ②自动注销



使用通知:(本文内容来自《第一行代码》整理)

1. 简单创建

①对通知进行管理

可以用 Context的getSystemService() 传入Context.NOTIFICATION_SERVICE表明这个无所不能的大管家今天来管理的是"通知" 啊哈哈
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

②使用一个Builder构造器来创建Notification 对象

support-v4库中提供了一个NotificationCompat 类,使用这个类的构造器兼容性会最好一些 因为嘛这个总是升级
Notification notification = new NotificationCompat.Builder(context).build(); 此时可以设置很多连缀 只要context下面不加. 换行 直接可以继续用
setContentText()/ setContentTitle() (这俩都是直接传入文本)
setWhen() 方法用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上。setSmallIcon() 方法用于设置通知的小图标,注意只能使用纯alpha图层的图片进行设置,小图标会显示在系统状态栏上。setLargeIcon() 方法用于设置通知的大图标,当下拉系统状态栏时,就可以看到设置的大图标了。

③使用notify()方法显示

manager.notify(1, notification); 第一个是id 每个通知不同/ 第二个是刚刚建好的那个对象~

④实战用法
switch (v.getId()) {
            case R.id.send_notice:
                NotificationManager manager = (NotificationManager) getSystemService
                    (NOTIFICATION_SERVICE);
                Notification notification = new NotificationCompat.Builder(this)
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),
                            R.mipmap.ic_launcher))
                        .build();
                manager.notify(1, notification);
                break;
            default:
                break;
        }

还可以吧 不过大小图标最好换一下

2、通知详细信息 PendingIntent

①通知的具体内容展示

它主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需求来选择是使用getActivity() 方法、getBroadcast() 方法,还是getService()方法
现在第一个是context 第二个一般是0 第三个是intent 第四个一般是0。
NotificationCompat.Builder这个构造器还可以再连缀一个setContentIntent() 方法,接收的参数正是一个PendingIntent 对象。因此,这里就可以通过PendingIntent构建出一个延迟执行的“意图”,当用户点击这条通知时就会执行相应的逻辑。
对于另一个活动~~ 我们新增代码如下

Intent intent = new Intent(this, NotificationActivity.class);
                PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);

中间加一个.setContentIntent(pi) 有了这个延迟的"意图" 之后就可以响应,点击事件了!!

②自动注销

可以直接连缀的时候.setAutoCancel(true)
也可以在外面的manager那里 cancel(1) 1是之前我们自己设置的那个id
##3.振动与声音
声音:直接连缀
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg"))) .build(); 振动:使用vibrate 这个属性。它是一个长整型的数组,用于设置手机静止和振动的时长,以毫秒为单位。下标为0的值表示手机静止的时长,下标为1的值表示手机振动的时长,下标为2的值又表示手机静止的时长,以此类推。
.setVibrate(new long[] {0, 1000, 1000, 1000 })就是 在通知到来的时候立刻振动1秒,然后静止1秒,再振动1秒
振动需要权限:
<uses-permission android:name="android.permission.VIBRATE" /> 灯亮起和暗去 .setLights(Color.GREEN, 1000, 1000)
.setDefaults(NotificationCompat.DEFAULT_ALL)这样是直接!!默认跟了全局设置
.setPriority(NotificationCompat.PRIORITY_MAX)是跳出…… 啊好了可以不管了)
总之还挺简单的 : 管理员+ 实体+ 构造方法一大堆 加最后notify~完成!