HarmonyOS跳转应用设置中页面封装与使用

174 阅读5分钟

1、封装跳转应用页面的管理类

import { bundleManager, common, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { LoggerManager } from './LoggerManager';
import { call } from '@kit.TelephonyKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { Contact } from '../models/Contact';
import { NavEntryKey } from '../models/NavEntryKey';

/**
 * App管理类
 */
export class AppManager {

  private static readonly uri_info: string = NavEntryKey.APPLICATION_INFO_ENTRY // 应用设置页面
  private static readonly uri_network: string = NavEntryKey.MOBILE_ENTRY // 移动网络设置页面
  private static readonly uri_notification: string = NavEntryKey.SYSTEMUI_NOTIFICATION_SETTING // 通知设置页面
  private static readonly uri_wifi: string = NavEntryKey.WIFI_ENTRY // Wifi设置页面
  private static readonly uri_bluetooth: string = NavEntryKey.BLUETOOTH_ENTRY // 蓝牙设置页面
  private static readonly uri_screen_refresh_rate : string = NavEntryKey.SCREEN_REFRESH_RATE_ENTRY // 屏幕刷新率设置页面
  private static readonly uri_nfc: string = NavEntryKey.NFC_ENTRY // NFC设置页面
  private static context: common.UIAbilityContext // common.UIAbilityContext,上下文
  private static windowStage: window.WindowStage

  /**
   * 初始化方法,缓存全局变量,在UIAbility的onWindowStageCreate方法中初始化该方法。
   * @param windowStage 窗口管理器
   */
  static init(context: common.UIAbilityContext, windowStage: window.WindowStage) {
    AppManager.context = context;
    AppManager.windowStage = windowStage;
  }

  /**
   * 获取上下文,common.UIAbilityContext
   * @returns
   */
  static getContext(): common.UIAbilityContext {
    if (!AppManager.context) {
      AppManager.context = getContext() as common.UIAbilityContext; //兜底
      LoggerManager.error("context为空,请在UIAbility的onWindowStageCreate方法中调用AppManager的init方法初始化!");
    }
    return AppManager.context;
  }

  /**
   * 获取主窗口
   */
  static getMainWindow(): window.Window {
    if (!AppManager.windowStage) {
      LoggerManager.error("windowStage为空,请在UIAbility的onWindowStageCreate方法中调用AppUtil的init方法初始化!");
    }
    return AppManager.windowStage.getMainWindowSync();
  }

  /**
   * 获取UIContext
   * @returns
   */
  static getUIContext(): UIContext {
    return AppManager.getMainWindow().getUIContext();
  }

  /**
   * 跳转应用设置页面
   */
  static async toAppSetting(uri: string = AppManager.uri_info): Promise<void> {
    let context = AppManager.getContext();
    let want: Want = {
      bundleName: 'com.huawei.hmos.settings', //设置应用bundleName
      abilityName: 'com.huawei.hmos.settings.MainAbility', //设置应用abilityName
      uri: uri, //目标页面
      parameters: {
        bundleName: context.abilityInfo.bundleName, //拉起方应用包名
        pushParams: context.abilityInfo.bundleName, //拉起方应用包名
      }
    }
    return await context.startAbility(want);
  }

  /**
   * 跳转移动网络设置页面
   */
  static toNetworkSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_network);
  }

  /**
   * 跳转WiFi设置页面
   */
  static toWifiSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_wifi);
  }

  /**
   * 跳转通知设置页面
   */
  static toNotificationSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_notification);
  }

  /**
   * 跳转蓝牙设置页面
   */
  static toBluetoothSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_bluetooth);
  }

  /**
   * 跳转NFC设置页面
   */
  static toNfcSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_nfc);
  }

  /**
   * 跳转屏幕刷新率设置页面
   */
  static toScreenRefreshRateSetting(): Promise<void> {
    return AppManager.toAppSetting(AppManager.uri_screen_refresh_rate);
  }
  //
  // /**
  //  * 拉起护眼模式设置页面
  //  */
  // static toEyeCareSetting(): Promise<void> {
  //   return AppManager.toAppSetting(AppManager.uri_eye_care);
  // }

  /**
   * 拉起系统浏览器
   */
  static async toWebBrowser(url: string): Promise<void> {
    let context = AppManager.getContext();
    let want: Want = {
      action: 'ohos.want.action.viewData',
      entities: ['entity.system.browsable'],
      uri: url,
      parameters: {
        bundleName: context.abilityInfo.bundleName,
        pushParams: context.abilityInfo.bundleName,
      }
    }
    return await context.startAbility(want);
  }


  /**
   * 拉起应用市场对应的应用详情界面
   * @param bundleName 需要打开应用详情的应用的包名。
   * @returns
   */
  static async toAppGalleryDetail(bundleName: string): Promise<void> {
    let context = AppManager.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 = AppManager.getContext();
    let want: Want = {
      bundleName: 'com.huawei.hmos.filemanager',
      abilityName: 'MainAbility'
    };
    return await context.startAbility(want);
  }

  // 打电话
  static callPhone(phone: string) {
    let context = AppManager.getContext();
    call.makeCall(context, phone).then(() => {
      console.log(`makeCall success`);
    }).catch((err: BusinessError) => {
      console.error(`makeCall fail, promise: err->${JSON.stringify(err)}`);
    });
  }

  // 发短信
  static sendSms(phone: string) {
    let context = AppManager.getContext();
    let params: Array<Object> = [new Contact("联系人姓名", Number(phone))];
    let want: Want = {
      bundleName: "com.ohos.mms",
      abilityName: "com.ohos.mms.MainAbility",
      parameters: {
        contactObjects: JSON.stringify(params),
        pageFlag: "conversation",
        content: "hello" // 短信内容
      }
    };

    context.startAbilityForResult(want).then((data) => {
      console.log("Success" + JSON.stringify(data));
    }).catch(() => {
      console.log("error");
    });
  }

}

