From fd0c383438e363ec6bb587c25d44789fd707b40d Mon Sep 17 00:00:00 2001 From: liwang <965027894@qq.com> Date: Sat, 30 Aug 2025 17:23:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DsetBadgeNumberByBundle?= =?UTF-8?q?=E6=97=B6onBadgeChanged=E5=9B=9E=E8=B0=83=E4=B8=ADuid=E5=92=8Cb?= =?UTF-8?q?adgeNumber=E8=B5=8B=E5=80=BC=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liwang <965027894@qq.com> --- frameworks/ets/ani/include/sts_common.h | 1 + frameworks/ets/ani/src/sts_common.cpp | 21 +++++++++++++++++++++ frameworks/ets/ani/src/sts_subscriber.cpp | 8 ++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/frameworks/ets/ani/include/sts_common.h b/frameworks/ets/ani/include/sts_common.h index 7e0bc3827..4817b0626 100644 --- a/frameworks/ets/ani/include/sts_common.h +++ b/frameworks/ets/ani/include/sts_common.h @@ -73,6 +73,7 @@ void GetPropertyRefValue(ani_env *env, ani_object obj, const char *name, ani_boo bool SetFieldString(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, const std::string value); +bool SetFieldInt(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, const int32_t value); bool SetOptionalFieldBoolean(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, bool value); bool SetOptionalFieldDouble(ani_env *env, ani_class cls, ani_object &object, diff --git a/frameworks/ets/ani/src/sts_common.cpp b/frameworks/ets/ani/src/sts_common.cpp index 74ef991a6..e09939f7c 100644 --- a/frameworks/ets/ani/src/sts_common.cpp +++ b/frameworks/ets/ani/src/sts_common.cpp @@ -500,6 +500,27 @@ bool SetFieldString(ani_env *env, ani_class cls, ani_object &object, return true; } +bool SetFieldInt(ani_env *env, ani_class cls, ani_object &object, + const std::string fieldName, const int32_t value) +{ + if (env == nullptr || cls == nullptr || object == nullptr || fieldName.empty()) { + ANS_LOGE("SetFieldInt fail. has nullptr or fieldName is empty"); + return false; + } + ani_field field = nullptr; + ani_status status = env->Class_FindField(cls, fieldName.c_str(), &field); + ANS_LOGD("SetFieldInt fieldName : %{public}s", fieldName.c_str()); + if (status != ANI_OK || field == nullptr) { + ANS_LOGE("Class_FindField fail. status : %{public}d", status); + return false; + } + if ((status = env->Object_SetField_Int(object, field, static_cast(value))) != ANI_OK) { + ANS_LOGE("Object_SetField_Int fail. status : %{public}d", status); + return false; + } + return true; +} + bool SetOptionalFieldBoolean(ani_env *env, ani_class cls, ani_object &object, const std::string fieldName, bool value) { diff --git a/frameworks/ets/ani/src/sts_subscriber.cpp b/frameworks/ets/ani/src/sts_subscriber.cpp index 60d749f07..132a2145b 100644 --- a/frameworks/ets/ani/src/sts_subscriber.cpp +++ b/frameworks/ets/ani/src/sts_subscriber.cpp @@ -257,12 +257,12 @@ bool WarpBadgeNumberCallbackData( ANS_LOGE("SetFieldString bundle faild"); return false; } - if (!CallSetter(env, cls, outObj, "uid", static_cast(badgeData->GetUid()))) { - ANS_LOGE("uid set faild."); + if (!SetFieldInt(env, cls, outObj, "uid", badgeData->GetUid())) { + ANS_LOGE("SetFieldInt uid faild"); return false; } - if (!CallSetter(env, cls, outObj, "badgeNumber", static_cast(badgeData->GetBadgeNumber()))) { - ANS_LOGE("badgeNumber set faild"); + if (!SetFieldInt(env, cls, outObj, "badgeNumber", badgeData->GetBadgeNumber())) { + ANS_LOGE("SetFieldInt badgeNumber faild"); return false; } instanceKeyObj = CreateInt(env, static_cast(badgeData->GetInstanceKey())); -- Gitee