# RawResourceDataSource

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

*** ** * ** ***


```
@UnstableApi
public final class RawResourceDataSource extends BaseDataSource
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource) ||
|   | ↳ | [androidx.media3.datasource.RawResourceDataSource](https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource) |

*** ** * ** ***

A `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for reading a raw resource.

URIs supported by this source are:

- `android.resource://[package]/id`, where `package` is the name of the package in which the resource is located and `id` is the integer identifier of the resource. `package` is optional, its default value is the package of this application.
- `android.resource://[package]/[type/]name`, where `package` is the name of the package in which the resource is located, `type` is the resource type and `
  name` is the resource name. The package and the type are optional. Their default value is the package of this application and "raw", respectively. Using the other form is more efficient.

If `package` is specified in either of the above URI forms, it must be [visible](https://developer.android.com/training/package-visibility) to the current application.

Supported `https://developer.android.com/reference/android/net/Uri.html` instances can be built as follows:

```
Uri.Builder()
    .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
    .authority(packageName)
    .path(Integer.toString(resourceId))
    .build();
```

## Summary

| ### Nested types |
|---|
| `public class https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource.RawResourceDataSourceException extends https://developer.android.com/reference/androidx/media3/datasource/DataSourceException` Thrown when an `https://developer.android.com/reference/java/io/IOException.html` is encountered reading from a raw resource. |

| ### Constants |
|---|---|
| `static final https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#RAW_RESOURCE_SCHEME() = "rawresource"` **This field is deprecated.** Use `https://developer.android.com/reference/android/content/ContentResolver.html#SCHEME_ANDROID_RESOURCE` instead. <br /> |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#RawResourceDataSource(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` |

| ### Public methods |
|---|---|
| `static https://developer.android.com/reference/android/net/Uri.html` | `[buildRawResourceUri](https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#buildRawResourceUri(int))(int rawResourceId)` **This method is deprecated.** Use `new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE).path(Integer.toString(rawResourceId)).build()` instead. <br /> |
| `void` | `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#close()()` Closes the source. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/net/Uri.html` | `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#getUri()()` When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. |
| `long` | `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#open(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Opens the source to read the specified data. |
| `int` | `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#read(byte[],int,int)(byte[] buffer, int offset, int length)` Reads up to `length` bytes of data from the input. |

| ### Inherited methods |
|---|
| From [androidx.media3.datasource.BaseDataSource](https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource) |---|---| | `final void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#addTransferListener(androidx.media3.datasource.TransferListener)(https://developer.android.com/reference/androidx/media3/datasource/TransferListener transferListener)` Adds a `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` to listen to data transfers. | | `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#bytesTransferred(int)(int bytesTransferred)` Notifies listeners that bytes were transferred. | | `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferEnded()()` Notifies listeners that a transfer ended. | | `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferInitializing(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` is being initialized. | | `final void` | `https://developer.android.com/reference/androidx/media3/datasource/BaseDataSource#transferStarted(androidx.media3.datasource.DataSpec)(https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec)` Notifies listeners that data transfer for the specified `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` started. | |
| From [androidx.media3.datasource.DataSource](https://developer.android.com/reference/androidx/media3/datasource/DataSource) |---|---| | `https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/lang/String.html>>` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/datasource/DataSource#getResponseHeaders()()` When the source is open, returns the response headers associated with the last `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` call. | |

## Constants

### RAW_RESOURCE_SCHEME

```
public static final String RAW_RESOURCE_SCHEME = "rawresource"
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/android/content/ContentResolver.html#SCHEME_ANDROID_RESOURCE` instead.

## Public constructors

### RawResourceDataSource

```
public RawResourceDataSource(Context context)
```

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

## Public methods

### buildRawResourceUri

```
public static Uri [buildRawResourceUri](https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource#buildRawResourceUri(int))(int rawResourceId)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `new
> Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE).path(Integer.toString(rawResourceId)).build()` instead.

### close

```
public void close()
```

Closes the source. This method must be called even if the corresponding call to `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` threw an `https://developer.android.com/reference/java/io/IOException.html`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs closing the source. |
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource.RawResourceDataSourceException` |   |

### getUri

```
public @Nullable Uri getUri()
```

When the source is open, returns the `https://developer.android.com/reference/android/net/Uri.html` from which data is being read. The returned `https://developer.android.com/reference/android/net/Uri.html` will be identical to the one passed `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` in the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec` unless redirection has occurred. If redirection has occurred, the `https://developer.android.com/reference/android/net/Uri.html` after redirection is returned.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/net/Uri.html` | The `https://developer.android.com/reference/android/net/Uri.html` from which data is being read, or null if the source is not open. |

### open

```
public long open(DataSpec dataSpec)
```

Opens the source to read the specified data. If an `https://developer.android.com/reference/java/io/IOException.html` is thrown, callers must still call `https://developer.android.com/reference/androidx/media3/datasource/DataSource#close()` to ensure that any partial effects of the invocation are cleaned up.

The following edge case behaviors apply:

- If the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#position()` is within the resource, but the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#length()` extends beyond the end of the resource, then `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will succeed and data from the requested position to the end of the resource will be made available through `https://developer.android.com/reference/androidx/media3/common/DataReader#read(byte[],int,int)`.
- If the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#position()` is equal to the length of the resource, then `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will succeed, and `https://developer.android.com/reference/androidx/media3/common/DataReader#read(byte[],int,int)` will immediately return `https://developer.android.com/reference/androidx/media3/common/C#RESULT_END_OF_INPUT()`.
- If the `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#position()` is greater than the length of the resource, then `https://developer.android.com/reference/androidx/media3/datasource/DataSource#open(androidx.media3.datasource.DataSpec)` will throw an `https://developer.android.com/reference/java/io/IOException.html` for which `https://developer.android.com/reference/androidx/media3/datasource/DataSourceException#isCausedByPositionOutOfRange(java.io.IOException)` will be `true`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Defines the data to be read. |

| Returns |
|---|---|
| `long` | The number of bytes that can be read from the opened source. For unbounded requests (i.e., requests where `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#length()` equals `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()`) this value is the resolved length of the request, or `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()` if the length is still unresolved. For all other requests, the value returned will be equal to the request's `https://developer.android.com/reference/androidx/media3/datasource/DataSpec#length()`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs opening the source. `https://developer.android.com/reference/androidx/media3/datasource/DataSourceException` can be thrown or used as a cause of the thrown exception to specify the reason of the error. |
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource.RawResourceDataSourceException` |   |

### read

```
public int read(byte[] buffer, int offset, int length)
```

Reads up to `length` bytes of data from the input.

If `readLength` is zero then 0 is returned. Otherwise, if no data is available because the end of the opened range has been reached, then `https://developer.android.com/reference/androidx/media3/common/C#RESULT_END_OF_INPUT()` is returned. Otherwise, the call will block until at least one byte of data has been read and the number of bytes read is returned.

| Parameters |
|---|---|
| `byte[] buffer` | A target array into which data should be written. |
| `int offset` | The offset into the target array at which to write. |
| `int length` | The maximum number of bytes to read from the input. |

| Returns |
|---|---|
| `int` | The number of bytes read, or `https://developer.android.com/reference/androidx/media3/common/C#RESULT_END_OF_INPUT()` if the input has ended. This may be less than `length` because the end of the input (or available data) was reached, the method was interrupted, or the operation was aborted early for another reason. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | If an error occurs reading from the input. |
| `https://developer.android.com/reference/androidx/media3/datasource/RawResourceDataSource.RawResourceDataSourceException` |   |