2、调用侧页面代码

Text('系统设置跳转')
Button('app设置')
  .onClick(() => {
    AppManager.toAppSetting()
  })
Button('系统通知和状态栏设置')
  .onClick(() => {
    AppManager.toNotificationSetting()
  })
Button('移动网络设置')
  .onClick(() => {
    AppManager.toNetworkSetting()
  })
Button('WiFi设置')
  .onClick(() => {
    AppManager.toWifiSetting()
  })
Button('蓝牙设置')
  .onClick(() => {
    AppManager.toBluetoothSetting()
  })
Button('屏幕刷新率')
  .onClick(() => {
    AppManager.toScreenRefreshRateSetting()
  })
Button('NFC设置')
  .onClick(() => {
    AppManager.toNfcSetting()
  })
Button('应用市场详情界面')
  .onClick(() => {
    AppManager.toAppGalleryDetail('com.example.app')
  })
Button('文件管理器')
  .onClick(() => {
    AppManager.toFileManagement()
  })
Button('浏览器跳转-百度首页')
  .onClick(() => {
    AppManager.toWebBrowser('https://www.baidu.com')
  })
Button('打电话')
  .onClick(() => {
    AppManager.callPhone('18888888888')
  })
Button('发短信')
  .onClick(() => {
    AppManager.sendSms('18888888888')
  })

3、其他相关的NavEntryKey

