目录

点击服务卡片有概率无法打开详情页

问题现象

桌面添加应用卡片,点击卡片中的内容,有概率无法打开详情页。

背景知识

问题定位

使用Deveco Testing工具中的UIViewer分析卡片的组件结构,使用真机点击卡片中的对应不同组件对应的位置,发现只有文章内容位置可以点击跳转到应用。

分析结论

卡片中只对文章内容做了点击跳转事件,其它区域未做点击事件。

修改建议

为整个卡片添加点击事件。当点击卡片内容时卡片服务跳转指定页面,其它区域根据业务需要,拉起应用页面。具体跳转操作如下:

在UIAbility中接收router事件并获取参数,根据传递的params不同,选择拉起不同的页面。

// EntryAbility.ets
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
export default class EntryAbility extends UIAbility {
  private selectPage: string = '';
  private currentWindowStage: window.WindowStage | null = null;
  // 获取router事件中传递的targetPage参数
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (want.parameters !== undefined) {
      let params: Record<string, string> = JSON.parse(JSON.stringify(want.parameters));
      this.selectPage = params.targetPage;
    }
  }
  // 如果UIAbility已在后台运行,在收到Router事件后会触发onNewWant生命周期回调
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    if (want.parameters?.params !== undefined) {
      let params: Record<string, string> = JSON.parse(JSON.stringify(want.parameters));
      this.selectPage = JSON.parse(params.params).message
    }
    if (this.currentWindowStage !== null) {
      this.onWindowStageCreate(this.currentWindowStage);
    }
  }
  onWindowStageCreate(windowStage: window.WindowStage): void {
    let targetPage: string='pages/Index';
    if(this.selectPage=='PageB'){
      targetPage='pages/PageB'
    }
    if (this.currentWindowStage === null) {
      this.currentWindowStage = windowStage;
    }
    windowStage.loadContent(targetPage, (err) => {
      if (err.code) {
        return;
      }
    });
  }
}