HarmonyOS 鸿蒙Next开发中,如何跳转到系统设置的各个页面?如网络、蓝牙、应用设置等

HarmonyOS 鸿蒙Next开发中,如何跳转到系统设置的各个页面?如网络、蓝牙、应用设置等

10 回复

【背景知识】

在启动目标应用组件时,会通过显式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 5 应用拉起系列(一):应用与元服务互通方式 | 华为开发者联盟

HarmonyOS 5 应用拉起系列(二):如何拉起微信小程序 | 华为开发者联盟

有要学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));
  });
}

一、通用跳转方法

通过指定bundleNameabilityName启动设置应用,结合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 需先申请定位权限

三、特殊场景处理

  1. 动态权限关联
    跳转权限管理页面前需先申请权限,否则设置页可能不显示开关:

          import { abilityAccessCtrl } from '@kit.AbilityKit';
          
          async function requestBeforeJump() {
            const atManager = abilityAccessCtrl.createAtManager();
            await atManager.requestPermissionsFromUser(
              getContext() as abilityAccessCtrl.PermissionRequestResult, 
              ['ohos.permission.CAMERA']
            );
          }
    
  2. 兼容性处理
    部分URI需要特定API版本支持,建议增加版本判断:

      import { BusinessError } from '@kit.BasicServicesKit';
      
      try {
        context.startAbility(want);
      } catch (err: BusinessError) {
        if (err.code === 10000001) {
          console.error('系统设置应用未安装');
        }
      }

四、最佳实践建议

  1. 引导式跳转
    用户拒绝权限后通过弹窗引导跳转:

          AlertDialog.show({
            title: '权限未开启',
            message: '需要开启XX权限才能使用该功能',
            confirm: {
              text: '去设置',
              action: () => this.jumpToSettings()
            }
          });
    
  2. 多设备适配
    不同设备类型(手机/平板)的URI可能不同,建议通过deviceType判断分支处理。

在鸿蒙Next中,使用wantohos.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中,可以通过Intentohos.settings系统能力实现跳转到系统设置的不同页面。以下是常用场景的代码示例:

  1. 跳转到系统设置主页面
Intent intent = new Intent();
Operation operation = new Intent.OperationBuilder()
    .withAction("settings.system.main")
    .build();
intent.setOperation(operation);
startAbility(intent);
  1. 跳转到WLAN设置
Operation operation = new Intent.OperationBuilder()
    .withAction("settings.wireless.wlan")
    .build();
  1. 跳转到蓝牙设置
Operation operation = new Intent.OperationBuilder()
    .withAction("settings.wireless.bluetooth")
    .build();
  1. 跳转到应用管理页面
Operation operation = new Intent.OperationBuilder()
    .withAction("settings.app.list")
    .build();
  1. 跳转到具体应用详情页(需传入包名):
Operation operation = new Intent.OperationBuilder()
    .withAction("settings.app.detail")
    .withBundleName("目标应用包名")
    .build();

注意事项:

  • 需要在config.json中声明ohos.settings.system权限
  • 部分设置页面可能需要特定权限声明
  • 实际可用的action可通过官方文档查询系统预定义操作

建议查阅最新官方文档获取完整的action列表和参数要求。

回到顶部