# TransferListener

# 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)

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/androidx/media3/datasource/TransferListener "View this page in Java")

<br />

```
@UnstableApi
interface TransferListener
```

<br />

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

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [DataSourceContractTest.FakeTransferListener](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/DataSourceContractTest.FakeTransferListener) | A[TransferListener](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener)that only keeps track of the transferred bytes.                            |
| [DefaultBandwidthMeter](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/DefaultBandwidthMeter)                                     | Estimates bandwidth by listening to data transfers.                                                                                                                                       |
| [ExperimentalBandwidthMeter](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/experimental/ExperimentalBandwidthMeter)              | An experimental[BandwidthMeter](https://developer.android.com/reference/kotlin/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).[onTransferInitializing](https://developer.android.com/reference/kotlin/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.[onTransferStart](https://developer.android.com/reference/kotlin/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.[onBytesTransferred](https://developer.android.com/reference/kotlin/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.[onTransferEnd](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean))is called. Note that each[onTransferStart](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferStart(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean))will have exactly one corresponding call to[onTransferEnd](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean)).

## Summary

|                             ### Public functions                              |
|-------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html) | [onBytesTransferred](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onBytesTransferred(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean,int))`(` ` source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!,` ` dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!,` ` isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)`,` ` bytesTransferred: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) `)` Called incrementally during a transfer. |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html) | [onTransferEnd](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferEnd(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean))`(source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!, dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!, isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)`)` Called when a transfer ends.                                                                                                                                         |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html) | [onTransferInitializing](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferInitializing(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean))`(` ` source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!,` ` dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!,` ` isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) `)` Called when a transfer is being initialized.                                                                                            |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html) | [onTransferStart](https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener#onTransferStart(androidx.media3.datasource.DataSource,androidx.media3.datasource.DataSpec,boolean))`(source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!, dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!, isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)`)` Called when a transfer starts.                                                                                                                                   |

## Public functions

### onBytesTransferred

```
fun onBytesTransferred(
    source: DataSource!,
    dataSpec: DataSpec!,
    isNetwork: Boolean,
    bytesTransferred: Int
): Unit
```

Called incrementally during a transfer.  

|                                                   Parameters                                                    |
|-----------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| `source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!` | The source performing the transfer.                                     |
| `dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!`   | Describes the data being transferred.                                   |
| `isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                | Whether the data is transferred through a network.                      |
| `bytesTransferred: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)                 | The number of bytes transferred since the previous call to this method. |

### onTransferEnd

```
fun onTransferEnd(source: DataSource!, dataSpec: DataSpec!, isNetwork: Boolean): Unit
```

Called when a transfer ends.  

|                                                   Parameters                                                    |
|-----------------------------------------------------------------------------------------------------------------|----------------------------------------------------|
| `source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!` | The source performing the transfer.                |
| `dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!`   | Describes the data being transferred.              |
| `isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                | Whether the data is transferred through a network. |

### onTransferInitializing

```
fun onTransferInitializing(
    source: DataSource!,
    dataSpec: DataSpec!,
    isNetwork: Boolean
): Unit
```

Called when a transfer is being initialized.  

|                                                   Parameters                                                    |
|-----------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
| `source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!` | The source performing the transfer.                       |
| `dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!`   | Describes the data for which the transfer is initialized. |
| `isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                | Whether the data is transferred through a network.        |

### onTransferStart

```
fun onTransferStart(source: DataSource!, dataSpec: DataSpec!, isNetwork: Boolean): Unit
```

Called when a transfer starts.  

|                                                   Parameters                                                    |
|-----------------------------------------------------------------------------------------------------------------|----------------------------------------------------|
| `source: `[DataSource](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSource)`!` | The source performing the transfer.                |
| `dataSpec: `[DataSpec](https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSpec)`!`   | Describes the data being transferred.              |
| `isNetwork: `[Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)                | Whether the data is transferred through a network. |