【愚公系列】《微信小程序与云开发从入门到实践》042-系统设置信息与应用级事件相关接口
标题 | 详情 |
---|---|
作者简介 | 愚公搬代码 |
头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。 |
博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
欢迎 | 👍点赞、✍评论、⭐收藏 |
🚀前言
在小程序的开发过程中,系统设置信息与应用级事件的管理尤为重要。这些接口不仅能够帮助开发者获取设备信息、用户设置等关键信息,还能有效提升用户体验,增强小程序的交互性和功能性。通过合理利用这些接口,开发者可以为用户提供个性化的服务和更流畅的使用体验。
在本篇文章中,我们将深入探讨小程序中系统设置信息与应用级事件相关的接口。我们将详细介绍如何获取用户的授权信息、设备的系统信息、网络状态等,以及如何处理应用级事件,使小程序能够更好地响应用户操作和系统变化。同时,我们还将分享一些实际应用案例,帮助开发者理解这些接口在日常开发中的具体应用。
🚀一、系统设置信息与应用级事件相关接口
小程序开发者框架中提供了获取用户系统信息的相关接口,例如窗口信息、设备信息、应信息等,有时候,需要通过系统信息来有差异地实现一些逻辑,就可以使用这些接口。关于事件的监控我们并不陌生,本节也将介绍开发框架中提供的可以监听的应用级事件,如应用进入前后台、音频播放被中断等。
🔎1.系统设置相关接口
🦋1.1 获取窗口信息:wx.getWindowInfo
通过 wx.getWindowInfo
方法,可以获取当前小程序窗口的相关信息,包括窗口尺寸、安全区的位置等。
调用方法
let res = wx.getWindowInfo();
console.log(res);
返回的窗口信息对象:
该对象包含了关于窗口的一些重要属性,如下表所示:
属性名 | 类型 | 意义 |
---|---|---|
pixelRatio |
数值 | 屏幕的像素比 |
screenWidth |
数值 | 屏幕宽度(单位为px) |
screenHeight |
数值 | 屏幕高度(单位为px) |
windowWidth |
数值 | 可用窗口宽度(单位为px) |
windowHeight |
数值 | 可用窗口高度(单位为px) |
statusBarHeight |
数值 | 状态栏的高度(单位为px) |
safeArea |
对象 | 安全区信息(参见下表10-2) |
安全区信息:safeArea
安全区指的是设备屏幕中可以放心放置页面元素的区域,避免因设备(如刘海屏)遮挡部分屏幕而导致布局问题。safeArea
对象包含以下属性:
属性名 | 类型 | 意义 |
---|---|---|
left |
数值 | 安全区域左上角的横坐标 |
right |
数值 | 安全区域右上角的横坐标 |
top |
数值 | 安全区域左上角的纵坐标 |
bottom |
数值 | 安全区域左下角的纵坐标 |
width |
数值 | 安全区域的宽度(单位为px) |
height |
数值 | 安全区域的高度(单位为px) |
🦋1.2 获取系统设置信息:wx.getSystemSetting
通过 wx.getSystemSetting
方法,开发者可以获取用户当前设备的系统设置信息,例如是否开启了蓝牙、定位、WiFi等开关。
调用方法
let res = wx.getSystemSetting();
console.log(res);
返回的系统设置信息对象:
该对象包含了以下属性:
属性名 | 类型 | 意义 |
---|---|---|
bluetoothEnabled |
布尔值 | 用户是否开启了蓝牙开关 |
locationEnabled |
布尔值 | 用户是否开启了地理位置开关 |
wifiEnabled |
布尔值 | 用户是否开启了 WiFi 开关 |
deviceOrientation |
字符串 | 获取设备的方向,可能值为 portrait (竖屏)或 landscape (横屏) |
🦋1.3 获取设备信息:wx.getSystemInfoSync
wx.getSystemInfoSync
是一个同步方法,用于获取设备的硬件和系统信息,返回的信息包括设备的品牌、型号、屏幕尺寸、操作系统版本等。
调用方法
let res = wx.getSystemInfoSync();
console.log(res);
返回的设备信息对象:
该对象包含了以下属性:
属性名 | 类型 | 意义 |
---|---|---|
brand |
字符串 | 设备的品牌 |
model |
字符串 | 设备的型号 |
pixelRatio |
数值 | 屏幕的像素比 |
screenWidth |
数值 | 屏幕宽度(单位为px) |
screenHeight |
数值 | 屏幕高度(单位为px) |
windowWidth |
数值 | 可用窗口宽度(单位为px) |
windowHeight |
数值 | 可用窗口高度(单位为px) |
statusBarHeight |
数值 | 状态栏的高度(单位为px) |
language |
字符串 | 获取微信设置的语音语言 |
version |
字符串 | 微信的版本号 |
system |
字符串 | 系统版本信息 |
platform |
字符串 | 客户端平台信息(如 ios 、android ) |
fontSizeSetting |
数值 | 用户在微信客户端中设置的字体大小 |
SDKVersion |
字符串 | 客户端基础库的版本 |
benchmarkLevel |
数值 | 设备的性能等级,数值越高性能越好 |
albumAuthorized |
布尔值 | 用户是否允许使用相册数据(iOS有效) |
cameraAuthorized |
布尔值 | 用户是否允许使用摄像头 |
locationAuthorized |
布尔值 | 用户是否允许使用定位信息 |
microphoneAuthorized |
布尔值 | 用户是否允许使用麦克风 |
notificationAuthorized |
布尔值 | 用户是否允许通知 |
notificationAlertAuthorized |
布尔值 | 用户是否允许通知带提醒(iOS有效) |
notificationBadgeAuthorized |
布尔值 | 用户是否允许通知带角标(iOS有效) |
notificationSoundAuthorized |
布尔值 | 用户是否允许通知带声音(iOS有效) |
phoneCalendarAuthorized |
布尔值 | 用户是否允许使用日历 |
bluetoothEnabled |
布尔值 | 用户是否开启了蓝牙开关 |
locationEnabled |
布尔值 | 用户是否开启了定位功能 |
wifiEnabled |
布尔值 | 用户是否开启了 WiFi 开关 |
safeArea |
对象 | 屏幕安全区信息 |
locationReducedAccuracy |
布尔值 | 是否开启了精准定位(仅iOS有效) |
theme |
字符串 | 系统当前的主题,可能值为 dark (深色)或 light (浅色) |
异步获取设备信息:wx.getSystemInfoAsync
与 wx.getSystemInfoSync
对应的异步方法是 wx.getSystemInfoAsync
,它允许你在获取设备信息时设置回调函数,并且不会阻塞主线程。
wx.getSystemInfoAsync({
success: function(res) {
console.log(res);
},
fail: function(err) {
console.log(err);
}
});
🔎2.客户端更新相关接口
在微信小程序开发中,开发者可能会面临以下两种与版本相关的问题:
- 微信客户端版本过低:某些新功能或API仅在较新版本的微信中支持,因此需要判断当前微信版本,若过低则提示用户更新微信客户端。
- 小程序本身的版本更新:小程序本身也有版本的概念,开发者需要确保小程序能够及时更新,以便用户能够体验到新功能或修复的BUG。
🦋2.1 检查并更新微信客户端版本
微信客户端本身也可能因为版本过低而无法使用某些新功能。因此,开发者可以在小程序中判断当前微信客户端版本是否足够,并在版本过低时引导用户去更新微信客户端。
判断微信版本并跳转到更新页面
开发者可以使用 wx.updateWeChatApp
方法来引导用户更新微信。
wx.updateWeChatApp({
success: (res) => {
console.log("跳转到微信更新页面成功", res);
},
fail: (err) => {
console.log("跳转到微信更新页面失败", err);
}
});
这个方法会尝试跳转到微信客户端的更新页面,以便用户能够进行更新。通常,当小程序无法使用某些功能时,开发者可以检查当前微信版本并根据需要提示用户更新。
🦋2.2 小程序版本更新管理:wx.getUpdateManager
小程序也有自己的版本控制机制。微信提供了 wx.getUpdateManager
接口来处理小程序的版本更新,开发者可以通过这个接口检查是否有新版本的小程序可用,并在必要时提示用户更新。
获取更新管理器
使用 wx.getUpdateManager
获取小程序更新管理器对象,管理器提供了一些方法来监听小程序版本更新的状态。
let manager = wx.getUpdateManager();
管理器封装的更新相关方法
manager
对象封装了几个与小程序更新行为相关的方法,如下表所示:
方法名 | 参数 | 意义 |
---|---|---|
applyUpdate() |
无 | 强制小程序重新启动并使用新版本。此方法通常在监听到新版本下载完成后调用。 |
onCheckForUpdate() |
callback (回调函数) |
监听检查更新结果,回调会返回当前小程序是否有新版本发布。 |
onUpdateReady() |
callback (回调函数) |
监听小程序版本更新事件,当新版本被下载成功后执行回调。 |
onUpdateFailed() |
callback (回调函数) |
监听小程序更新失败事件。 |
🦋2.3 小程序更新的具体使用方法
检查是否有新版本:onCheckForUpdate
onCheckForUpdate
方法用于监听是否有小程序的新版本发布。如果有新版本,开发者可以根据需要提示用户更新。
let manager = wx.getUpdateManager();
manager.onCheckForUpdate((res) => {
if (res.hasUpdate) {
console.log('有新版本,准备下载');
} else {
console.log('当前已是最新版本');
}
});
下载并准备更新:onUpdateReady
当新版本的小程序下载完成后,onUpdateReady
会被触发。此时可以提示用户重启小程序,使用新版本。
manager.onUpdateReady(() => {
wx.showModal({
title: '更新提示',
content: '新版本已经准备好,是否重启应用?',
success(res) {
if (res.confirm) {
manager.applyUpdate(); // 强制重启并使用新版本
}
}
});
});
更新失败处理:onUpdateFailed
如果小程序更新失败,开发者可以通过 onUpdateFailed
方法监听更新失败的情况。
manager.onUpdateFailed(() => {
console.log('新版本下载失败');
// 可以提示用户稍后再试或者提供其它操作
});
强制重启小程序:applyUpdate
当下载的新版本小程序准备好时,开发者可以调用 applyUpdate
方法强制重新启动小程序,加载新版本。
manager.applyUpdate();
这个方法会触发小程序的重新启动,并使用新版本的代码。
🔎3.获取小程序启动时的参数
小程序在启动时,可以接收一些参数,这些参数会在 app.js
文件的 onLaunch
方法中传递给小程序。启动参数可以包含小程序路径、场景值、请求参数等。
🦋3.1 获取启动参数:onLaunch
方法
在 app.js
中定义的 onLaunch
方法会接收到启动时的参数。
// app.js
App({
onLaunch(option) {
console.log("launch", option);
}
});
option
对象包含了启动时传递的各种参数,如表格所示:
属性名 | 类型 | 意义 |
---|---|---|
path |
字符串 | 启动小程序的路径 |
query |
对象 | 启动小程序的请求参数 |
scene |
数值 | 启动小程序的场景值 |
shareTicket |
字符串 | 转发的 shareTicket 值 |
referrerInfo |
对象 | 来源信息,包括来源小程序的 appId |
forwardMaterials |
数组 | 打开的文件信息数据 |
chatType |
数值 | 打开小程序的具体群聊或单聊类型 |
apiCategory |
字符串 | API 的类型 |
🦋3.2 冷启动与热启动
冷启动
冷启动是指小程序完全关闭后重新启动,此时会执行 onLaunch
方法。
热启动
热启动是指小程序已经在后台运行,此时重新进入小程序不会执行 onLaunch
,而是会执行 onShow
方法。
获取冷启动参数:wx.getLaunchOptionsSync
如果需要在小程序后续的运行过程中使用这些启动参数,可以通过 wx.getLaunchOptionsSync
方法获取冷启动时的启动参数。
let launchOptions = wx.getLaunchOptionsSync();
console.log("Launch Options:", launchOptions);
兼容冷启动和热启动参数:wx.getEnterOptionsSync
要处理冷启动和热启动的参数并兼顾两种情况,可以使用 wx.getEnterOptionsSync
方法。
let enterOptions = wx.getEnterOptionsSync();
console.log("Enter Options:", enterOptions);
- 如果此次启动是冷启动,此方法获取到的是
onLaunch
方法中的参数。 - 如果此次启动是热启动,此方法获取到的是
onShow
方法中的参数。
onShow 方法
onShow
方法会在小程序从后台进入前台时触发,并传递启动参数。
App({
onShow(option) {
console.log("show", option);
}
});
🔎4.监听应用级事件
在微信小程序开发中,框架提供了一些系统级别的事件,可以用于监听和处理各种应用级的事件,例如未处理的异常、音频中断、页面不存在等。开发者可以使用这些事件处理方法来提升小程序的稳定性和用户体验。以下是与应用级事件监听相关的各种方法和详细说明:
应用级事件监听相关方法
方法名 | 参数 | 意义 |
---|---|---|
wx.onUnhandledRejection |
Function callback |
添加未处理的 Promise 拒绝事件的监听,捕获 Promise 的拒绝错误。 |
wx.onThemeChange |
Function callback |
添加系统主题改变事件的监听,回调中会包含当前系统的主题风格信息。 |
wx.onPageNotFound |
Function callback |
添加页面不存在时的事件监听,回调中会包含不存在的页面路径和参数。 |
wx.onError |
Function callback |
添加程序错误事件监听,回调中会包含错误信息和堆栈。 |
wx.onAudioInterruptionBegin |
Function callback |
添加音频播放中断开始事件的监听。 |
wx.onAudioInterruptionEnd |
Function callback |
添加音频播放中断结束事件的监听。 |
wx.onAppShow |
Function callback |
添加小程序切换到前台的事件监听,回调中会包含启动参数。 |
wx.onAppHide |
Function callback |
添加小程序切换到后台的事件监听。 |
取消事件监听的方法
除了添加事件监听外,微信小程序还提供了相应的取消监听的方法。这些方法的使用与 on
事件监听方法类似,只是调用时用 off
来替代 on
。
方法名 | 参数 | 意义 |
---|---|---|
wx.offUnhandledRejection |
Function callback |
取消未处理的 Promise 拒绝事件的监听。 |
wx.offThemeChange |
Function callback |
取消系统主题改变事件的监听。 |
wx.offPageNotFound |
Function callback |
取消页面不存在事件的监听。 |
wx.offError |
Function callback |
取消程序错误事件的监听。 |
wx.offAudioInterruptionBegin |
Function callback |
取消音频播放中断开始事件的监听。 |
wx.offAudioInterruptionEnd |
Function callback |
取消音频播放中断结束事件的监听。 |
wx.offAppShow |
Function callback |
取消小程序切换到前台事件的监听。 |
wx.offAppHide |
Function callback |
取消小程序切换到后台事件的监听。 |
详细说明
-
wx.onUnhandledRejection
该方法用来监听未处理的 Promise 拒绝事件。通常,Promise 在执行过程中如果遇到错误并没有被catch
捕获,会抛出拒绝错误,这时可以使用这个方法来捕获并处理。wx.onUnhandledRejection((res) => { console.log("未处理的拒绝错误:", res); });
-
wx.onThemeChange
该方法用于监听系统主题的变化。当系统主题发生变化时(例如从亮色模式切换到暗色模式),回调函数会收到当前的主题风格。wx.onThemeChange((res) => { console.log("系统主题变化:", res); });
-
wx.onPageNotFound
该方法用于监听小程序中打开页面不存在的情况。当用户尝试打开一个不存在的页面时,系统会触发该事件并提供相关的页面路径和参数。wx.onPageNotFound((res) => { console.log("页面不存在,路径:", res.path); });
-
wx.onError
该方法用于捕获小程序运行中的错误(如 JavaScript 错误),并在发生错误时将错误信息和堆栈返回。非常有用的调试工具,能够帮助开发者捕捉未被显式处理的错误。wx.onError((err) => { console.log("发生错误:", err); });
-
wx.onAudioInterruptionBegin
该方法用于监听音频播放中断开始的事件,通常是由于电话来电等原因导致的音频中断。wx.onAudioInterruptionBegin(() => { console.log("音频播放中断开始"); });
-
wx.onAudioInterruptionEnd
用于监听音频播放中断结束的事件。当音频播放中断结束并恢复播放时,会触发此事件。wx.onAudioInterruptionEnd(() => { console.log("音频播放中断结束"); });
-
wx.onAppShow
该方法用于监听小程序从后台切换到前台的事件,当小程序进入前台时会触发此事件,回调中会包含小程序启动时的参数。wx.onAppShow((res) => { console.log("小程序切到前台", res); });
-
wx.onAppHide
该方法用于监听小程序从前台切换到后台的事件。当小程序被切换到后台时会触发此事件。wx.onAppHide(() => { console.log("小程序切到后台"); });
- 点赞
- 收藏
- 关注作者
评论(0)