通过搜索代码中的关键词startAbility,排查跳转逻辑是否存在异常。具体定位到开屏页的aboutToAppear函数中,存在一条直接跳转至系统设置的代码,导致应用启动后立即跳转,而非按预期显示开屏页。
aboutToAppear(): void {
let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext
context.startAbility({
deviceId: "",
bundleName: "com.huawei.hmos.settings",
abilityName: "com.huawei.hmos.settings.MainAbility",
uri: "set_input"
})
} 由于aboutToAppear在组件初始化阶段就会触发,aboutToAppear函数中调用startAbility接口跳转系统设置,未做判断或者弹窗提示,因此该跳转逻辑会在应用启动时自动执行,导致用户无法看到开屏页,而是直接跳转至系统设置页面。
为提升用户体验,建议将跳转逻辑从自动跳转改为用户主动触发的方式,例如通过弹窗提示用户是否需要前往设置页面。示例代码如下:
import { common } from '@kit.AbilityKit';
import { TipsDialog } from '@kit.ArkUI';
@Entry
@Component
struct JumpSetting{
dialogControllerImage: CustomDialogController = new CustomDialogController({
builder: TipsDialog({
content: '尚未设置本应用为默认输入法,是否前往设置?',
primaryButton: {
value: '取消',
action: () => {
console.info('Callback when the first button is clicked');
},
},
secondaryButton: {
value: '确认',
action: () => {
let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
context.startAbility({
deviceId: '',
bundleName: 'com.huawei.hmos.settings',
abilityName: 'com.huawei.hmos.settings.MainAbility',
uri: 'set_input'
});
}
},
}),
});
aboutToAppear(): void {
this.dialogControllerImage.open();
}
build() {
Column(){
Row(){
Text('输入法应用样例')
.fontSize(40)
}
.width('100%')
.height('92%')
.justifyContent(FlexAlign.Center)
Row(){
Column() {
Text('样式')
}
.width('50%')
Column() {
Text('我的')
}
.width('50%')
}
.width('100%')
.height('8%')
}
.padding({bottom:20})
.width('100%')
.height('100%')
}
} Q:如何获取当前输入法?
A:可以通过inputMethod.getCurrentInputMethod获取当前输入法。
Q:如何查询输入法的启用状态?