From c85b6153b840abe4765c61de9328af4afea27da9 Mon Sep 17 00:00:00 2001 From: cailing Date: Wed, 23 Mar 2022 18:21:11 +0800 Subject: [PATCH] =?UTF-8?q?ConnectAbility=E6=B7=BB=E5=8A=A0=E5=85=8D?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: cailing --- .../src/ability_manager_service.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index bd1983e4533..314fa40c281 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -905,6 +905,36 @@ int AbilityManagerService::ConnectAbility( HILOG_INFO("%{public}s invalid Token.", __func__); return ConnectLocalAbility(want, validUserId, connect, nullptr); } + if (CheckIsFreeInstall(want)) { + HILOG_INFO("AbilityManagerService::ConnectAbility. try to FreeInstall"); + std::string bundleName = want.GetElement().GetBundleName(); + std::string abilityName = want.GetElement().GetAbilityName(); + std::string deviceId = want.GetElement().GetDeviceID(); + std::string localDeviceId; + if (!((GetLocalDeviceId(localDeviceId) && localDeviceId == deviceId) || deviceId.empty())) { + HILOG_ERROR("AbilityManagerService::ConnectAbility. DeviceId error"); + return ERR_INVALID_VALUE; + } + if (bundleName.empty() || abilityName.empty()) { + HILOG_ERROR("AbilityManagerService::ConnectAbility. bundleName or abilityName is nullptr"); + return ERR_INVALID_VALUE; + } + AppExecFwk::AbilityInfo abilityInfo; + if (!(iBundleManager_->QueryAbilityInfo( + want, AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION, userId, abilityInfo))) { + HILOG_INFO( + "AbilityManagerService::ConnectAbility. moduleName is %{public}s", abilityInfo.moduleName.c_str()); + Want &wantParam = const_cast(want); + wantParam.SetParam("moduleName", abilityInfo.moduleName); + int result = StartFreeInstall(wantParam, userId, DEFAULT_INVAL_VALUE); + if (result) { + HILOG_ERROR("AbilityManagerService::ConnectAbility. StartFreeInstall error"); + return result; + } + HILOG_INFO("AbilityManagerService::ConnectAbility. StartFreeInstall success"); + return ConnectLocalAbility(wantParam, validUserId, connect, callerToken); + } + } return ConnectLocalAbility(want, validUserId, connect, callerToken); } -- Gitee