From 1241061ce433f473dcd26360500c550f42c8d792 Mon Sep 17 00:00:00 2001 From: JackLee <809262979@qq.com> Date: Sun, 26 Apr 2026 13:45:49 +0800 Subject: [PATCH] =?UTF-8?q?1-=E9=A6=96=E6=AC=A1=E5=90=AF=E5=8A=A8=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E5=AD=97=E4=BD=93=E6=96=87=E4=BB=B6=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E8=87=AA=E9=87=8D=E5=90=AF=202-=E4=BF=AE=E6=94=B9=E5=AD=90abil?= =?UTF-8?q?ity=E5=90=AF=E5=8A=A8=E6=A8=A1=E5=BC=8F=E4=B8=BA"launchType":"s?= =?UTF-8?q?pecified",=E5=90=8E=E5=8D=95=E4=B8=80=E5=90=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AD=90ability=E5=8D=95=E4=BE=8B,=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=B8=8D=E5=90=8C=E5=8A=9F=E8=83=BD=E7=9A=84?= =?UTF-8?q?ability=E7=8B=AC=E7=AB=8B=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/ets/entryability/EntryAbility.ets | 2 +- .../ets/exabilitystage/ExAbilityStage.ets | 13 +++++++ entry/src/main/ets/init/InitFonts.ets | 39 +++++++++---------- .../src/main/ets/pages/eventhub/EventBase.ets | 30 +++++++------- .../ets/pages/eventhub/EventSubAbility.ets | 15 +++++-- entry/src/main/ets/subability/SubAbility.ets | 9 +++-- entry/src/main/module.json5 | 7 ++-- 7 files changed, 69 insertions(+), 46 deletions(-) create mode 100644 entry/src/main/ets/exabilitystage/ExAbilityStage.ets diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 01b1cc68..dfb95b04 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -20,7 +20,7 @@ export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { if(!InitHub(windowStage.getMainWindowSync(),windowStage,this.context)){ console.log("InitHub Failed!") - this.context.getApplicationContext().killAllProcesses(); + ///this.context.getApplicationContext().killAllProcesses(); }else{ //Get Main Window windowStage.getMainWindow((err, data) => { diff --git a/entry/src/main/ets/exabilitystage/ExAbilityStage.ets b/entry/src/main/ets/exabilitystage/ExAbilityStage.ets new file mode 100644 index 00000000..1f77b48e --- /dev/null +++ b/entry/src/main/ets/exabilitystage/ExAbilityStage.ets @@ -0,0 +1,13 @@ +import { AbilityStage, Want } from '@kit.AbilityKit'; + +export default class ExAbilityStage extends AbilityStage { + onAcceptWant(want: Want): string { + if (want.abilityName === 'SubAbility') { + if (want.parameters) { + console.info('SubAbility:',`${want.parameters.instanceKey}`); + return `${want.parameters.instanceKey}`; + } + } + return 'ExAbilityStage'; + } +} \ No newline at end of file diff --git a/entry/src/main/ets/init/InitFonts.ets b/entry/src/main/ets/init/InitFonts.ets index 3c6fa5b4..ebb86225 100644 --- a/entry/src/main/ets/init/InitFonts.ets +++ b/entry/src/main/ets/init/InitFonts.ets @@ -8,30 +8,27 @@ import { import UIAbility from "@ohos.app.ability.UIAbility"; export function InitFonts(uac:common.UIAbilityContext):boolean{ - let sbFontsDir=uac.filesDir + '/fonts/'; - let sbExampleDir=uac.filesDir + '/example/'; - if(!CheckExistDir(uac,sbFontsDir)||!CheckExistDir(uac,sbExampleDir)){ - console.info(`first run app check dir exist`); - console.info(`extract dir file to sandbox dir`); - const fontsCopied = ExtractDir(uac, 'fonts'); - const exampleCopied = ExtractDir(uac, 'example'); - console.info(`restart app`); - if(fontsCopied&&exampleCopied){ - let wantInfo: Want = { - deviceId: '', - bundleName: 'com.example.opencax', - abilityName: 'EntryAbility', - }; - uac.startAbility(wantInfo).then(() => { - uac.terminateSelf(); - }) - }else{ - return false; + try { + let sbFontsDir=uac.filesDir + '/fonts/'; + let sbExampleDir=uac.filesDir + '/example/'; + if(!CheckExistDir(uac,sbFontsDir)||!CheckExistDir(uac,sbExampleDir)) { + console.info(`first run app check dir exist`); + console.info(`extract dir file to sandbox dir`); + const fontsCopied = ExtractDir(uac, 'fonts'); + const exampleCopied = ExtractDir(uac, 'example'); + console.info(`restart app`); } - return true; - }else{ HilogSadboxFontDirFile(uac,'fonts'); HilogSadboxFontDirFile(uac,'example'); return true; + } catch (err) { + let msg = 'Unknown error'; + if (err instanceof Error) { + msg = err.message; + } else if (typeof err === 'string') { + msg = err; + } + console.error(`Init Fonts Failed: ${msg}, error code: ${err.code}`); + return false; } } \ No newline at end of file diff --git a/entry/src/main/ets/pages/eventhub/EventBase.ets b/entry/src/main/ets/pages/eventhub/EventBase.ets index ffbbd7b7..650648a3 100644 --- a/entry/src/main/ets/pages/eventhub/EventBase.ets +++ b/entry/src/main/ets/pages/eventhub/EventBase.ets @@ -20,13 +20,17 @@ export class SubWinInfo{ subOpt?:window.SubWindowOptions; subPointX?:number=200; subPointY?:number=200; + subEventName?:string; width?:number=0; height?:number=0; - constructor(name?: string, page?: string,width?: number,height?: number) { - this.name = name; - this.page = page; - this.width = width; - this.height = height; + SetSubWinSize(_width:number, _height:number){ + this.width=_width; + this.height=_height; + } + constructor(_name?: string, _subEventName?:string,_page?: string) { + this.name = _name; + this.subEventName=_subEventName; + this.page = _page; } } @@ -141,20 +145,20 @@ export function EventPage(event:TitleButton){ //事件类型:子窗体 export function EventWin(event:TitleButton){ - let winInfo: SubWinInfo=new SubWinInfo; + let winInfo: SubWinInfo = new SubWinInfo(event.btnName,event.btnEvent.command, event.btnEvent.page); if(event?.btnEvent.command=='Page_NewFile') { - winInfo = new SubWinInfo(event.btnName, event.btnEvent.page, mdwInfo.winWidth * 0.4, mdwInfo.winHeight * 0.4); + winInfo.SetSubWinSize(mdwInfo.winWidth * 0.4,mdwInfo.winHeight * 0.4); }else if(event?.btnEvent.command=='Page_SaveAsFile'){ - winInfo=new SubWinInfo(event.btnName,event.btnEvent.page,mdwInfo.winWidth*0.4,mdwInfo.winHeight*0.4); + winInfo.SetSubWinSize(mdwInfo.winWidth * 0.4,mdwInfo.winHeight * 0.4); } else if(event?.btnEvent.command=='Page_ImportFile'){ - winInfo=new SubWinInfo(event.btnName,event.btnEvent.page,mdwInfo.winWidth*0.4,mdwInfo.winHeight*0.4); + winInfo.SetSubWinSize(mdwInfo.winWidth * 0.4,mdwInfo.winHeight * 0.4); }else if(event?.btnEvent.command=='Page_ExportFile'){ - winInfo=new SubWinInfo(event.btnName,event.btnEvent.page,mdwInfo.winWidth*0.4,mdwInfo.winHeight*0.4); + winInfo.SetSubWinSize(mdwInfo.winWidth * 0.4,mdwInfo.winHeight * 0.4); }else if(event?.btnEvent.command=='Page_Options'){ - winInfo=new SubWinInfo(event.btnName,event.btnEvent.page,mdwInfo.winWidth*0.6,mdwInfo.winHeight*0.8); + winInfo.SetSubWinSize(mdwInfo.winWidth * 0.6,mdwInfo.winHeight * 0.8); } - let ctx = mdwInfo.win?.getUIContext().getHostContext() as common.UIAbilityContext; - EventSubAbility(ctx).then((result) => { + + EventSubAbility(winInfo).then((result) => { if(result){ let context =mdwInfo.win?.getUIContext().getHostContext()?.getApplicationContext(); context?.eventHub.emit('InitSubWindow',winInfo); diff --git a/entry/src/main/ets/pages/eventhub/EventSubAbility.ets b/entry/src/main/ets/pages/eventhub/EventSubAbility.ets index be39f392..fc4e3aba 100644 --- a/entry/src/main/ets/pages/eventhub/EventSubAbility.ets +++ b/entry/src/main/ets/pages/eventhub/EventSubAbility.ets @@ -1,19 +1,26 @@ import { common, StartOptions,Want } from "@kit.AbilityKit"; +import { mdwInfo } from "../dispwininfo/DispWinInfo"; import { util } from '@kit.ArkTS'; +import { SubWinInfo } from "./EventBase"; -export async function EventSubAbility(uac:common.UIAbilityContext): Promise{ + +export async function EventSubAbility(winInfo:SubWinInfo): Promise{ + let ctx = mdwInfo.win?.getUIContext().getHostContext() as common.UIAbilityContext; let want: Want = { bundleName: 'com.example.opencax', abilityName: 'SubAbility', + parameters: { + instanceKey: winInfo.subEventName as string + } }; try { - if (!uac) { + if (!ctx) { console.error("Failed to get UIAbilityContext"); return false; } // 监听来自 SubWinAbility 的初始化完成事件 const initializationPromise = new Promise((resolve) => { - let appCtx =uac.getApplicationContext(); + let appCtx =ctx.getApplicationContext(); appCtx?.eventHub.on('SubWinInitialized', (data: Object) => { console.info("Received SubWinInitialized event:", data); // 可以根据 data 中的信息判断是否成功 @@ -32,7 +39,7 @@ export async function EventSubAbility(uac:common.UIAbilityContext): Promise { let winInfo=data as SubWinInfo; - this.InitWindowParam(winInfo); + if(this.want&&this.want.parameters&&this.want.parameters['instanceKey']===winInfo.subEventName){ + this.InitWindowParam(winInfo); + } }); ctx.eventHub.on('MainWindowDestroy', (data: Object) => { this.context.terminateSelf(); @@ -47,12 +50,10 @@ export default class SubAbility extends UIAbility { }); } onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.want=want; this.onWinEventHub(); } - onAcceptWant(want: Want): string { - return 'SubAbility'; - } onDestroy(): void { hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy'); } diff --git a/entry/src/main/module.json5 b/entry/src/main/module.json5 index 10e26c2e..30c1f431 100644 --- a/entry/src/main/module.json5 +++ b/entry/src/main/module.json5 @@ -4,6 +4,7 @@ "type": "entry", "description": "$string:module_desc", "mainElement": "EntryAbility", + "srcEntry": "./ets/exabilitystage/ExAbilityStage.ets", "deviceTypes": [ "2in1", "tablet" @@ -13,10 +14,10 @@ "pages": "$profile:main_pages", "requestPermissions": [ { - "name": "ohos.permission.INPUT_MONITORING", + "name": "ohos.permission.INPUT_MONITORING" }, { - "name": "ohos.permission.SET_WINDOW_TRANSPARENT", + "name": "ohos.permission.SET_WINDOW_TRANSPARENT" } ], "abilities": [ @@ -76,7 +77,7 @@ "name": "ohos.extension.backup", "resource": "$profile:backup_config" } - ], + ] } ] }