# Requirements

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/scheduler/Requirements.java+class:androidx.media3.exoplayer.scheduler.Requirements)

*** ** * ** ***


```
@UnstableApi
public final class Requirements implements Parcelable
```

<br />

*** ** * ** ***

Defines a set of device state requirements.

## Summary

| ### Nested types |
|---|
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = ) @https://developer.android.com/reference/androidx/annotation/IntDef(flag = true, value = ) public annotation https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags` Requirement flags. |

| ### Constants |
|---|---|
| `static final https://developer.android.com/reference/android/os/Parcelable.Creator.html<https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements>` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#CREATOR()` |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#DEVICE_CHARGING() = 8` Requirement that the device is charging. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#DEVICE_IDLE() = 4` Requirement that the device is idle. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#DEVICE_STORAGE_NOT_LOW() = 16` Requirement that the device's *internal* storage is not low. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#NETWORK() = 1` Requirement that the device has network connectivity. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#NETWORK_UNMETERED() = 2` Requirement that the device has a network connection that is unmetered. |

| ### Public fields |
|---|---|
| `final int` | `@https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#requirements()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#Requirements(int)(@https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags int requirements)` |

| ### Public methods |
|---|---|
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#checkRequirements(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Returns whether the requirements are met. |
| `int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#describeContents()()` |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#equals(java.lang.Object)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/Object.html o)` |
| `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#filterRequirements(int)(int requirementsFilter)` Filters the requirements, returning the subset that are enabled by the provided filter. |
| `int` | `@https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#getNotMetRequirements(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` Returns requirements that are not met, or 0. |
| `int` | `@https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#getRequirements()()` Returns the requirements. |
| `int` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#hashCode()()` |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#isChargingRequired()()` Returns whether the device is required to be charging. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#isIdleRequired()()` Returns whether the device is required to be idle. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#isNetworkRequired()()` Returns whether network connectivity is required. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#isStorageNotLowRequired()()` Returns whether the device is required to not be low on *internal* storage. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#isUnmeteredNetworkRequired()()` Returns whether un-metered network connectivity is required. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements#writeToParcel(android.os.Parcel,int)(https://developer.android.com/reference/android/os/Parcel.html dest, int flags)` |

| ### Inherited Constants |
|---|
| From [android.os.Parcelable](https://developer.android.com/reference/android/os/Parcelable.html) |---|---| | `static final int` | `https://developer.android.com/reference/android/os/Parcelable.html#CONTENTS_FILE_DESCRIPTOR = 1` | | `static final int` | `https://developer.android.com/reference/android/os/Parcelable.html#PARCELABLE_WRITE_RETURN_VALUE = 1` | |

## Constants

### CREATOR

```
public static final Parcelable.Creator<Requirements> CREATOR
```

### DEVICE_CHARGING

```
public static final int DEVICE_CHARGING = 8
```

Requirement that the device is charging.

### DEVICE_IDLE

```
public static final int DEVICE_IDLE = 4
```

Requirement that the device is idle.

### DEVICE_STORAGE_NOT_LOW

```
public static final int DEVICE_STORAGE_NOT_LOW = 16
```

Requirement that the device's *internal* storage is not low. Note that this requirement is not affected by the status of external storage.

### NETWORK

```
public static final int NETWORK = 1
```

Requirement that the device has network connectivity.

### NETWORK_UNMETERED

```
public static final int NETWORK_UNMETERED = 2
```

Requirement that the device has a network connection that is unmetered.

## Public fields

### requirements

```
@Requirements.RequirementFlags
public final int requirements
```

## Public constructors

### Requirements

```
public Requirements(@Requirements.RequirementFlags int requirements)
```

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags int requirements` | A combination of requirement flags. |

## Public methods

### checkRequirements

```
public boolean checkRequirements(Context context)
```

Returns whether the requirements are met.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any context. |

| Returns |
|---|---|
| `boolean` | Whether the requirements are met. |

### describeContents

```
public int describeContents()
```

### equals

```
public boolean equals(@Nullable Object o)
```

### filterRequirements

```
public Requirements filterRequirements(int requirementsFilter)
```

Filters the requirements, returning the subset that are enabled by the provided filter.

| Parameters |
|---|---|
| `int requirementsFilter` | The enabled `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements.RequirementFlags`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/scheduler/Requirements` | The filtered requirements. If the filter does not cause a change in the requirements then this instance will be returned. |

### getNotMetRequirements

```
@Requirements.RequirementFlags
public int getNotMetRequirements(Context context)
```

Returns requirements that are not met, or 0.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any context. |

| Returns |
|---|---|
| `int` | The requirements that are not met, or 0. |

### getRequirements

```
@Requirements.RequirementFlags
public int getRequirements()
```

Returns the requirements.

### hashCode

```
public int hashCode()
```

### isChargingRequired

```
public boolean isChargingRequired()
```

Returns whether the device is required to be charging.

### isIdleRequired

```
public boolean isIdleRequired()
```

Returns whether the device is required to be idle.

### isNetworkRequired

```
public boolean isNetworkRequired()
```

Returns whether network connectivity is required.

### isStorageNotLowRequired

```
public boolean isStorageNotLowRequired()
```

Returns whether the device is required to not be low on *internal* storage.

### isUnmeteredNetworkRequired

```
public boolean isUnmeteredNetworkRequired()
```

Returns whether un-metered network connectivity is required.

### writeToParcel

```
public void writeToParcel(Parcel dest, int flags)
```