如何启动Ability后跳转到指定目标页面?

在App实际开发过程中,常常会遇到需要跳转到其他功能模块的某个页面中的情况。在该场景下,依据不同的业务处理结果会跳转到不同的页面来展示,这样用户体验更好。该功能场景在HarmonyOS中该如何实现呢?

HarmonyOS
2024-05-22 22:20:07
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
hflame

1、应用级变量的状态管理

2、Ability生命周期

以MainAbility中的某个页面index为例,来启动某个Ability,例如CommonAbility,并跳转到指定页面commonPage1。以此为例来演示如何实现该场景。

场景一:当CommonAbility未启动时

当该Ability未启动时,可以按照如下方式来实现:

步骤1:在MainAbility创建时将上下文context保存到应用中。

export default class MainAbility extends Ability { 
    onCreate(want, launchParam) { 
      AppStorage.SetOrCreate("ABILITY_CONTEXT",this.context); 
    } 
}

步骤2:在MainAbility的index页面中启动CommonAbility,并将需要跳转的页面通过want中的uri参数指定。

startAbility(){ 
  let context = AppStorage.Get("ABILITY_CONTEXT") as context.AbilityContext; 
  let want = { 
    deviceId:"",//跨设备启动时传入,同设备时不需要传入 
    bundleName:"com.example.startabilitytopage",//指定启动Ability所在的Hap包 
    abilityName:"CommonAbility",//指定启动的Ability 
    uri:"pages/commonPage1"//指定跳转页面 
  } 
  context.startAbility(want).then(()=>{ 
    console.info("start CommonAbility success") 
  }).catch((err)=>{ 
    console.info("start CommonAbility failed,error is : "+err) 
  }) 
}

步骤3:在指定启动的CommonAbility中的onCreate()生命周期函数中将传递过来的参数信息保存下来。

export default class CommonAbility extends Ability { 
    onCreate(want, launchParam) { 
        AppStorage.SetOrCreate("WANT_PAGE",want) 
    } 
}

步骤4:在指定启动的CommonAbility中窗口创建时,将保存的页面参数取出,并加载该页面。

export default class CommonAbility extends Ability { 
     
    onWindowStageCreate(windowStage: Window.WindowStage) { 
        // Main window is created, set main page for this ability 
        let firstPage = "pages/index";//设置默认加载页面 
        let want = AppStorage.Get("WANT_PAGE") as Want; 
        if(want.hasOwnProperty("uri")){ 
            firstPage = want.uri;//加载指定页面 
        } 
        windowStage.loadContent(firstPage, (err, data) => { 
            if (err.code) { 
                hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.ERROR); 
                hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); 
                return; 
            } 
            hilog.isLoggable(0x0000, 'testTag', hilog.LogLevel.INFO); 
            hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); 
        }); 
    } 
}

场景二:当CommonAbility已经启动时

步骤1:同场共享包HSP内容访问景一的步骤1。

步骤2:同场景一的步骤2。

步骤3:由于CommonAbility已经启动,需要在onNewWant()回调函数中保存传递过来的参数信息。

export default class CommonAbility extends Ability { 
  
    onNewWant(want,launchParams){ 
        AppStorage.SetOrCreate("WANT_PAGE",want) 
    } 
} 

步骤4:同场景一的步骤4。

测试结果如下:

点击启动CommonAbility后,跳转到指定页面commonPage1

查看后台Ability情况如下:


分享
微博
QQ
微信
回复
2024-05-23 15:52:27
相关问题
如何跳转到共享包中的指定页面
743浏览 • 1回复 待解决
服务卡片如何跳转到指定页面呢?
4723浏览 • 1回复 待解决
如何跳转到系统发送短信页面
659浏览 • 1回复 待解决
弹窗跳转到页面返回弹窗不消失
501浏览 • 1回复 待解决
如何指定首次应用的启动页面
74浏览 • 1回复 待解决
如何跳转到应用市场app下载页面
5860浏览 • 1回复 待解决
点击服务卡片如何跳转指定页面
1069浏览 • 1回复 待解决
如何跳转到设置中的应用详情页面
905浏览 • 1回复 待解决
js能跳转到java写的页面
9185浏览 • 1回复 待解决
如何实现跳转到系统设置
649浏览 • 1回复 待解决
如何实现Fraction跳转到AbilitySlice
8194浏览 • 3回复 已解决
鸿蒙开发如何默认启动ability
7195浏览 • 3回复 待解决