HarmonyOS鸿蒙Next want 工具类

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS鸿蒙Next want 工具类

Want工具类封装

前言

在开发应用中应经常会出现一些操作,提示用户进行开启 但是用户当时拒绝了开启, 后面用户又希望能够使用该功能,需要引导用户去进行开启的权限 或者应用没有办法直接开启的功能,需要引导用户去操作某个设置 基本上在每个app都会又用到, 为了方便使用 我给一些常用的进行了总结

参考资料:官方文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-inner-ability-want-V13

实现步骤

步骤一 创建名称为WantUtil.ets的文件

步骤二 定义常量

static readonly URI_NOTIFICATION: string = "systemui_notification_settings"; //通知设置页面 
static readonly URI_WIFI: string = "wifi_entry"; //WLAN设置页面  
static readonly URI_BLUETOOTH: string = "bluetooth_entry"; //蓝牙设置页面 
static readonly URI_NFC: string = "nfc_settings"; //NFC设置页面 
static readonly URI_VOLUME: string = "volume_settings"; //声音和振动 
static readonly URI_STORAGE: string = "storage_settings"; //存储界面 
static readonly URI_BATTERY: string = "battery"; //电池 
static readonly URI_NETWORK: string = "mobile_network_entry"; //移动网络设置页面 
static readonly URI_HOTSPOT_DATA: string = "hotspot_data_settings"; //移动网络-个人热点界面   
static readonly URI_PASSWORD_ENTRY: string = "password_entry"; //移动网络-个人热点-密码界面 
static readonly URI_CONNECTED_DEVICE: string = "connected_device_entry"; //移动网络-个人热点-已连接设备界面   
static readonly URI_MORE_SHARE: string = "more_share_entry"; //移动网络-个人热点-更多共享设置界面   
static readonly URI_MORE_CONNECTIONS: string = "more_connections_settings"; //更多连接 
static readonly URI_DISPLAY: string = "display_settings"; //显示和亮度   
static readonly URI_SCREEN_ZOOM: string = "screen_zoom"; //显示和亮度-显示大小三级页面   
static readonly URI_SCREEN_REFRESH_RATE: string = "screen_refresh_rate_entry"; //显示和亮度-屏幕刷新率三级页面(需看具体设备是否有刷新率选项)   
static readonly URI_ACCESSIBILITY_FEATURE: string = "accessibility_feature"; //辅助功能   
static readonly URI_ACCESSIBILITY_OPERATION: string = "accessibility_operation_entry"; //辅助功能-辅助功能快捷键三级页面   
static readonly URI_ACCESSIBILITY_MORE: string = "accessibility_more_settings_entry"; //辅助功能-已安装的服务-服务详情-更多设置五级页面   
static readonly URI_APPLICATION_AND_SERVICE: string = "application_and_service_settings"; //应用与元服务   
static readonly URI_APPLICATION_INFO: string = 'application_info_entry' //应用和元服务-某个具体应用的应用信息,需传递want.parameters.pushParams为具体应用的包名   
static readonly URI_APPLICATION_SETTINGS: string = "application_settings"; //应用与服务-应用管理三级页面   
static readonly URI_BIOMETRICS_AND_PASSWORD: string = "biometrics_and_password_settings"; //生物识别和密码 
static readonly URI_LOCK_SCREEN_PASSWORD: string = "lock_screen_password_title"; //生物识别和密码-设置数字锁屏密码   
static readonly URI_CHANGE_SIX_TO_NUMBER: string = "change_six_to_number_entry"; //生物识别和密码-锁屏密码(其他密码类型)-自定义数字密码(设置锁屏数字密码)四级页面 
static readonly URI_CHANGE_SIX_TO_MIXED: string = "change_six_to_mixed_entry"; //生物识别和密码-锁屏密码(其他密码类型)-混合密码(设置锁屏密码)四级页面   
static readonly URI_FINGERPRINT_SETTINGS: string = "fingerprint_settings_entry"; //生物识别与密码-指纹3级页面(需看具体设备是否支持指纹解锁能力) 
static readonly URI_PRIVACY: string = "privacy_settings"; //隐私与安全   
static readonly URI_LOCATION_HELP: string = "location_help_entry"; //隐私与安全-定位服务-帮助四级页面   
static readonly URI_USERS_ACCOUNTS: string = "users_accounts"; //用户和账户   
static readonly URI_CURRENT_USER: string = "current_user"; //用户和账户-当前登录(用户)三级页面   
static readonly URI_ABOUT_DEVICE: string = "about_device"; //关于本机界面   
static readonly URI_DEVICE_NAME: string = "device_name"; //关于本机-设备名称   
static readonly URI_SYSTEM_AND_UPDATES: string = "system_and_updates"; //系统和更新   
static readonly URI_TIME_ZONE: string = "time_zone_settings"; //系统和更新-日期时间-时区-时区选择列表   
static readonly URI_DATE_AND_TIME: string = "date_and_time"; //系统和更新-日期时间三级页面   
static readonly URI_SET_INPUT: string = "set_input"; //系统和更新-输入法页面   
static readonly URI_SET_LANGUAGE: string = "set_language"; //系统和更新-语言和输入法-语言和输入法四级页面   
static readonly URI_SET_LANGUAGE_REGION: string = "set_language_region"; //系统和更新-语言和输入法-语言和地区-语言和地区5级页面   
static readonly URI_RESET_SETTINGS: string = "reset_settings"; //系统和更新-重置三级页面   
static readonly URI_DEVELOPER_OPTIONS: string = "developer_options_settings"; //系统和更新-开发人员选项三级页面   
static readonly URI_EDIT_LANGUAGE: string = "edit_language_entry"; //系统和更新-语言和输入法-语言和地区-编辑(编译语言)五级页面   
static readonly URI_ADD_LANGUAGE: string = "add_language_entry"; //系统和更新-语言和输入法-语言和地区-添加语言五级页面 
static readonly URI_SELECT_REGION: string = "select_region_entry"; //系统和更新-语言和输入法-语言和地区-当前地区(选择地区)五级页面   
static readonly URI_RESET_FACTORY: string = "reset_factory_settings"; //系统和更新-重置-恢复出厂设置四级页面   
static readonly URI_RESET_NET: string = "reset_net_settings"; //系统和更新-重置-还原网络设置四级页面 
static readonly URI_RESET_CONFIRM: string = "reset_confirm_setting"; //系统和更新-重置-恢复出厂设置-重置手机五级页面   
static readonly URI_RESET_NET_CONFIRM: string = "reset_net_confirm_settings"; //系统和更新-重置-还原网络设置-还原网络设置确认五级页面

