diff --git a/services/abilitymgr/src/ability_connect_manager.cpp b/services/abilitymgr/src/ability_connect_manager.cpp index 536d634897..4abcbcea87 100644 --- a/services/abilitymgr/src/ability_connect_manager.cpp +++ b/services/abilitymgr/src/ability_connect_manager.cpp @@ -256,7 +256,6 @@ int AbilityConnectManager::StartAbilityLocked(const AbilityRequest &abilityReque if (!isLoadedAbility) { TAG_LOGD(AAFwkTag::ABILITYMGR, "Target service has not been loaded."); - targetService->GrantUriPermissionForServiceExtension(); SetLastExitReason(abilityRequest, targetService); if (IsUIExtensionAbility(targetService)) { targetService->SetLaunchReason(LaunchReason::LAUNCHREASON_START_ABILITY); @@ -265,7 +264,6 @@ int AbilityConnectManager::StartAbilityLocked(const AbilityRequest &abilityReque } else if (targetService->IsAbilityState(AbilityState::ACTIVE) && !IsUIExtensionAbility(targetService)) { // It may have been started through connect targetService->SetWant(abilityRequest.want); - targetService->GrantUriPermissionForServiceExtension(); CommandAbility(targetService); } else if (IsUIExtensionAbility(targetService)) { DoForegroundUIExtension(targetService, abilityRequest); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 53b7a5a0c8..2d3716a37b 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -3527,7 +3527,8 @@ int AbilityManagerService::ConnectAbilityCommon( Want abilityWant = want; AbilityRequest abilityRequest; std::string uri = abilityWant.GetUri().ToString(); - if (!uri.empty()) { + bool isFileUri = (abilityWant.GetUri().GetScheme() == "file"); + if (!uri.empty() && !isFileUri) { // if the want include uri, it may only has uri information. it is probably a datashare extension. TAG_LOGD(AAFwkTag::ABILITYMGR, "%{public}s called. uri:%{public}s, userId %{public}d", __func__, uri.c_str(), validUserId); diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index d92d3be8e1..f7f07117ef 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1606,6 +1606,7 @@ void AbilityRecord::ConnectAbility() if (isConnected) { TAG_LOGW(AAFwkTag::ABILITYMGR, "connect state error."); } + GrantUriPermissionForServiceExtension(); lifecycleDeal_->ConnectAbility(GetWant()); isConnected = true; } @@ -1637,6 +1638,7 @@ void AbilityRecord::CommandAbility() { TAG_LOGD(AAFwkTag::ABILITYMGR, "startId_:%{public}d.", startId_); CHECK_POINTER(lifecycleDeal_); + GrantUriPermissionForServiceExtension(); lifecycleDeal_->CommandAbility(GetWant(), false, startId_); }