HarmonyOS 鸿蒙Next开发中,如何跳转到系统设置的各个页面?如网络、蓝牙、应用设置等
HarmonyOS 鸿蒙Next开发中,如何跳转到系统设置的各个页面?如网络、蓝牙、应用设置等
【背景知识】
在启动目标应用组件时,会通过显式Want或者隐式Want进行目标应用部件的匹配,匹配规则就是调用方传入的Want参数中设置的参数与目标应用组件声明的配置文件module.json5进行匹配。
【解决方案】
跳转系统设置的各级页面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 | volume_settings | / |
注:"/"代表无需配置;"APPbundleName"为指定应用的bundleName,获取方式可参考官网如何获取当前HAP的BundleName。其他可以参考支持跳转系统应用的能力清单。
示例代码如下:
// 跳转到设置的声音和振动;包含铃声、声音模式、免打扰等
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)
更多关于HarmonyOS 鸿蒙Next开发中,如何跳转到系统设置的各个页面?如网络、蓝牙、应用设置等的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
import { common } from '@kit.AbilityKit';
// 获取UIAbility上下文
let context = getContext(this) as common.UIAbilityContext;
// 构造Want对象
let want: common.Want = {
bundleName: 'com.huawei.hmos.settings', // 系统设置应用包名
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: '具体功能URI', // 关键参数,决定跳转目标
parameters: {
pushParams: {
bundleName: context.abilityInfo.bundleName // 当前应用包名
}
}
};
// 执行跳转
context.startAbility(want).catch((err) => {
console.error(`跳转失败:${err.code} - ${err.message}`);
});
目标页面 | URI参数 | 场景 |
---|---|---|
应用详情页 | application_info_entry | 查看权限/存储空间 |
通知管理 | systemui_notification_settings | 通知权限配置 |
网络设置 | systemui_wifi_settings | 连接Wi-Fi/蜂窝网络 |
蓝牙设置 | bluetooth_main_settings | 蓝牙设备管理 |
电池优化 | systemui_battery_settings | 电源管理配置 |
显示设置 | systemui_display_settings | 亮度/刷新率调节 |
bundleName必须精确匹配系统设置应用
URI参数需完全匹配系统预定义值
通用跳转基础代码结构
let context = getContext(this) as common.UIAbilityContext;
let want: Want = {
bundleName: 'com.huawei.hmos.settings', // 设置应用的包名
abilityName: 'com.huawei.hmos.settings.MainAbility', // 设置应用的主Ability
uri: "xxx", // 目标页面对应的uri
parameters: {
pushParams: {
bundleName: context.abilityInfo.bundleName // 当前应用的包名
}
}
};
context.startAbility(want);
应用详情页面
uri: "application_info_entry" // 跳转到当前应用的权限管理页
通知设置页面
uri: "systemui_notification_settings" // 跳转到系统通知管理页
蓝牙设置页面
uri: "bluetooth_settings" // 部分系统版本支持直接跳转蓝牙设置
网络设置页面
uri: "network_settings" // 跳转到网络设置主页面
下面写了一个跳转到当前应用权限管理页的示例:
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
build() {
Column() {
Button("跳转到权限设置")
.onClick(() => {
let context = getContext(this) as common.UIAbilityContext;
let want: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: "application_info_entry",
parameters: {
pushParams: {
bundleName: context.abilityInfo.bundleName
}
}
};
context.startAbility(want);
})
}
}
}
1.楼主想跳转到系统设置的各个页面可以参考下面的demo示例:
openSettingsPage(uri: string) {
let context = getContext() as common.UIAbilityContext;
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri// 关键参数
});
}
Button("跳转WiFi设置")
.onClick(() => {
this.openSettingsPage('wifi_entry')
})
Button("跳转蓝牙页设置")
.onClick(() => {
this.openSettingsPage('bluetooth_entry')
})
Button("跳转位置页设置")
.onClick(() => {
this.openSettingsPage('location_manager_settings')
})
Button("跳转声音和振动设置")
.onClick(() => {
this.openSettingsPage('volume_settings')
})
2.关于startAbility等各种打开三方的使用可以参考下面文章
有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html
【背景知识】
UIAbilityContext.startAbility:启动一个Ability。
【参考方案】
可参考基于AppLinking实现应用间跳转示例,通过使用UIAbilityContext.startAbility实现跳转至系统设置效果。
使用UIAbilityContext.startAbility跳转至系统设置,通过更改其中的Want参数实现跳转至不同的页面。
export const pullUpSystemSetting = (context: common.UIAbilityContext) => {
const want: Want = {
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'wifi_entry',
};
context.startAbility(want);
}
你好,在HarmonyOS 5(API 12+) 中,ArkTS 支持通过 startAbility 跳转到系统设置的各个具体页面,无需申请特殊权限,只需构造正确的 Want 对象即可
import common from '@ohos.app.ability.common';
function jumpToSettingsPage(uri: string) {
let context = getContext(this) as common.UIAbilityContext;
context.startAbility({
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: uri
}).catch((err) => {
console.error('跳转失败:', JSON.stringify(err));
});
}
一、通用跳转方法
通过指定bundleName
和abilityName
启动设置应用,结合uri
参数定位具体页面:
import { common } from '@kit.AbilityKit';
// 获取上下文
let context = getContext(this) as common.UIAbilityContext;
// 构造want对象
let want = {
bundleName: 'com.huawei.hmos.settings', // 设置应用固定标识
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: '具体功能页uri', // 不同页面对应不同uri
parameters: {
pushParams: {
bundleName: context.abilityInfo.bundleName // 当前应用包名
}
}
};
// 触发跳转
context.startAbility(want).catch((err) => {
console.error(`跳转失败: ${err.code}, ${err.message}`);
});
二、常见系统设置页面对应参数
目标页面 | uri值 (示例) | 注意事项 |
---|---|---|
应用详情页 | application_info_entry |
需传递当前应用包名 1 |
通知管理 | systemui_notification_settings |
API 9+支持 2 |
输入法设置 | set_input |
需声明权限 3 |
网络设置 | system_wifi_settings |
部分设备可能不同 |
蓝牙设置 | system_bluetooth_settings |
需开启蓝牙服务 |
辅助功能 | accessibility_settings |
需预授权权限 4 |
定位服务 | location_settings |
需先申请定位权限 |
三、特殊场景处理
-
动态权限关联
跳转权限管理页面前需先申请权限,否则设置页可能不显示开关:import { abilityAccessCtrl } from '@kit.AbilityKit'; async function requestBeforeJump() { const atManager = abilityAccessCtrl.createAtManager(); await atManager.requestPermissionsFromUser( getContext() as abilityAccessCtrl.PermissionRequestResult, ['ohos.permission.CAMERA'] ); }
-
兼容性处理
部分URI需要特定API版本支持,建议增加版本判断:
import { BusinessError } from '@kit.BasicServicesKit';
try {
context.startAbility(want);
} catch (err: BusinessError) {
if (err.code === 10000001) {
console.error('系统设置应用未安装');
}
}
四、最佳实践建议
-
引导式跳转
用户拒绝权限后通过弹窗引导跳转:AlertDialog.show({ title: '权限未开启', message: '需要开启XX权限才能使用该功能', confirm: { text: '去设置', action: () => this.jumpToSettings() } });
-
多设备适配
不同设备类型(手机/平板)的URI可能不同,建议通过deviceType
判断分支处理。
在鸿蒙Next中,使用want
和ohos.settings
组件实现跳转。示例代码:
import common from '@ohos.app.ability.common';
let context = getContext(this) as common.UIAbilityContext;
let want = {
bundleName: 'com.ohos.settings',
abilityName: 'com.ohos.settings.MainAbility',
parameters: {
'settings.key': 'bluetooth' // 可替换为wifi/apps等具体参数
}
};
context.startAbility(want);
关键参数对应:
- 网络设置: ‘wifi’
- 蓝牙: ‘bluetooth’
- 应用管理: ‘apps’
- 声音: ‘sound’
- 显示: ‘display’
在HarmonyOS Next中,可以通过Intent
和ohos.settings
系统能力实现跳转到系统设置的不同页面。以下是常用场景的代码示例:
- 跳转到系统设置主页面:
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
.withAction("settings.system.main")
.build();
intent.setOperation(operation);
startAbility(intent);
- 跳转到WLAN设置:
Operation operation = new Intent.OperationBuilder()
.withAction("settings.wireless.wlan")
.build();
- 跳转到蓝牙设置:
Operation operation = new Intent.OperationBuilder()
.withAction("settings.wireless.bluetooth")
.build();
- 跳转到应用管理页面:
Operation operation = new Intent.OperationBuilder()
.withAction("settings.app.list")
.build();
- 跳转到具体应用详情页(需传入包名):
Operation operation = new Intent.OperationBuilder()
.withAction("settings.app.detail")
.withBundleName("目标应用包名")
.build();
注意事项:
- 需要在config.json中声明
ohos.settings.system
权限 - 部分设置页面可能需要特定权限声明
- 实际可用的action可通过官方文档查询系统预定义操作
建议查阅最新官方文档获取完整的action列表和参数要求。