@ohos.multimodalInput.inputConsumer (全局快捷键)(系统接口)

全局快捷键订阅模块,用于处理组合按键的订阅。

说明:

  • 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

  • 本模块接口为系统接口。

  • 本模块接口仅对系统快捷键生效,系统快捷键指系统定义的全局快捷键。

导入模块

import { inputConsumer } from '@kit.InputKit';

inputConsumer.on('key')

on(type: 'key', keyOptions: KeyOptions, callback: Callback<KeyOptions>): void

订阅系统快捷键,使用callback异步回调。

说明:

  • 支持仅订阅按键的down事件,或者同时订阅按键的down事件和up事件。
  • 若需要仅订阅按键的up事件,会存在down事件被焦点窗口消费,而无up事件闭环的风险,需要排查设计实现是否合理。

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

参数:

参数名 类型 必填 说明
type string 事件类型,目前仅支持'key'。
keyOptions KeyOptions 组合键选项。从API版本26.0.0起keyOptions中新增参数KeyCommandTriggerType,本接口无需关注此参数。
callback Callback<KeyOptions> 回调函数,返回组合按键数据。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
202 Permission denied, non-system app called system api.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Text()
        .onClick(() => {
          let leftAltKey = 2045;
          let tabKey = 2049;
          let keyOptions: inputConsumer.KeyOptions = {
            preKeys: [ leftAltKey ],
            finalKey: tabKey,
            isFinalKeyDown: true,
            finalKeyDownDuration: 0
          };
          let callback = (keyOptions: inputConsumer.KeyOptions) => {
            console.info(`Succeeded in consuming key, keyOptions: ${JSON.stringify(keyOptions)}.`);
          }
          try {
            // 订阅按键事件
            inputConsumer.on("key", keyOptions, callback);
          } catch (error) {
            console.error(`Failed to subscribe, Code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}.`);
          }
        })
    }
  }
}

inputConsumer.off('key')

off(type: 'key', keyOptions: KeyOptions, callback?: Callback<KeyOptions>): void

取消订阅系统快捷键。使用callback异步回调。

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

参数:

参数名 类型 必填 说明
type string 事件类型,当前仅支持 'key'。
keyOptions KeyOptions 组合键选项。从API版本26.0.0起keyOptions中新增参数KeyCommandTriggerType,本接口无需关注此参数。
callback Callback<KeyOptions> 需要取消订阅的回调函数。若不填,则取消当前应用组合键选项已订阅的所有回调函数。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
202 Permission denied, non-system app called system api.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Text()
        .onClick(() => {
          let leftAltKey = 2045;
          let tabKey = 2049;
          // 取消订阅单个回调函数
          let callback = (keyOptions: inputConsumer.KeyOptions) => {
            console.info(`Succeeded in consuming key, keyOptions: ${JSON.stringify(keyOptions)}.`);
          }
          let keyOption: inputConsumer.KeyOptions = {preKeys: [leftAltKey], finalKey: tabKey, isFinalKeyDown: true, finalKeyDownDuration: 0};
          try {
            // 订阅按键事件
            inputConsumer.on("key", keyOption, callback);
            // 取消订阅按键事件
            inputConsumer.off("key", keyOption, callback);
            console.info(`Succeeded in unsubscribing.`);
          } catch (error) {
            console.error(`Failed to unsubscribe, Code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}.`);
          }
        })
    }
  }
}
import { inputConsumer } from '@kit.InputKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Text()
        .onClick(() => {
          let leftAltKey = 2045;
          let tabKey = 2049;
          // 取消订阅所有回调函数
          let callback = (keyOptions: inputConsumer.KeyOptions) => {
            console.info(`Succeeded in consuming key, keyOptions: ${JSON.stringify(keyOptions)}.`);
          }
          let keyOption: inputConsumer.KeyOptions = {preKeys: [leftAltKey], finalKey: tabKey, isFinalKeyDown: true, finalKeyDownDuration: 0};
          try {
            // 订阅按键事件
            inputConsumer.on("key", keyOption, callback);
            // 取消订阅按键事件
            inputConsumer.off("key", keyOption);
            console.info(`Succeeded in unsubscribing.`);
          } catch (error) {
            console.error(`Failed to unsubscribe, Code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}.`);
          }
        })
    }
  }
}

inputConsumer.onKey

onKey(keyOptions: KeyOptions, callback: KeyCommandCallback): void

订阅组合按键(按键命令模式),支持通过triggerType指定不同的触发模式。当满足条件的组合按键输入事件发生时,使用callback异步回调。

