Android notification hanging pop-up window native.js

//***********************************悬挂式弹窗*************************************************//
let myNJS = {
	'aOSNotify': aOSNotify,
	'aOSReceive': aOSReceive,
}
// 获取版本信息
const osVersion = {
	versionNum: () => {
		let SystemVersion = plus.os.version;
		let VersionNumber = Number(SystemVersion.split('.')[0]);
		return VersionNumber;
	}
}
/**  
 * android原生通知发送  
 * @param content 通知内容  
 * @param data json对象,存储通知的隐藏数据,用于点击通知时接收使用  
 */
function aOSNotify(title = '', content = '', data = {}, channelID = '1', channelName = '自定义的通知') {
	// #ifdef APP-PLUS  
	// var title = '通知标题';  

	console.log('准备通知');
	console.log(plus.os.name);

	// Android平台下才使用此推送  
	if (plus.os.name != 'Android') {
		return false;
	}

	//随机生成通知ID  
	var notifyID = Math.floor(Math.random() * 10000) + 1;
	//先给channel一个默认值


	//传递参数
	if (osVersion.versionNum() >= 8) {
		var payload = {
			'title': title,
			'msg': content,
			'channel_id': channelID,
			'notify_id': notifyID,
			'data': data
		};
	} else {
		var payload = {
			'title': title,
			'msg': content,
			'notify_id': notifyID,
			'data': data
		};
	}

	// 获取应用主Activity实例对象
	var main = plus.android.runtimeMainActivity();
	// importClass: 导入Java类对象
	// 导入上下文(官方翻译)
	var Context = plus.android.importClass("android.content.Context");
	// 导入通知管理相关
	var NotificationManager = plus.android.importClass("android.app.NotificationManager");
	var Notification = plus.android.importClass("android.app.Notification");
	// 
	var Intent = plus.android.importClass("android.content.Intent");
	var PendingIntent = plus.android.importClass("android.app.PendingIntent");
	var nm = main.getSystemService(Context.NOTIFICATION_SERVICE);

	var intent = new Intent(main, main.getClass());
	intent.putExtra("receive", JSON.stringify(payload));

	// PendingIntent.getActivity的第二个参数需要设置为随机数,否则多个通知时会导致前面的通知被后面的通知替换Extra的数据,此处我将其和对应通知的id绑定起来
	var pendingIntent = PendingIntent.getActivity(main, notifyID, intent, PendingIntent.FLAG_CANCEL_CURRENT);

	//可能用到R的一些资源文件
	var r = plus.android.importClass("android.R");

	var mNotification;
	//判断当前系统版本在8.0及以上  
	if (osVersion.versionNum() >= 8) {
		console.log("nm.getNotificationChannel()", nm.getNotificationChannel());
		if (nm.getNotificationChannel() == null) {
			var NotificationChannel = plus.android.importClass('android.app.NotificationChannel');
			var channel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_HIGH);
			channel.setShowBadge(true);
			channel.enableLights(true);
			nm.createNotificationChannel(channel);
		}
		mNotification = new Notification.Builder(main, channelID);
		// mNotification.setDefaults(Notification.DEFAULT_ALL);
		mNotification.setDefaults(Notification.IMPORTANCE_HIGH)
		mNotification.setDefaults(~3);
	} else {
		mNotification = new Notification.Builder(main);
		// mNotification.setDefaults(Notification.DEFAULT_ALL);
		mNotification.setDefaults(Notification.PRIORITY_HIGH)

	}
	var i = notifyID.toString();
	mNotification.setContentIntent(pendingIntent);
	mNotification.setSmallIcon(r.drawable.stat_notify_chat); //设置通知小图标,否则不显示
	// mNotification.setLargeIcon(r.drawable.stat_notify_chat); //设置通知大图标
	mNotification.setAutoCancel(false); //设置点击消失
	// mNotification.setDeleteIntent(true); //左右划动删除
	// mNotification.setShowWhen(true); //显示通知时间,貌似不加这句也能显示  
	mNotification.setContentTitle(title + i) //设置标题
	mNotification.setContentText(content); //设置内容 
	mNotification.setVisibility(Notification.VISIBILITY_PUBLIC) //设置可见性
	// mNotification.setOngoing(true) //设置这是否为“正在进行中”通知

	mNotification.setFullScreenIntent(pendingIntent, true); //开启全屏
	mNotification.setTicker(title); //设置发送到无障碍服务的“ ticker”文本。
	mNotification.setDefaults(~3); //这两行结合上面的setTicker实现悬浮提示过几秒自动消失,基于覆盖考虑,把这个放到最上方
	mNotification.setPriority(Notification.PRIORITY_HIGH); //通知优先级 


	var mNb = mNotification.build();
	console.log(notifyID);

	//判断当前系统版本在8.0及以上    
	if (osVersion.versionNum() >= 8) {
		nm.notify(channelID, notifyID, mNb);
	} else {
		nm.notify(notifyID, mNb);
	}

	//void plus.device.beep(2);//bee bee叫  
	// plus.device.vibrate(300);//震动  

	console.log('通知结束');
	return true;
	// #endif  
}
/**  
 * android原生通知点击后所执行的内容  
 */
function aOSReceive() {
	// #ifdef APP-PLUS  
	if (plus.os.name != 'Android') {
		return false;
	}
	// android原生通知栏接收器(程序退出后无效)  
	var main = plus.android.runtimeMainActivity();
	var intent = main.getIntent();
	var message = intent && intent.getExtra != undefined ? intent.getExtra("receive") : null;
	console.log(message);
	//console.log(typeof(message))
	message = message ? JSON.parse(message) : '';
	// var args = plus.runtime.arguments;
	// console.log(args)
	if (message) {
		//删除当前通知  
		var Context = plus.android.importClass("android.content.Context");
		var nm = main.getSystemService(Context.NOTIFICATION_SERVICE);
		console.log(message.notify_id);
		if (osVersion.versionNum() >= 8) {
			nm.cancel(message.channel_id, message.notify_id); //安卓版本大于等于8的      
		} else {
			nm.cancel(message.notify_id); //安卓版本小于8的  
		}
		// nm.cancelAll();  

		// 把消息数据置空,以免再次打开APP时重复执行此处  
		intent.putExtra("receive", '');

		//用message的数据做点什么
		uni.showToast({
			title: message.notify_id.toString(),
			position: 'bottom'
		})
	}
	// #endif  
}

Guess you like

Origin blog.csdn.net/qq_45020145/article/details/129029353