export enum NavEntryKey {
  BLUETOOTH_ENTRY = 'bluetooth_entry', // HOME-蓝牙二级页面
  WIFI_ENTRY = 'wifi_entry', // HOME-WLAN二级页面
  MOBILE_ENTRY = 'mobile_network_entry', // HOME-移动网络二级页面
  DISPLAY_ENTRY = 'display_settings', // HOME-显示和亮度二级页面
  SCREEN_ZOOM = 'screen_zoom', // HOME-显示和亮度-显示大小三级页面
  SCREEN_REFRESH_RATE_ENTRY = 'screen_refresh_rate_entry', // HOME-显示和亮度-屏幕刷新率三级页面
  VOLUME_ENTRY = 'volume_settings', // HOME-声音二级页面
  MORE_CONNECTION_ENTRY = 'more_connections_settings', // HOME-更多连接二级页面
  BIOMETRICS_PASSWORD_ENTRY = 'biometrics_and_password_settings', // HOME-生物识别和密码二级页面
  APPLICATION_SERVICE_ENTRY = 'application_and_service_settings', // HOME-应用与服务二级页面
  STORAGE_ENTRY = 'storage_settings', // HOME-存储二级页面
  PRIVACY_ENTRY = 'privacy_settings', // HOME-隐私二级页面
  SYSTEM_UPDATE_ENTRY = 'system_and_updates', // HOME-系统和更新二级页面
  ABOUT_DEVICE_ENTRY = 'about_device', // HOME-关于本机二级页面
  WIFI_MENU_ENTRY = 'wifi_menu', // HOME-WLAN-连接三级页面
  TIME_ZONE_ENTRY = 'time_zone_settings', // HOME-系统和更新-日期时间-时区-时区选择列表五级页面
  DATA_TIME_ENTRY = 'date_and_time', // HOME-系统和更新-日期时间三级页面
  SET_LANGUAGE_ENTRY = 'set_language', // HOME-系统和更新-语言和输入法-语言和输入法四级页面
  LANGUAGE_REGION_ENTRY = 'set_language_region', // HOME-系统和更新-语言和输入法-语言和地区-语言和地区5级页面
  RESET_ENTRY = 'reset_settings', // HOME-系统和更新-重置三级页面
  DEVELOP_OPTION_ENTRY = 'developer_options_settings',// HOME-系统和更新-开发人员选项三级页面
  CURRENT_USER_ENTRY = 'current_user', // HOME-用户和账户-当前登录(用户)三级页面
  NFC_ENTRY = 'nfc_settings', // HOME-更多连接-NFC三级页面
  HOTSPOT_ENTRY = 'hotspot_data_settings', // HOME-移动网络-个人热点界面
  HOTSPOT_PWD_ENTRY = 'password_entry', // HOME-移动网络-个人热点-密码界面
  HOTSPOT_CONNECTED_ENTRY = 'connected_device_entry', // HOME-移动网络-个人热点-已连接设备界面
  HOTSPOT_SHARE_ENTRY = 'more_share_entry', // HOME-移动网络-个人热点-更多共享设置界面
  LOCK_SCREEN_PASSWORD_ENTRY = 'lock_screen_password_title', // HOME-生物识别和密码-锁屏密码三级页面
  APPLICATION_LIST_ENTRY = 'application_settings', // phone: HOME-应用与服务-应用管理三级页面 pc: HOME-应用管理二级页面
  APPLICATION_INFO_ENTRY = 'application_info_entry', // phone: HOME-应用与服务-应用管理-具体应用四级页面 pc: HOME-应用管理-具体应用三级页面
  LOCATION_MANAGER_ENTRY = 'location_manager_settings', // HOME-隐私-定位服务三级页面
  EDIT_LANGUAGE_ENTRY = 'edit_language_entry', // HOME-系统和更新-语言和输入法-语言和地区-编辑(编译语言)五级页面
  ADD_LANGUAGE_ENTRY = 'add_language_entry', // HOME-系统和更新-语言和输入法-语言和地区-添加语言五级页面
  SELECT_REGION_ENTRY = 'select_region_entry', // HOME-系统和更新-语言和输入法-语言和地区-当前地区(选择地区)五级页面
  RESET_FACTORY = 'reset_factory_settings', // HOME-系统和更新-重置-恢复出厂设置四级页面
  RESET_NET = 'reset_net_settings', // HOME-系统和更新-重置-还原网络设置四级页面
  ACCESSIBILITY_FEATURE_ENTRY = 'accessibility_feature', // Phone:HOME-辅助功能二级页面
  ACCESSIBILITY_OPERATION_ENTRY = 'accessibility_operation_entry', // Phone:HOME-辅助功能-辅助功能快捷方式三级页
  SYSTEMUI_NOTIFICATION_SETTING = "systemui_notification_settings" // Phone:HOME-通知和状态栏设置
}