inputConsumer.on('key')现有接口的区别:

  • 本接口的keyOptions支持triggerType参数,可选择按键按下触发、重复按下触发、重复按下或抬起均会触发等模式。
  • 本接口回调参数为KeyCommandCallback类型,同时接收KeyOptions和KeyEvent对象。
  • 本接口采用事件消费机制,可通过事件消费阻止按键事件向后传递。

起始版本: 26.0.0

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

模型约束: 此接口仅可在Stage模型下使用。

参数:

参数名 类型 必填 说明
keyOptions KeyOptions 组合键选项,支持triggerType参数。
callback KeyCommandCallback 回调函数,返回组合键选项和按键事件数据。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
202 Permission denied, non-system app called system api.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

let leftCtrlKey = 2072;
let cKey = 2049;
let keyOptions: inputConsumer.KeyOptions = {
  preKeys: [leftCtrlKey],
  finalKey: cKey,
  isFinalKeyDown: true,
  finalKeyDownDuration: 0,
  triggerType: inputConsumer.KeyCommandTriggerType.PRESSED
};
let callback: inputConsumer.KeyCommandCallback = (keyOptions, keyEvents): void => {
  console.info(`keyOptions: ${keyOptions} keyEvents: ${keyEvents}`);
}
try {
  inputConsumer.onKey(keyOptions, callback);
} catch (error) {
  console.error(`Subscribe failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
import { inputConsumer } from '@kit.InputKit';

let keyOptions: inputConsumer.KeyOptions = {
  preKeys: [],
  finalKey: 2049,
  isFinalKeyDown: true,
  finalKeyDownDuration: 0,
  triggerType: inputConsumer.KeyCommandTriggerType.REPEAT_PRESSED
};
let callback: inputConsumer.KeyCommandCallback = (keyOptions, keyEvents): void => {
  console.info(`Repeat key event`);
}
try {
  inputConsumer.onKey(keyOptions, callback);
} catch (error) {
  console.error(`Subscribe failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
import { inputConsumer } from '@kit.InputKit';

let leftAltKey = 2045;
let tabKey = 2049;
let keyOptions: inputConsumer.KeyOptions = {
  preKeys: [leftAltKey],
  finalKey: tabKey,
  isFinalKeyDown: true,
  finalKeyDownDuration: 0,
  triggerType: inputConsumer.KeyCommandTriggerType.ALL_RELEASED
};
let callback: inputConsumer.KeyCommandCallback = (keyOptions, keyEvents): void => {
  console.info(`All released event`);
}
try {
  inputConsumer.onKey(keyOptions, callback);
} catch (error) {
  console.error(`Subscribe failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}

inputConsumer.offKey

offKey(keyOptions: KeyOptions, callback?: KeyCommandCallback): void

取消订阅系统快捷键。使用callback异步回调。

起始版本: 26.0.0

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

模型约束: 此接口仅可在Stage模型下使用。

参数:

参数名 类型 必填 说明
keyOptions KeyOptions 组合键选项,需与订阅时传入的keyOptions一致。
callback KeyCommandCallback 需要取消订阅的回调函数。若不填,则取消当前应用组合键选项已订阅的所有回调函数。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
202 Permission denied, non-system app called system api.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

let leftCtrlKey = 2072;
let cKey = 2049;
let callback: inputConsumer.KeyCommandCallback = (keyOptions, keyEvents): void => {
  console.info(`KeyEvent received`);
}
let keyOptions: inputConsumer.KeyOptions = {
  preKeys: [leftCtrlKey],
  finalKey: cKey,
  isFinalKeyDown: true,
  finalKeyDownDuration: 0,
  triggerType: inputConsumer.KeyCommandTriggerType.PRESSED
};
try {
  inputConsumer.onKey(keyOptions, callback);
  inputConsumer.offKey(keyOptions, callback);
  console.info(`Unsubscribe success`);
} catch (error) {
  console.error(`Execute failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}
import { inputConsumer } from '@kit.InputKit';

let leftCtrlKey = 2072;
let cKey = 2049;
let keyOptions: inputConsumer.KeyOptions = {
  preKeys: [leftCtrlKey],
  finalKey: cKey,
  isFinalKeyDown: true,
  finalKeyDownDuration: 0,
  triggerType: inputConsumer.KeyCommandTriggerType.PRESSED
};
try {
  inputConsumer.offKey(keyOptions);
  console.info(`Unsubscribe all success`);
} catch (error) {
  console.error(`Execute failed, error: ${JSON.stringify(error, [`code`, `message`])}`);
}

KeyCommandCallback

type KeyCommandCallback = (keyOptions: KeyOptions, keyEvent: KeyEvent) => void

按键命令回调函数类型,当快捷键注册条件满足时触发的回调。

起始版本: 26.0.0

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

模型约束: 此接口仅可在Stage模型下使用。

系统API: 此接口为系统接口。

参数名 类型 必填 说明
keyOptions KeyOptions 触发回调时的组合键选项。
keyEvent KeyEvent 按键事件对象,包含按键详细信息。

inputConsumer.setShieldStatus11+

setShieldStatus(shieldMode: ShieldMode, isShield: boolean): void

设置系统快捷键屏蔽类型。

需要权限: ohos.permission.INPUT_CONTROL_DISPATCHING

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

参数:

参数名 类型 必填 说明
shieldMode ShieldMode 系统快捷键屏蔽类型,目前仅支持取值为'FACTORY_MODE',表示屏蔽所有系统快捷键。
isShield boolean 屏蔽类型生效状态,true代表屏蔽类型生效,false代表不生效。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
201 Permission denied.
202 SystemAPI permission error.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Text()
        .onClick(() => {
          let FACTORY_MODE = 0;
          try {
            // 设置屏蔽状态
            inputConsumer.setShieldStatus(FACTORY_MODE,true);
            console.info(`Succeeded in setting shield status.`);
          } catch (error) {
            console.error(`Failed to set shield status, Code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}.`);
          }
        })
    }
  }
}

