# TransferListener

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/TransferListener.java+class:androidx.media3.datasource.TransferListener)

*** ** * ** ***


```
@UnstableApi
public interface TransferListener
```

<br />

Known direct subclasses [DataSourceContractTest.FakeTransferListener](https://developer.android.com/reference/androidx/media3/test/utils/DataSourceContractTest.FakeTransferListener), [DefaultBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter), [ExperimentalBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter)

|---|---|
| `https://developer.android.com/reference/androidx/media3/test/utils/DataSourceContractTest.FakeTransferListener` | A `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` that only keeps track of the transferred bytes. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter` | Estimates bandwidth by listening to data transfers. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter` | An experimental `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` that estimates bandwidth by listening to data transfers. |

*** ** * ** ***

A listener of data transfer events.

A transfer usually progresses through multiple steps:

1. Initializing the underlying resource (e.g. opening a HTTP connection). `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferInitializing(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)` is called before the initialization starts.
2. Starting the transfer after successfully initializing the resource. `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferStart(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)` is called. Note that this only happens if the initialization was successful.
3. Transferring data. `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onBytesTransferred(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean,int)` is called frequently during the transfer to indicate progress.
4. Closing the transfer and the underlying resource. `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)` is called. Note that each `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferStart(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)` will have exactly one corresponding call to `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)`.

## Summary

| ### Public methods |
|---|---|
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onBytesTransferred(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean,int)( https://developer.android.com/reference/androidx/media3/datasource/DataSource source, https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec, boolean isNetwork, int bytesTransferred )` Called incrementally during a transfer. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)(https://developer.android.com/reference/androidx/media3/datasource/DataSource source, https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec, boolean isNetwork)` Called when a transfer ends. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferInitializing(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)( https://developer.android.com/reference/androidx/media3/datasource/DataSource source, https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec, boolean isNetwork )` Called when a transfer is being initialized. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/datasource/TransferListener#onTransferStart(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)(https://developer.android.com/reference/androidx/media3/datasource/DataSource source, https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec, boolean isNetwork)` Called when a transfer starts. |

## Public methods

### onBytesTransferred

```
abstract void onBytesTransferred(
    DataSource source,
    DataSpec dataSpec,
    boolean isNetwork,
    int bytesTransferred
)
```

Called incrementally during a transfer.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource source` | The source performing the transfer. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data being transferred. |
| `boolean isNetwork` | Whether the data is transferred through a network. |
| `int bytesTransferred` | The number of bytes transferred since the previous call to this method. |

### onTransferEnd

```
abstract void onTransferEnd(DataSource source, DataSpec dataSpec, boolean isNetwork)
```

Called when a transfer ends.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource source` | The source performing the transfer. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data being transferred. |
| `boolean isNetwork` | Whether the data is transferred through a network. |

### onTransferInitializing

```
abstract void onTransferInitializing(
    DataSource source,
    DataSpec dataSpec,
    boolean isNetwork
)
```

Called when a transfer is being initialized.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource source` | The source performing the transfer. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data for which the transfer is initialized. |
| `boolean isNetwork` | Whether the data is transferred through a network. |

### onTransferStart

```
abstract void onTransferStart(DataSource source, DataSpec dataSpec, boolean isNetwork)
```

Called when a transfer starts.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource source` | The source performing the transfer. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSpec dataSpec` | Describes the data being transferred. |
| `boolean isNetwork` | Whether the data is transferred through a network. |