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', // 设置应用 bundleName
abilityName: 'com.huawei.hmos.settings.MainAbility', // 设置应用 abilityName
uri: 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', // 设置应用 bundleName
abilityName: 'com.huawei.hmos.settings.MainAbility', // 设置应用 abilityName
uri: 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);
}
}