import { AppUtil } from './AppUtil';
import { Want, wantConstant } from '@kit.AbilityKit';
import { PreviewUtil } from './PreviewUtil';
import { FileUtil } from './FileUtil';/*** Want 工具类* 提供跳转系统设置、拉起应用、文件管理等功能。* author: CSDN-鸿蒙布道师* since: 2025/04/16*/
export class WantUtil {// 定义常用 URI 常量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_DISPLAY: string = "display_settings"; // 显示和亮度static readonly URI_APPLICATION_AND_SERVICE: string = "application_and_service_settings"; // 应用与元服务static readonly URI_PRIVACY: string = "privacy_settings"; // 隐私与安全static readonly URI_SYSTEM_AND_UPDATES: string = "system_and_updates"; // 系统和更新/*** 跳转系统设置页面* @param uri 目标页面的 URI(使用 WantUtil 的 URI 常量)* @returns Promise<void>*/static async toSetting(uri?: string): Promise<void> {const context = AppUtil.getContext();if (!context) {throw new Error("Context is not available.");}const want: Want = {bundleName: 'com.huawei.hmos.settings', // 设置应用 bundleNameabilityName: 'com.huawei.hmos.settings.MainAbility', // 设置应用 abilityNameuri: uri,parameters: {bundleName: context.abilityInfo.bundleName, // 拉起方应用包名},};return context.startAbility(want);}/*** 跳转通知设置页面* @returns Promise<void>*/static toNotificationSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_NOTIFICATION);}/*** 跳转 WLAN 设置页面* @returns Promise<void>*/static toWifiSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_WIFI);}/*** 跳转蓝牙设置页面* @returns Promise<void>*/static toBluetoothSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_BLUETOOTH);}/*** 跳转 NFC 设置页面* @returns Promise<void>*/static toNfcSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_NFC);}/*** 跳转声音和振动设置页面* @returns Promise<void>*/static toVolumeSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_VOLUME);}/*** 跳转存储设置页面* @returns Promise<void>*/static toStorageSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_STORAGE);}/*** 跳转电池设置页面* @returns Promise<void>*/static toBatterySetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_BATTERY);}/*** 拉起系统浏览器* @param url 要打开的 URL* @returns Promise<void>*/static async toWebBrowser(url: string): Promise<void> {if (!url) {throw new Error("URL cannot be empty.");}const context = AppUtil.getContext();const want: Want = {action: 'ohos.want.action.viewData',entities: ['entity.system.browsable'],uri: url,parameters: {bundleName: context.abilityInfo.bundleName, // 拉起方应用包名},};return context.startAbility(want);}/*** 拉起应用市场对应的应用详情界面* @param bundleName 需要打开应用详情的应用的包名* @returns Promise<void>*/static async toAppGalleryDetail(bundleName: string): Promise<void> {if (!bundleName) {throw new Error("Bundle name cannot be empty.");}const want: Want = {action: 'ohos.want.action.appdetail',uri: `store://appgallery.huawei.com/app/detail?id=${bundleName}`,};return AppUtil.getContext().startAbility(want);}/*** 拉起系统文件管理器* @returns Promise<void>*/static async toFileManagement(): Promise<void> {const want: Want = {bundleName: 'com.huawei.hmos.filemanager',abilityName: 'MainAbility',};return AppUtil.getContext().startAbility(want);}/*** 拉起短信界面并指定联系人* @param telephone 联系人电话号码* @param contactsName 联系人姓名(可选)* @returns Promise<void>*/static async startMMS(telephone: string, contactsName: string = ''): Promise<void> {if (!telephone) {throw new Error("Telephone number cannot be empty.");}const want: Want = {bundleName: 'com.ohos.mms',abilityName: 'com.ohos.mms.MainAbility',parameters: {contactObjects: JSON.stringify([{ telephone, contactsName }]),pageFlag: 'conversation',},};return AppUtil.getContext().startAbility(want);}/*** 调用三方软件打开文件* @param uri 文件的 URI* @param write 是否有写入权限,默认为 true* @returns Promise<void>*/static async openFile(uri: string, write: boolean = true): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const fileExtention = FileUtil.getFileExtention(uri);const mimeType = PreviewUtil.getMimeType(fileExtention);const want: Want = {flags: write? (wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION): wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,action: 'ohos.want.action.sendData',uri: uri,type: mimeType,};return AppUtil.getContext().startAbility(want);}
}代码如下:
import { AppUtil } from './AppUtil';
import { Want, wantConstant } from '@kit.AbilityKit';
import { PreviewUtil } from './PreviewUtil';
import { FileUtil } from './FileUtil';/*** Want 工具类* 提供跳转系统设置、拉起应用、文件管理等功能。* author: CSDN-鸿蒙布道师* since: 2025/04/16*/
export class WantUtil {// 定义常用 URI 常量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_DISPLAY: string = "display_settings"; // 显示和亮度static readonly URI_APPLICATION_AND_SERVICE: string = "application_and_service_settings"; // 应用与元服务static readonly URI_PRIVACY: string = "privacy_settings"; // 隐私与安全static readonly URI_SYSTEM_AND_UPDATES: string = "system_and_updates"; // 系统和更新/*** 跳转系统设置页面* @param uri 目标页面的 URI(使用 WantUtil 的 URI 常量)* @returns Promise<void>*/static async toSetting(uri?: string): Promise<void> {const context = AppUtil.getContext();if (!context) {throw new Error("Context is not available.");}const want: Want = {bundleName: 'com.huawei.hmos.settings', // 设置应用 bundleNameabilityName: 'com.huawei.hmos.settings.MainAbility', // 设置应用 abilityNameuri: uri,parameters: {bundleName: context.abilityInfo.bundleName, // 拉起方应用包名},};return context.startAbility(want);}/*** 跳转通知设置页面* @returns Promise<void>*/static toNotificationSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_NOTIFICATION);}/*** 跳转 WLAN 设置页面* @returns Promise<void>*/static toWifiSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_WIFI);}/*** 跳转蓝牙设置页面* @returns Promise<void>*/static toBluetoothSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_BLUETOOTH);}/*** 跳转 NFC 设置页面* @returns Promise<void>*/static toNfcSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_NFC);}/*** 跳转声音和振动设置页面* @returns Promise<void>*/static toVolumeSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_VOLUME);}/*** 跳转存储设置页面* @returns Promise<void>*/static toStorageSetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_STORAGE);}/*** 跳转电池设置页面* @returns Promise<void>*/static toBatterySetting(): Promise<void> {return WantUtil.toSetting(WantUtil.URI_BATTERY);}/*** 拉起系统浏览器* @param url 要打开的 URL* @returns Promise<void>*/static async toWebBrowser(url: string): Promise<void> {if (!url) {throw new Error("URL cannot be empty.");}const context = AppUtil.getContext();const want: Want = {action: 'ohos.want.action.viewData',entities: ['entity.system.browsable'],uri: url,parameters: {bundleName: context.abilityInfo.bundleName, // 拉起方应用包名},};return context.startAbility(want);}/*** 拉起应用市场对应的应用详情界面* @param bundleName 需要打开应用详情的应用的包名* @returns Promise<void>*/static async toAppGalleryDetail(bundleName: string): Promise<void> {if (!bundleName) {throw new Error("Bundle name cannot be empty.");}const want: Want = {action: 'ohos.want.action.appdetail',uri: `store://appgallery.huawei.com/app/detail?id=${bundleName}`,};return AppUtil.getContext().startAbility(want);}/*** 拉起系统文件管理器* @returns Promise<void>*/static async toFileManagement(): Promise<void> {const want: Want = {bundleName: 'com.huawei.hmos.filemanager',abilityName: 'MainAbility',};return AppUtil.getContext().startAbility(want);}/*** 拉起短信界面并指定联系人* @param telephone 联系人电话号码* @param contactsName 联系人姓名(可选)* @returns Promise<void>*/static async startMMS(telephone: string, contactsName: string = ''): Promise<void> {if (!telephone) {throw new Error("Telephone number cannot be empty.");}const want: Want = {bundleName: 'com.ohos.mms',abilityName: 'com.ohos.mms.MainAbility',parameters: {contactObjects: JSON.stringify([{ telephone, contactsName }]),pageFlag: 'conversation',},};return AppUtil.getContext().startAbility(want);}/*** 调用三方软件打开文件* @param uri 文件的 URI* @param write 是否有写入权限,默认为 true* @returns Promise<void>*/static async openFile(uri: string, write: boolean = true): Promise<void> {if (!uri) {throw new Error("URI cannot be empty.");}const fileExtention = FileUtil.getFileExtention(uri);const mimeType = PreviewUtil.getMimeType(fileExtention);const want: Want = {flags: write? (wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION | wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION): wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION,action: 'ohos.want.action.sendData',uri: uri,type: mimeType,};return AppUtil.getContext().startAbility(want);}
}