uniapp打包的APP引导用户打开手机通知权限(修复两处bug)

打开手机通知权限设置,否则收不到unipush推送的消息
转载的代码修复两处bug
bug1:plus.android.importClass(“androidx.core.app.NotificationManagerCompat”);
报错TypeError: Cannot read property ‘ClassMethod’ of null
bug2:点击去设置时,importClass加载太久时导致showModal代码失效

/**
 * 设置手机通知权限
 */
function setPermissions() {
	// #ifdef APP-PLUS  
	if (plus.os.name == 'Android') { // 判断是Android
		var main = plus.android.runtimeMainActivity();
		var pkName = main.getPackageName();
		var uid = main.getApplicationInfo().plusGetAttribute("uid");
		var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
		//android.support.v4升级为androidx
		if (NotificationManagerCompat == null) {
			// NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
			//UniApp 的 plus.android.importClass() 仅支持原生 Android SDK 类,而不支持 AndroidX 库。
			NotificationManagerCompat = plus.android.importClass("android.app.NotificationManager");
		}
		var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
		// 未开通‘允许通知’权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置 
		//importClass加载时间长容易失败,从以下showModal中提取出来
		var Intent = plus.android.importClass('android.content.Intent');
		var Build = plus.android.importClass("android.os.Build");
		if (!areNotificationsEnabled) {
			uni.showModal({
				title: '通知权限开启提醒',
				content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
				showCancel: false,
				confirmText: '去设置',
				success: function(res) {
					if (res.confirm) {
						//android 8.0引导  
						if (Build.VERSION.SDK_INT >= 26) {
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
						} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0  
							var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
							intent.putExtra("app_package", pkName);
							intent.putExtra("app_uid", uid);
						} else { //(<21)其他--跳转到该应用管理的详情页  
							intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
							var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
							intent.setData(uri);
						}
						// 跳转到该应用的系统通知设置页  
						main.startActivity(intent);
					}
				}
			});
		}
	} else if (plus.os.name == 'iOS') { // 判断是ISO
		var isOn = undefined;
		var types = 0;
		var app = plus.ios.invoke('UIApplication', 'sharedApplication');
		var settings = plus.ios.invoke(app, 'currentUserNotificationSettings');
		if (settings) {
			types = settings.plusGetAttribute('types');
			plus.ios.deleteObject(settings);
		} else {
			types = plus.ios.invoke(app, 'enabledRemoteNotificationTypes');
		}
		plus.ios.deleteObject(app);
		isOn = (0 != types);
		if (isOn == false) {
			uni.showModal({
				title: '通知权限开启提醒',
				content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!',
				showCancel: false,
				confirmText: '去设置',
				success: function(res) {
					if (res.confirm) {
						var app = plus.ios.invoke('UIApplication', 'sharedApplication');
						var setting = plus.ios.invoke('NSURL', 'URLWithString:', 'app-settings:');
						plus.ios.invoke(app, 'openURL:', setting);
						plus.ios.deleteObject(setting);
						plus.ios.deleteObject(app);
					}
				}
			});
		}
	}
	// #endif  
}
### 回答1: 你可以使用以下命令将 shell 脚本中的 CRLF 转换为 LF: ``` sed -i 's/\r//' your_script.sh ``` 该命令使用 sed 工具将所有的 \r 字符替换为空字符,从而将 CRLF 转换为 LF。注意,该命令将直接修改原始文件,所以请确保备份你的脚本文件以防止意外情况发生。 ### 回答2: Shell脚本是一种在Unix和类Unix系统中运行的脚本语言,在处理文本文件时常会遇到CRLF(回车换行)和LF(换行)的格式转换问题。在Shell中可以通过一些工具和命令来实现CRLF转换成LF。 例子一:使用tr命令 tr是Linux系统中的一个实用工具命令,它可以对来自标准输入的字符进行替换、压缩和删除处理。 ```shell tr -d '\r' <inputfile >outputfile ``` 其中,`inputfile`是输入文件的文件名,`outputfile`是输出文件的文件名。该命令会从输入文件中删除所有的回车字符,并将结果保存到输出文件中,从而实现CRLF转换成LF。 例子二:使用sed命令 sed是一个流编辑器,也可以用来实现CRLF转换成LF。它可以对文本进行查找、删除、替换等操作。 ```shell sed -i 's/\r$//' inputfile ``` 其中,`inputfile`是要处理的文件名。该命令会将文件中每行末尾的回车字符替换成空字符,从而实现CRLF转换成LF。-i选项表示在原始文件中直接进行修改。 这些是两种常用的在Shell中实现CRLF转换成LF的方法,根据实际需求选择适合的方式即可。 ### 回答3: 一种将Shell脚本中的CRLF换行符转换为LF换行符的方法是使用文本编辑器和命令行工具。 首先,使用文本编辑器打开Shell脚本文件。如果你使用Windows操作系统,可以使用记事本、Notepad++等编辑器打开文件。 在编辑器中,按下“Ctrl+H”来打开“替换”功能。在“查找”框中输入“\r\n”,在“替换为”框中输入“\n”,然后点击“替换所有”按钮。 保存文件并关闭编辑器。 接下来,打开命令行工具,如CMD或PowerShell。 使用cd命令导航到包含脚本文件的目录。 运行以下命令将脚本文件中的CRLF换行符转换为LF换行符: ``` sed -i 's/\r$//' your_script.sh ``` 这个命令使用sed工具,将脚本文件中的\r字符(CRLF换行符结尾)替换为空字符串。-i选项表示直接在原文件上进行修改,your_script.sh是你的脚本文件名。 运行命令后,脚本文件的换行符将被转换为LF,并保存在原文件中。 注意:在使用sed命令转换换行符时,请确保备份原文件,以防意外修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值