123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- //设为true代表常驻状态栏
- // this.mNotificationBuild.setOngoing(false);
- //设置通知栏标题
- // this.mNotificationBuild.setContentTitle(defaultTitle);
- //设置通知栏显示内容
- // this.mNotificationBuild.setContentText(defaultContent);
- //设置通知栏点击意图
- // this.mNotificationBuild.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))
- //通知首次出现在通知栏,带上升动画效果的
- // this.mNotificationBuild.setTicker(defaultTicker);
- //设置通知集合的数量
- // this.mNotificationBuild.setNumber(defaultNumber)
- //通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
- // this.mNotificationBuild.setWhen(System.currentTimeMillis());
- //设置该通知优先级
- // this.mNotificationBuild.setPriority(Notification.PRIORITY_DEFAULT);
- //设置这个标志当用户单击面板就可以让通知将自动取消
- // this.mNotificationBuild.setAutoCancel(true);
- //向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合
- //Notification.DEFAULT_ALL Notification.DEFAULT_SOUND Notification.DEFAULT_VIBRATE
- // console.log('默认:'+plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
- // this.mNotificationBuild.setDefaults(plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
- //默认的push图标
- // this.mNotificationBuild.setSmallIcon(17301620);//设置小图标
- //https://www.cnblogs.com/penghuster/p/4909930.html
- // const R = plus.android.importClass("android.R");
- // this.mNotificationBuild.setSmallIcon(R.drawable.stat_sys_download);
- export default class NotificationUtil {
- notifyManager;
- mNotificationBuild;
- Notification;
- defaultTitle = "通知栏标题";
- defaultContent = "通知内容";
- defaultTicker = "通知提示";
- defaultNotifyId = 1000;
- constructor() {
- this.initNotification();
- }
- initNotification = () => {
- if (plus.os.name != "Android") {
- return;
- }
- //当前版本号
- const SystemVersion = plus.os.version;
- const Context = plus.android.importClass("android.content.Context");
- const main = plus.android.runtimeMainActivity();
- const NotificationManager = plus.android.importClass(
- "android.app.NotificationManager",
- );
- const nm = main.getSystemService(Context.NOTIFICATION_SERVICE);
- // Notification build 要android api16以上才能使用(4.1.2以上)
- if (this.compareVersion("4.1.1", SystemVersion) == true) {
- this.Notification = plus.android.importClass("android.app.Notification");
- } else {
- this.Notification = plus.android.importClass(
- "android.support.v4.app.NotificationCompat",
- );
- }
- if (this.Notification) {
- const Build = plus.android.importClass("android.os.Build");
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- //android8.0及以上需设置通知渠道才能显示通知
- //创建通知渠道
- const name = "渠道名称1";
- const description = "渠道描述1";
- const channelId = "channelId1"; //渠道id
- // const importance = NotificationManager.IMPORTANCE_DEFAULT;//重要性级别
- // const importance = NotificationManager.IMPORTANCE_HIGH;//重要性级别
- const importance = NotificationManager.IMPORTANCE_LOW; //重要性级别
- const NotificationChannel = plus.android.importClass(
- "android.app.NotificationChannel",
- );
- const mChannel = new NotificationChannel(channelId, name, importance);
- mChannel.setDescription(description); //渠道描述
- mChannel.setDescription("渠道描述1"); //渠道描述
- mChannel.enableLights(false); //是否显示通知指示灯
- mChannel.enableVibration(false); //是否振动
- nm.createNotificationChannel(mChannel); //创建通知渠道
- this.notifyManager = nm;
- this.mNotificationBuild = new this.Notification.Builder(
- main,
- channelId,
- );
- } else {
- this.notifyManager = nm;
- this.mNotificationBuild = new this.Notification.Builder(main);
- }
- }
- };
- createNotification = (config) => {
- let { title, content, tickerTips, notifyId } = config;
- if (!this.mNotificationBuild || !this.notifyManager) {
- return;
- }
- notifyId = typeof notifyId == "number" ? notifyId : this.defaultNotifyId;
- title = title || this.defaultTitle;
- content = content || this.defaultContent;
- tickerTips = tickerTips || this.defaultTicker;
- this.mNotificationBuild.setContentTitle(title);
- this.mNotificationBuild.setContentText(content);
- this.mNotificationBuild.setTicker(tickerTips);
- //默认有声音
- this.mNotificationBuild.setDefaults(this.Notification.DEFAULT_SOUND);
- this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
- };
- createProgress = (config) => {
- let {
- progress,
- title,
- content,
- tickerTips,
- notifyId,
- intentList,
- isPause,
- } = config;
- if (!this.mNotificationBuild || !this.notifyManager) {
- return;
- }
- notifyId = typeof notifyId == "number" ? notifyId : this.defaultNotifyId;
- title = title || "APP更新包";
- content = content || `正在下载...${progress}%`;
- tickerTips = tickerTips || "进度提示";
- this.mNotificationBuild.setContentTitle(title);
- this.mNotificationBuild.setContentText(content);
- this.mNotificationBuild.setTicker(tickerTips);
- const R = plus.android.importClass("android.R");
- this.mNotificationBuild.setSmallIcon(
- isPause
- ? R.drawable.stat_sys_download_done
- : R.drawable.stat_sys_download,
- );
- if (intentList) {
- const pendingIntent = this.createIntent(notifyId, intentList);
- this.mNotificationBuild.setContentIntent(pendingIntent);
- }
- /*
- 如果为确定的进度条:调用setProgress(max, progress, false)来设置通知,在更新进度的时候在此发起通知更新progress,并且在下载完成后要移除进度条,通过调用setProgress(0, 0, false)既可。
- 如果为不确定(持续活动)的进度条,这是在处理进度无法准确获知时显示活动正在持续,所以调用setProgress(0, 0, true) ,操作结束时,调用setProgress(0, 0, false)并更新通知以移除指示条
- */
- //进度条显示时,默认无声音
- this.mNotificationBuild.setDefaults(0);
- this.mNotificationBuild.setProgress(100, progress, false);
- this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
- };
- compProgressNotification = (config) => {
- let { title, content, notifyId, intentList } = config;
- if (!this.mNotificationBuild || !this.notifyManager) {
- return;
- }
- notifyId = typeof notifyId == "number" ? notifyId : this.defaultNotifyId;
- title = title || "APP更新包";
- content = content || "下载完毕!";
- const R = plus.android.importClass("android.R");
- this.mNotificationBuild.setSmallIcon(R.drawable.stat_sys_download_done);
- this.mNotificationBuild.setContentTitle(title);
- this.mNotificationBuild.setContentText(content);
- this.mNotificationBuild.setAutoCancel(true);
- this.mNotificationBuild.setProgress(0, 0, false); //移除进度条
- if (intentList) {
- const pendingIntent = this.createIntent(notifyId, intentList);
- this.mNotificationBuild.setContentIntent(pendingIntent);
- }
- //默认有声音
- // this.mNotificationBuild.setDefaults(plus.android.importClass("android.app.Notification").DEFAULT_SOUND);
- this.notifyManager.notify(notifyId, this.mNotificationBuild.build());
- };
- clearNotification = (notifyId) => {
- notifyId = typeof notifyId == "number" ? notifyId : this.defaultNotifyId;
- if (this.notifyManager) {
- this.notifyManager.cancel(notifyId);
- }
- };
- clearAllNotification = () => {
- if (this.notifyManager) {
- this.notifyManager.cancelAll();
- }
- };
- createIntent = (notifyId, intentList) => {
- const main = plus.android.runtimeMainActivity();
- const Intent = plus.android.importClass("android.content.Intent");
- const PendingIntent = plus.android.importClass("android.app.PendingIntent");
- const intent = new Intent(main, main.getClass());
- intentList.map((item) => {
- intent.putExtra(item[0], item[1]);
- });
- return PendingIntent.getActivity(
- main,
- notifyId,
- intent,
- PendingIntent.FLAG_CANCEL_CURRENT,
- );
- };
- compareVersion = (oldVersion, nowVersion) => {
- if (!oldVersion || !nowVersion || oldVersion == "" || nowVersion == "") {
- return false;
- }
- const oldVersionA = oldVersion.split(".", 4);
- const nowVersionA = nowVersion.split(".", 4);
- for (const i = 0; i < oldVersionA.length && i < nowVersionA.length; i++) {
- const strOld = oldVersionA[i];
- const numOld = parseInt(strOld);
- const strNow = nowVersionA[i];
- const numNow = parseInt(strNow);
- if (numNow > numOld /*||strNow.length>strOld.length*/) {
- return true;
- } else if (numNow < numOld) {
- return false;
- }
- }
- if (
- nowVersionA.length > oldVersionA.length &&
- 0 == nowVersion.indexOf(oldVersion)
- ) {
- return true;
- }
- };
- }
|