HarmonyOS鸿蒙Next能实现专注模式吗

HarmonyOS鸿蒙Next能实现专注模式吗 比如我开发一个地图app,进入导航后,希望此时不要有任何消息、推送、弹框打扰,有办法实现吗?

或者有办法用代码去打开系统的免打扰功能吗?

2 回复

可以通过跳转到系统设置页面来实现此功能:

【背景知识】

应用间跳转概述:应用跳转是指从一个应用跳转至另外一个应用,传递相应的数据、执行特定的功能。通过应用跳转可以满足用户更为真实丰富的场景诉求、提升交互体验的便捷性和流畅性。应用跳转的类型可分为拉起指定应用拉起指定类型的应用,关于拉起指定应用,目前官方推荐指定应用链接并通过openLinkstartAbility接口来拉起目标应用页面的方式。

Want的定义与用途: Want是一种对象,用于在应用组件之间传递信息。常见的使用场景是作为startAbility()方法的参数。

在启动目标应用组件时,会通过显式Want或者隐式Want进行目标应用组件的匹配,匹配规则就是调用方传入的Want参数中设置的参数与目标应用组件声明的配置文件(module.json5)进行匹配。

  • 显式Want:在启动目标应用组件时,调用方传入的Want参数中指定了abilityName和bundleName,称为显式Want。当有明确处理请求的对象时,如需要拉起某个指定应用组件时,通常会用到显示Want。
  • 隐式Want:在启动目标应用组件时,调用方传入的Want参数中未指定abilityName,称为隐式Want。当需要处理的对象不明确时,如需使用其他应用提供的某个能力,而不关心提供该能力的具体应用,通常用会到隐式Want。

【解决方案】

通常跳转系统应用的场景有两类:跳转系统设置的各级页面以及跳转其他系统应用。

  • 跳转系统设置的各级页面Want参数需指定bundleName与abilityName,如需跳转设置相关子页面,除了指定bundleName与abilityName外,通常还需要填写对应uri与parameters,如下表格给出了常用各类设置子页面的uri与parameters配置信息:
页面 bundleName abilityName uri parameters
WLAN页 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility wifi_entry /
蓝牙页 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility bluetooth_entry /
位置页 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility location_manager_settings /
指定应用信息页 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility application_info_entry APPbundleName
应用与元服务页 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility application_info_entry /
声音和振动 com.huawei.hmos.settings com.huawei.hmos.settings.MainAbility volume_settings /

注:"/"代表无需配置;"APPbundleName"为指定应用的bundleName,获取方式可参考官网

跳转系统设置页及子页面可参考如下代码进行配置:

// 跳转系统设置页及子页面配置参考
let want: Want = {
    bundleName: "com.huawei.hmos.settings",
    abilityName: "com.huawei.hmos.settings.MainAbility",
    uri:"xxxx",
    parameters: {
      pushParams: "xxxxx"
    }
}
context.startAbility(want)

// 跳转到设置的声音和振动;包含铃声、声音模式、免打扰等
let want: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    uri: "volume_settings",
    parameters: {
      // 传对应应用的包名
      pushParams: 'com.example.gotosettings'
    };
};
context.startAbility(want)
  • 跳转其他系统应用,例如浏览器、应用市场、短信、联系人、文件管理器等,Want参数配置情况各有不同,各类系统应用Want相关配置可参考如下表格:
应用 action bundleName abilityName uri parameters
浏览器 ohos.want.action.viewData com.huawei.hmos.browser MainAbility 需自行构建,可参考下列代码 /
文件管理器 / com.huawei.hmos.filemanager MainAbility / /
短信 / com.ohos.mms com.ohos.mms.MainAbility / 需自行构建,可参考下列代码
联系人 / com.ohos.contacts com.ohos.contacts.MainAbility / 需自行构建,可参考下列代码
应用市场 / / / store://appgallery.huawei.com/app/detail?id=C${APPID} /

注:"/"代表无需配置;"APPID"为应用在AGC上对应的APPID

代码参考如下:

// 跳转浏览器并传递参数
let want: Want = {
    action: "ohos.want.action.viewData", // 表示要执行操作
    bundleName: 'com.huawei.hmos.browser', // 系统浏览器对应bundleName
    abilityName: 'MainAbility', // 系统浏览器对应abilityName
    uri: "https://www.huawei.com/", // 传递的参数
}
// 跳转应用市场指定应用
let want: Want = {
    uri: "store: // appgallery.huawei.com/app/detail?id=C+应用在应用商城的ID"
}
// 跳转短信并传递参数
export class Contact { // 构造联系人
    contactsName: string;
    telephone: number;

    constructor(contactsName: string, telephone: number) {
        this.contactsName = contactsName;
        this.telephone = telephone;
    }
}
let params: Array<Object> = [new Contact("张三", 12345678912)]

let want:Want = {
    bundleName: 'com.ohos.mms', // 短信对应的bundleName
    abilityName: 'com.ohos.mms.MainAbility', // 短信对应的abilityName
    parameters: {
      contactObjects: JSON.stringify(params), // 联系人信息
      content:"xxxxxxxxxx", // 短信内容
      pageFlag: 'conversation'
    }
}
// 跳转联系人并传递参数
let want: Want = {
    bundleName: 'com.ohos.contacts',
    abilityName: 'com.ohos.contacts.MainAbility',
    parameters: {
      'phoneNumber': 'xxxxxxx', // 需新增联系人电话
      'contactName': 'xxxx', // 需新增联系人姓名
      'pageFlag': 'page_flag_save_contact'
    }
}
// 跳转文件管理器
let want: Want = {
    bundleName: 'com.huawei.hmos.filemanager',
    abilityName: 'MainAbility',
}
let context = getContext(this) as common.UIAbilityContext
context.startAbility(want)

【总结】

跳转系统应用最重要的是要确认Want配置信息的正确性,如bundleName、abilityName、uri、parameters,再通过startAbility来跳转。

除了通过startAbility传入Want参数来跳转系统应用这种方式外,如果还需要跳转其他上述未提及系统应用,可参考官网推荐的方式实现。

更多关于HarmonyOS鸿蒙Next能实现专注模式吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next支持专注模式。该模式通过限制通知和应用使用,帮助用户减少干扰,提升工作和学习效率。用户可以在设置中启用专注模式,并自定义允许的应用和通知类型。此外,鸿蒙Next的分布式技术还能在多设备间同步专注模式状态,确保用户在不同设备上都能保持专注。

回到顶部