inputConsumer.getShieldStatus11+

getShieldStatus(shieldMode: ShieldMode): boolean

获取系统快捷键屏蔽类型。

需要权限: ohos.permission.INPUT_CONTROL_DISPATCHING

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

参数:

参数名 类型 必填 说明
shieldMode ShieldMode 系统快捷键屏蔽类型,目前仅支持取值为'FACTORY_MODE',表示屏蔽所有系统快捷键。

返回值:

类型 说明
boolean 屏蔽类型生效状态,true代表屏蔽类型生效,false代表不生效。

错误码

以下错误码的详细介绍请参见通用错误码

错误码ID 错误信息
201 Permission denied.
202 SystemAPI permission error.
401 Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed.

示例:

import { inputConsumer } from '@kit.InputKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Text()
        .onClick(() => {
          try {
            let FACTORY_MODE = 0;
            let shieldstatusResult:Boolean =  inputConsumer.getShieldStatus(FACTORY_MODE);
            console.info(`Succeeded in getting shield status, result:${JSON.stringify(shieldstatusResult)}.`);
          } catch (error) {
            console.error(`Failed to get shield status, Code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}.`);
          }
        })
    }
  }
}

KeyOptions

组合键选项。

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

名称 类型 只读 可选 说明
preKeys Array<number> 前置按键集合,数量范围[0, 4],前置按键无顺序要求。
如组合按键Ctrl+Alt+A中,Ctrl+Alt称为前置按键。
finalKey number 最终按键,此项必填,最终按键触发上报回调函数。
如组合按键Ctrl+Alt+A中,A称为最终按键。
isFinalKeyDown boolean 最终按键状态。
true表示按键按下,false表示按键抬起。
finalKeyDownDuration number 最终按键保持按下持续时间,单位为微秒(μs)。
当finalKeyDownDuration为0时,立即触发回调函数。
当finalKeyDownDuration大于0时,isFinalKeyDown为true,则最终按键按下超过设置时长后触发回调函数;isFinalKeyDown为false,则最终按键按下到抬起时间小于设置时长时触发回调函数。
isRepeat18+ boolean 是否上报重复的按键事件。true表示上报,false表示不上报,若不填默认为true。
triggerType KeyCommandTriggerType 触发模式。取值为PRESSED(1)、REPEAT_PRESSED(2)或ALL_RELEASED(3)。启用命令触发模式。一旦设置此值,isFinalKeyDown和isRepeat将被忽略。对于inputConsumer.on('key')接口该参数是可选参数,对于inputConsumer.onKey接口该参数是必填参数。
起始版本: 26.0.0
模型约束: 此接口仅可在Stage模型下使用。

shieldMode11+

系统快捷键屏蔽类型。

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

名称 说明
FACTORY_MODE 0 值为0,表示屏蔽所有系统快捷键。

KeyCommandTriggerType

按键命令触发类型枚举,用于指定组合按键的触发时机。

起始版本: 26.0.0

系统能力: SystemCapability.MultimodalInput.Input.InputConsumer

模型约束: 此接口仅可在Stage模型下使用。

系统API: 此接口为系统接口。

名称 说明
PRESSED 1 首次按下触发。当最终按键首次按下时触发回调,自动重复按下不触发。
REPEAT_PRESSED 2 重复按下触发。当最终按键每次按下时都触发回调,包括自动重复按下。
ALL_RELEASED 3 按下按键或抬起按键时均会触发回调。包括自动重复按下的按键。