步骤三 封装 跳转系统设置页面(配合WantUtil里的URI常量一起使用,可跳转更多的设置页面)

/**
* @param uri: 传入WantUtil的URI常量,不传默认为设置页面
* @returns
*/
static async toSetting(uri?: string): Promise<void> {
    let context = AppUtil.getContext();
    let want: Want = {
        bundleName: 'com.huawei.hmos.settings', //设置应用bundleName
        abilityName: 'com.huawei.hmos.settings.MainAbility', //设置应用abilityName
        uri: uri, //目标页面
        parameters: {
            bundleName: context.abilityInfo.bundleName, //拉起方应用包名
        }
    }
    return await context.startAbility(want);
}

步骤四 使用方法 步骤三封装的toSetting方法 传入对应的 常量 就会进行跳转

WantUtil.toSetting(WantUtil.URI_APPLICATION_INFO)

下面是使用方法的一些比较特殊的拉起 单独列出来

拉起系统浏览器

static async toWebBrowser(url: string): Promise<void> {
    let context = AppUtil.getContext();
    let want: Want = {
        action: 'ohos.want.action.viewData',
        entities: ['entity.system.browsable'],
        uri: url,
        parameters: {
            bundleName: context.abilityInfo.bundleName, //拉起方应用包名
        }
    }
    return await context.startAbility(want);
}

拉起应用市场对应的应用详情界面

/**
* @param bundleName 需要打开应用详情的应用的包名。
* @returns
*/
static async toAppGalleryDetail(bundleName: string): Promise<void> {
    let context = AppUtil.getContext();
    let want: Want = {
        action: 'ohos.want.action.appdetail',
        uri: 'store://appgallery.huawei.com/app/detail?id=' + bundleName,
    };
    return await context.startAbility(want);
}

拉起系统文件管理器

static async toFileManagement(): Promise<void> {
    let context = AppUtil.getContext();
    let want: Want = {
        bundleName: 'com.huawei.hmos.filemanager',
        abilityName: 'MainAbility'
    };
    return await context.startAbility(want);
}

拉起短信界面并指定联系人

/**
* @param contactsName
* @param telephone
* @returns
*/
static async startMMS(contactsName: string, telephone: string): Promise<void> {
    let context = AppUtil.getContext();
    let want: Want = {
        bundleName: 'com.ohos.mms',
        abilityName: 'com.ohos.mms.MainAbility',
        parameters: {
            contactObjects: JSON.stringify({
                contactsName: contactsName,
                telephone: telephone
            }),
            pageFlag: 'conversation'
        }
    };
    return await context.startAbility(want);
}

总结: 整理搜集了一些常用的want使用方法 封装成工具类 使用者可以直接使用 满足大部分拉起需求


更多关于HarmonyOS鸿蒙Next want 工具类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

HarmonyOS鸿蒙Next的“want”工具类是鸿蒙系统中用于实现跨应用组件通信的核心机制。Want是鸿蒙系统中用于描述意图的对象,它封装了目标组件的相关信息,包括组件名称、操作类型、数据等。通过Want,应用可以启动其他应用的组件、传递数据或执行特定操作。

在鸿蒙Next中,Want工具类的设计更加简洁高效,支持多种场景下的组件调用,如启动Ability、传递参数、获取结果等。Want工具类通常包含以下核心方法:

  1. setElement:设置目标组件的信息,如BundleName、AbilityName等。
  2. setAction:指定要执行的操作类型。
  3. setUri:设置数据URI,用于传递数据。
  4. setFlags:设置启动标志,控制组件的启动行为。

例如,启动另一个应用的Ability可以通过以下代码实现:

let want = {
    bundleName: "com.example.app",
    abilityName: "MainAbility",
    action: "action.view",
    uri: "https://example.com"
};
this.context.startAbility(want).then(() => {
    console.log("Ability启动成功");
}).catch((err) => {
    console.error("Ability启动失败: " + err);
});

Want工具类还支持隐式调用,即通过指定操作类型或数据类型来匹配系统中的组件,无需明确指定目标组件的名称。这种机制增强了系统的灵活性和可扩展性。

在鸿蒙Next中,Want工具类的设计遵循了鸿蒙系统的分布式架构理念,支持跨设备的组件调用,进一步提升了应用开发效率和用户体验。

更多关于HarmonyOS鸿蒙Next want 工具类的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS Next 提供了丰富的工具类,帮助开发者高效开发应用。主要工具类包括:

  • HiLog:用于日志记录,支持不同日志级别。
  • HiThread:提供线程管理功能,简化多线程操作。
  • HiTimer:用于定时任务,支持一次性或周期性任务。
  • HiFile:文件操作工具,支持读写、删除等操作。
  • HiJson:简化JSON数据的解析与生成。
  • HiNetwork:网络请求工具,支持HTTP/HTTPS请求。

使用这些工具类,可以极大提升开发效率,确保代码简洁高效。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!