diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3430bcd2191ba..b663d04ae4334 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -20904,9 +20904,15 @@ public class ActivityManagerService extends IActivityManager.Stub } private List collectReceiverComponents(Intent intent, String resolvedType, - int callingUid, int[] users) { + int callingUid, boolean callerInstantApp, int[] users) { // TODO: come back and remove this assumption to triage all broadcasts int pmFlags = STOCK_PM_FLAGS | MATCH_DEBUG_TRIAGED_MISSING; + // Instant apps should be able to send broadcasts to themselves, so we would + // match instant receivers and later the broadcast queue would enforce that + // the broadcast cannot be sent to a receiver outside the instant UID. + if (callerInstantApp) { + pmFlags |= PackageManager.MATCH_INSTANT; + } List receivers = null; try { @@ -21535,7 +21541,8 @@ public class ActivityManagerService extends IActivityManager.Stub // Need to resolve the intent to interested receivers... if ((intent.getFlags()&Intent.FLAG_RECEIVER_REGISTERED_ONLY) == 0) { - receivers = collectReceiverComponents(intent, resolvedType, callingUid, users); + receivers = collectReceiverComponents(intent, resolvedType, callingUid, + callerInstantApp, users); } if (intent.getComponent() == null) { if (userId == UserHandle.USER_ALL && callingUid == SHELL_UID) {