来通知时都不会震动, // 且不会直接出现在屏幕上方 createNotificationChannel(channelId, channelName, importance); }@TargetApi(Build.VERSION_CODES.O) private void createNotificationChannel( String channelId, String channelName, int importance) { NotificationChannel channel = new NotificationChannel(channelId, channelName, importance); notificationManager.createNotificationChannel(channel); }
然后我是点击按钮来模拟收到通知:
findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //3:创建通知 createNotification("测试通知"); } });private void createNotification( String content) { Intent intent = new Intent(this, SecondActivity.class); /* * 调用PendingIntent的静态放法创建一个 PendingIntent对象用于点击通知之后执行的操作, * PendingIntent可以理解为延时的Intent,在这里即为点击通知之后执行的Intent * 这里调用getActivity(Context context, int requestCode, Intent intent, int flag)方法 * 表示这个PendingIntent对象启动的是Activity,类似的还有getService方法、getBroadcast方法 */ PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); NotificationCompat.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { //如果是8以上的系统。需要传一个channelId. builder = new NotificationCompat.Builder(this, "chat"); } else { builder = new NotificationCompat.Builder(this); } builder .setContentTitle("通知1") // 创建通知的标题 .setContentText(content) // 创建通知的内容 .setSmallIcon(R.drawable.ic_launcher_background) // 创建通知的小图标 .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) // 创建通知的大图标 /* * 首先,无论你是使用自定义视图还是系统提供的视图,上面4的属性一定要设置,不然这个通知显示不出来 */ .setWhen(System.currentTimeMillis()) // 设定通知显示的时间 .setContentIntent(pi) // 设定点击通知之后启动的内容,这个内容由方法中的参数:PendingIntent对象决定 //.setPriority(NotificationCompat.PRIORITY_MAX) // 设置通知的优先级 .setAutoCancel(true); // 设置点击通知之后通知是否消失 //.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg"))) // 设置声音 /* * 设置震动,用一个 long 的数组来表示震动状态,这里表示的是先震动1秒、静止1秒、再震动1秒,这里以毫秒为单位 * 如果要设置先震动1秒,然后停止0.5秒,再震动2秒则可设置数组为:long[]{1000, 500, 2000}。 * 别忘了在AndroidManifest配置文件中申请震动的权限 */builder.setVibrate(new long[]{1000, 500, 2000});/* * 设置手机的LED灯为蓝色并且灯亮2秒,熄灭1秒,达到灯闪烁的效果,不过这些效果在模拟器上是看不到的, * 需要将程序安装在真机上才能看到对应效果,如果不想设置这些通知提示效果, * 可以直接设置:setDefaults(Notification.DEFAULT_ALL); * 意味将通知的提示效果设置为系统的默认提示效果 */ //.setLights(Color.BLUE, 2000, 1000) Notification notification = builder.build(); // 创建通知(每个通知必须要调用这个方法来创建) /* * 使用从系统服务获得的通知管理器发送通知,第一个参数是通知的id,不同的通知应该有不同的id, * 这样当我们要取消哪条通知的时候我们调用notificationManager(通知管理器).cancel(int id) * 方法并传入发送通知时的对应id就可以了。在这里如果我们要取消这条通知, * 我们调用notificationManager.cancel(1);就可以了 * 第二个参数是要发送的通知对象 */ notificationManager.notify(1, notification);