【愚公系列】《微信小程序与云开发从入门到实践》042-系统设置信息与应用级事件相关接口

举报
愚公搬代码 发表于 2024/12/29 11:49:27 2024/12/29
【摘要】 标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。博客内容.NET、...
标题 详情
作者简介 愚公搬代码
头衔 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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 字符串 客户端平台信息(如 iosandroid
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.客户端更新相关接口

在微信小程序开发中,开发者可能会面临以下两种与版本相关的问题:

  1. 微信客户端版本过低:某些新功能或API仅在较新版本的微信中支持,因此需要判断当前微信版本,若过低则提示用户更新微信客户端。
  2. 小程序本身的版本更新:小程序本身也有版本的概念,开发者需要确保小程序能够及时更新,以便用户能够体验到新功能或修复的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 取消小程序切换到后台事件的监听。

详细说明

  1. wx.onUnhandledRejection
    该方法用来监听未处理的 Promise 拒绝事件。通常,Promise 在执行过程中如果遇到错误并没有被 catch 捕获,会抛出拒绝错误,这时可以使用这个方法来捕获并处理。

    wx.onUnhandledRejection((res) => {
      console.log("未处理的拒绝错误:", res);
    });
    
  2. wx.onThemeChange
    该方法用于监听系统主题的变化。当系统主题发生变化时(例如从亮色模式切换到暗色模式),回调函数会收到当前的主题风格。

    wx.onThemeChange((res) => {
      console.log("系统主题变化:", res);
    });
    
  3. wx.onPageNotFound
    该方法用于监听小程序中打开页面不存在的情况。当用户尝试打开一个不存在的页面时,系统会触发该事件并提供相关的页面路径和参数。

    wx.onPageNotFound((res) => {
      console.log("页面不存在,路径:", res.path);
    });
    
  4. wx.onError
    该方法用于捕获小程序运行中的错误(如 JavaScript 错误),并在发生错误时将错误信息和堆栈返回。非常有用的调试工具,能够帮助开发者捕捉未被显式处理的错误。

    wx.onError((err) => {
      console.log("发生错误:", err);
    });
    
  5. wx.onAudioInterruptionBegin
    该方法用于监听音频播放中断开始的事件,通常是由于电话来电等原因导致的音频中断。

    wx.onAudioInterruptionBegin(() => {
      console.log("音频播放中断开始");
    });
    
  6. wx.onAudioInterruptionEnd
    用于监听音频播放中断结束的事件。当音频播放中断结束并恢复播放时,会触发此事件。

    wx.onAudioInterruptionEnd(() => {
      console.log("音频播放中断结束");
    });
    
  7. wx.onAppShow
    该方法用于监听小程序从后台切换到前台的事件,当小程序进入前台时会触发此事件,回调中会包含小程序启动时的参数。

    wx.onAppShow((res) => {
      console.log("小程序切到前台", res);
    });
    
  8. wx.onAppHide
    该方法用于监听小程序从前台切换到后台的事件。当小程序被切换到后台时会触发此事件。

    wx.onAppHide(() => {
      console.log("小程序切到后台");
    });
    
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。