diff --git a/media/java/android/media/projection/MediaProjectionManager.java b/media/java/android/media/projection/MediaProjectionManager.java index 900e3bb62fcf1..b5e221324c978 100644 --- a/media/java/android/media/projection/MediaProjectionManager.java +++ b/media/java/android/media/projection/MediaProjectionManager.java @@ -90,6 +90,8 @@ public final class MediaProjectionManager { * int, android.content.Intent)} * @param resultData The resulting data from {@link android.app.Activity#onActivityResult(int, * int, android.content.Intent)} + * @throws IllegalStateException on pre-Q devices if a previously gotten MediaProjection + * from the same {@code resultData} has not yet been stopped */ public MediaProjection getMediaProjection(int resultCode, @NonNull Intent resultData) { if (resultCode != Activity.RESULT_OK || resultData == null) { diff --git a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java index a6ea6b2e1aeb3..fccff57e32349 100644 --- a/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java +++ b/services/core/java/com/android/server/media/projection/MediaProjectionManagerService.java @@ -396,8 +396,9 @@ public final class MediaProjectionManagerService extends SystemService } synchronized (mLock) { if (isValidMediaProjection(asBinder())) { - throw new IllegalStateException( - "Cannot start already started MediaProjection"); + Slog.w(TAG, "UID " + Binder.getCallingUid() + + " attempted to start already started MediaProjection"); + return; } mCallback = callback; registerCallback(mCallback);