From 67b1d6175f132609847352285af3d07bfeab0cb2 Mon Sep 17 00:00:00 2001 From: zhangzezhong Date: Sun, 8 Jun 2025 14:10:14 +0800 Subject: [PATCH] =?UTF-8?q?ApplicationContext.d.ts=E7=9A=84getAllRunningIn?= =?UTF-8?q?stanceKeys?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzezhong --- .../ets/application/ApplicationContext.ets | 19 ++++++++++ .../context/ets_application_context_utils.cpp | 36 +++++++++++++++++++ .../context/ets_application_context_utils.h | 2 ++ 3 files changed, 57 insertions(+) diff --git a/frameworks/ets/ets/application/ApplicationContext.ets b/frameworks/ets/ets/application/ApplicationContext.ets index f711c92f5a7..e9626275644 100644 --- a/frameworks/ets/ets/application/ApplicationContext.ets +++ b/frameworks/ets/ets/application/ApplicationContext.ets @@ -34,6 +34,7 @@ export default class ApplicationContext extends Context { public native nativesetColorMode(colorMode: ConfigurationConstant.ColorMode): void; public native nativesetFont(font: string): void; public native nativerestartApp(want: Want): void; + public native nativegetAllRunningInstanceKeys(callback: AsyncCallbackWrapper>): void; setSupportedProcessCache(isSupported: boolean): void { taskpool.execute((): void => { @@ -151,6 +152,24 @@ export default class ApplicationContext extends Context { }); return p; } + + getAllRunningInstanceKeys(): Promise> { + let p = new Promise>((resolve: (data: Array) => void, + reject: (err: BusinessError) => void): void => { + let myCall = new AsyncCallbackWrapper>((err: BusinessError, + data: Array) => { + if (err.code == 0) { + resolve(data); + } else { + reject(err); + } + }); + taskpool.execute((): void => { + this.nativegetAllRunningInstanceKeys(myCall); + }); + }); + return p; + } clearUpApplicationData(callback: AsyncCallback): void { let myCall = new AsyncCallbackWrapper(callback); diff --git a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp index d4b87ec25f9..11f7cf8c460 100644 --- a/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp +++ b/frameworks/native/appkit/ability_runtime/context/ets_application_context_utils.cpp @@ -210,6 +210,40 @@ void EtsApplicationContextUtils::GetRunningProcessInformation([[maybe_unused]]an } } +void EtsApplicationContextUtils::GetAllRunningInstanceKeys([[maybe_unused]]ani_env *env, + [[maybe_unused]]ani_object aniObj, ani_object callback) +{ + TAG_LOGD(AAFwkTag::APPKIT, "GetAllRunningInstanceKeys Call"); + if (env == nullptr) { + TAG_LOGE(AAFwkTag::APPKIT, "null env"); + return; + } + ani_object emptyArray = AppManagerSts::CreateEmptyAniArray(env); + std::shared_ptr> instanceKeys = std::make_shared>(); + auto applicationContext = applicationContext_.lock(); + if (!applicationContext) { + TAG_LOGE(AAFwkTag::APPKIT, "null context"); + AppExecFwk::AsyncCallback(env, callback, CreateStsError(env, + AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT), emptyArray); + return; + } + if (applicationContext->GetCurrentAppMode() != static_cast(AppExecFwk::MultiAppModeType::MULTI_INSTANCE)) { + TAG_LOGE(AAFwkTag::APPKIT, "not supported"); + AppExecFwk::AsyncCallback(env, callback, CreateStsErrorByNativeErr(env, + AAFwk::ERR_MULTI_INSTANCE_NOT_SUPPORTED), emptyArray); + return; + } + ErrCode innerErrCode = applicationContext->GetAllRunningInstanceKeys(*instanceKeys); + if (innerErrCode != ERR_OK) { + TAG_LOGE(AAFwkTag::APPKIT, "innerErrCode=%{public}d", innerErrCode); + AppExecFwk::AsyncCallback(env, callback, CreateStsErrorByNativeErr(env, (int32_t)innerErrCode), emptyArray); + return; + } + ani_object stringArray; + AppExecFwk::WrapArrayString(env, stringArray, *instanceKeys); + AppExecFwk::AsyncCallback(env, callback, CreateStsError(env, AbilityErrorCode::ERROR_OK), stringArray); +} + ani_double EtsApplicationContextUtils::NativeOnSync([[maybe_unused]]ani_env *env, [[maybe_unused]]ani_object aniObj, ani_string type, ani_object envCallback) { @@ -392,6 +426,8 @@ void EtsApplicationContextUtils::BindApplicationContextFunc(ani_env* aniEnv, ani reinterpret_cast(EtsApplicationContextUtils::SetFont)}, ani_native_function {"nativerestartApp", "L@ohos/app/ability/Want/Want;:V", reinterpret_cast(EtsApplicationContextUtils::RestartApp)}, + ani_native_function {"nativegetAllRunningInstanceKeys", "Lutils/AbilityUtils/AsyncCallbackWrapper;:V", + reinterpret_cast(EtsApplicationContextUtils::GetAllRunningInstanceKeys)}, }; ani_status status = aniEnv->Class_BindNativeMethods(contextClass, applicationContextFunctions.data(), applicationContextFunctions.size()); diff --git a/interfaces/kits/native/appkit/ability_runtime/context/ets_application_context_utils.h b/interfaces/kits/native/appkit/ability_runtime/context/ets_application_context_utils.h index b0e1944e43c..5895c1cfac5 100644 --- a/interfaces/kits/native/appkit/ability_runtime/context/ets_application_context_utils.h +++ b/interfaces/kits/native/appkit/ability_runtime/context/ets_application_context_utils.h @@ -45,6 +45,8 @@ public: ani_object callback); static void GetRunningProcessInformation([[maybe_unused]]ani_env *env, [[maybe_unused]]ani_object aniObj, ani_object callback); + static void GetAllRunningInstanceKeys([[maybe_unused]]ani_env *env, [[maybe_unused]]ani_object aniObj, + ani_object callback); static ani_double NativeOnSync([[maybe_unused]]ani_env *env, [[maybe_unused]]ani_object aniObj, ani_string type, ani_object envCallback); static void NativeOffSync([[maybe_unused]]ani_env *env, [[maybe_unused]]ani_object aniObj, -- Gitee