Notification使用大全

2019-03-27  本文已影响0人  Wang_Mr

初始化 NotificationManager 用来管理 Notification

NotificationManager manager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);

①构建 Android 8.0渠道

//适配安卓8.0的消息渠道
String channelID = "channelID";
CharSequence channelName = "channelName";

// 如果想更改渠道设置的声音或震动等属性
// 如果已经创建此Id的Channel,只会复用旧属性,新更改并不会生效
// ①清除应用数据或者卸载重装 会生效
// ②更换channelID 会生效
// *** 先删除ID在重新创建 并不会生效  不生效 不生效
// notificationManager.deleteNotificationChannel(channelID);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_HIGH);

    // 无通知音
    channel.setSound(null, Notification.AUDIO_ATTRIBUTES_DEFAULT);
    // 默认通知音
    channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION), Notification.AUDIO_ATTRIBUTES_DEFAULT);
    // 设置通知出现时的闪灯(如果 android 设备支持的话)
    channel.enableLights(true);
    channel.setLightColor(Color.RED);
    // 设置通知出现时的震动(如果 android 设备支持的话)
    channel.enableVibration(true);
    channel.setVibrationPattern(new long[]{100, 200});

    // 创建渠道
    manager.createNotificationChannel(channel);
}

②初始化NotificationCompat.Builder

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelID);

③配置NotificationCompat.Builder基本属性

.setContentTitle("我是标题")
.setContentText("我是内容")
// 图标
.setSmallIcon(R.mipmap.app_logo);

④配置 < 8.0 版本的声音、震动等属性

// 设置铃声及震动效果等(不设置默认无声音、震动)
.setDefaults(NotificationCompat.DEFAULT_ALL);
// 设置铃声(无)
.setSound(null)
// 设置震动
.setVibrate(new long[]{100, 200})
// 设置通知出现时的闪灯(如果 android 设备支持的话)
// int argb = 0xffff0000;  // led灯光颜色
// int onMs = 300;         // led亮灯持续时间
// int offMs = 100;        // led熄灯持续时间
.setLights(argb,onMs,offMs);

初始化 RemoteViews

// 参数1:包名   参数2:自定义布局的资源Id
RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.notification_control);

自定义布局动态设置文字、图片资源

// 参数1:自定义布局中的控件id   参数2:图片资源
contentView.setImageViewResource(R.id.play, R.mipmap.zanting);
// 参数1:自定义布局中的控件id   参数2:文本内容
contentView.setTextViewText(R.id.title, "文本");

自定义布局中的控件的点击事件

// 参数1:自定义布局中的控件id   参数2:pendingIntent
contentView.setOnClickPendingIntent(R.id.last, pendingIntent);

NotificationCompat.Builder加载自定义布局

builder.setCustomContentView(contentView);

设置点击通知的响应

builder.setContentIntent(pendingIntent);

设置提醒标识符Flags 可用"|"符号多个标识拼接
必须设置 Notification.FLAG_ONGOING_EVENT 否则oppo手机不显示通知

Notification notification = musicBuilder.build();
notification.flags = Notification.FLAG_ONGOING_EVENT;
// 点击清除、侧滑 不清除通知提醒 Notification.FLAG_NO_CLEAR;
// 点击通知后自动取消通知提醒 Notification.FLAG_AUTO_CANCEL

显示通知

// notifyId 一样 会覆盖上一条通知
manager.notify(notifyId, notification);

移除通知

manager.cancel(notifyId);

PendingIntent可以看作是对Intent的一个封装,但它不是立刻执行某个行为,而是满足某些条件或触发某些事件后才执行指定的行为。
①PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags) 用于启动一个Activity的PendingIntent对象.
②PendingIntent.getService(Context context, int requestCode, Intent intent, int flags)用于启动一个Service的PendingIntent对象
③PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)用于向BroadcastReceiver的发送广播的PendingIntent对象

public static boolean isNotificationEnabled(Context context) {
        
    NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
        
    return notificationManagerCompat.areNotificationsEnabled();
}

跳转系统应用权限界面

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.fromParts("package", getPackageName(), null));
startActivity(intent);
上一篇 下一篇

猜你喜欢

热点阅读