ActivityResultContracts.PickVisualMedia

public class ActivityResultContracts.PickVisualMedia extends ActivityResultContract


An ActivityResultContract to use the Photo Picker to select a single image, video, or other type of visual media.

This contract always prefers the system framework provided Photo Picker available via MediaStore.ACTION_PICK_IMAGES when it is available, but will also provide a fallback on devices that it is not available to ensure a consistent API surface across all Android API 19 or higher devices.

The priority order for handling the Photo Picker is:

  1. The system framework provided MediaStore.ACTION_PICK_IMAGES.

The input is a PickVisualMediaRequest.

The output is a Uri when the user has selected a media or null when the user hasn't selected any item. Keep in mind that Uri returned by the photo picker isn't writable.

This can be extended to override createIntent if you wish to pass additional extras to the Intent created by super.createIntent().

Summary

Nested types

VisualMediaType object used to filter images and video when using the photo picker.

VisualMediaType object used to filter images only when using the photo picker.

VisualMediaType class used to filter a single mime type only when using the photo picker.

VisualMediaType object used to filter video only when using the photo picker.

Represents filter input type accepted by the photo picker.

Constants

static final @NonNull String

In cases where the system framework provided MediaStore.ACTION_PICK_IMAGES Photo Picker cannot be implemented, OEMs or system apps can provide a consistent Photo Picker experience to those devices by creating an Activity that handles this action.

static final @NonNull String

Extra that will be sent by PickMultipleVisualMedia to an Activity that handles ACTION_SYSTEM_FALLBACK_PICK_IMAGES that indicates that maximum number of photos the user should select.

Public constructors

Public methods

@NonNull Intent

Create an intent that can be used for android.app.Activity.startActivityForResult.

final ActivityResultContract.SynchronousResult<Uri>

An optional method you can implement that can be used to potentially provide a result in lieu of starting an activity.

static final boolean

This method is deprecated. This method is deprecated in favor of isPhotoPickerAvailable(context) to support the picker provided by updatable system apps

static final boolean

Check if the current device has support for the photo picker by checking the running Android version, the SDK extension version or the picker provided by a system app implementing ACTION_SYSTEM_FALLBACK_PICK_IMAGES.

final Uri
parseResult(int resultCode, Intent intent)

Convert result obtained from android.app.Activity.onActivityResult to O.

Constants

ACTION_SYSTEM_FALLBACK_PICK_IMAGES

public static final @NonNull String ACTION_SYSTEM_FALLBACK_PICK_IMAGES

In cases where the system framework provided MediaStore.ACTION_PICK_IMAGES Photo Picker cannot be implemented, OEMs or system apps can provide a consistent Photo Picker experience to those devices by creating an Activity that handles this action. This app must also include Intent.CATEGORY_DEFAULT in the activity's intent filter.

Only system apps can implement this action - any non-system apps will be ignored when searching for the activities that handle this Intent.

Note: this should not be used directly, instead relying on the selection logic done by createIntent to create the correct Intent for the current device.

EXTRA_SYSTEM_FALLBACK_PICK_IMAGES_MAX

public static final @NonNull String EXTRA_SYSTEM_FALLBACK_PICK_IMAGES_MAX

Extra that will be sent by PickMultipleVisualMedia to an Activity that handles ACTION_SYSTEM_FALLBACK_PICK_IMAGES that indicates that maximum number of photos the user should select.

If this extra is not present, only a single photo should be selectable.

If this extra is present but equal to Int.MAX_VALUE, then no limit should be enforced.

Public constructors

PickVisualMedia

Added in 1.6.0
public PickVisualMedia()

Public methods

createIntent

Added in 1.6.0
@CallSuper
public @NonNull Intent createIntent(
    @NonNull Context context,
    @NonNull PickVisualMediaRequest input
)

Create an intent that can be used for android.app.Activity.startActivityForResult.

getSynchronousResult

Added in 1.6.0
public final ActivityResultContract.SynchronousResult<UrigetSynchronousResult(
    @NonNull Context context,
    @NonNull PickVisualMediaRequest input
)

An optional method you can implement that can be used to potentially provide a result in lieu of starting an activity.

Returns
ActivityResultContract.SynchronousResult<Uri>

the result wrapped in a SynchronousResult or null if the call should proceed to start an activity.

isPhotoPickerAvailable

Added in 1.6.0
Deprecated in 1.7.0
public static final boolean isPhotoPickerAvailable()

Check if the current device has support for the photo picker by checking the running Android version or the SDK extension version.

Note that this does not check for any Intent handled by ACTION_SYSTEM_FALLBACK_PICK_IMAGES.

isPhotoPickerAvailable

Added in 1.7.0
public static final boolean isPhotoPickerAvailable(@NonNull Context context)

Check if the current device has support for the photo picker by checking the running Android version, the SDK extension version or the picker provided by a system app implementing ACTION_SYSTEM_FALLBACK_PICK_IMAGES.

parseResult

Added in 1.9.0-alpha03
public final Uri parseResult(int resultCode, Intent intent)

Convert result obtained from android.app.Activity.onActivityResult to O.