# ProjectedDeviceController

Artifact: [androidx.xr.projected:projected](https://developer.android.com/jetpack/androidx/releases/xr-projected) [View Source](https://cs.android.com/search?q=file:androidx/xr/projected/ProjectedDeviceController.kt+class:androidx.xr.projected.ProjectedDeviceController) Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

*** ** * ** ***


```
@ExperimentalProjectedApi
public final class ProjectedDeviceController implements AutoCloseable
```

<br />

*** ** * ** ***

Controller for the Projected device.

Use `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#create(android.content.Context)` to create an instance of this class. Call `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#close()` when finished with this instance to release resources.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController.Capability` Represents an intrinsic piece of functionality of a Projected device, i.e., what it is capable of. |

| ### Public methods |
|---|---|
| `final void` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#addBatteryStateChangedListener(kotlin.coroutines.CoroutineContext,kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.coroutines/-coroutine-context/index.html context, @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/BatteryState, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> listener )` Adds a listener for battery state changes. |
| `void` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#close()()` Releases resources, unregistering any active listeners. |
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController` | `@https://developer.android.com/reference/androidx/annotation/RequiresApi(value = 34) https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#create(android.content.Context)(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html context)` Connects to the service providing features for Projected devices and returns the `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController` when the connection is established. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/List.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/media/AudioDeviceInfo.html>` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#getAudioDevices()()` Returns the list of `https://developer.android.com/reference/android/media/AudioDeviceInfo.html` objects associated with the projected device. |
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController.Capability>` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#getCapabilities()()` The capabilities of the Projected device. |
| `final void` | `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#removeBatteryStateChangedListener(kotlin.Function1)( @https://developer.android.com/reference/androidx/annotation/NonNull Function1<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/xr/projected/BatteryState, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html> listener )` Removes a previously added listener. |

## Public methods

### addBatteryStateChangedListener

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
public final void addBatteryStateChangedListener(
    @NonNull CoroutineContext context,
    @NonNull Function1<@NonNull BatteryState, Unit> listener
)
```

Adds a listener for battery state changes.

The `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#addBatteryStateChangedListener(kotlin.coroutines.CoroutineContext,kotlin.Function1)` lambda will be executed in a new coroutine launched within the provided `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#addBatteryStateChangedListener(kotlin.coroutines.CoroutineContext,kotlin.Function1)`. The listener will be automatically unregistered when the `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#addBatteryStateChangedListener(kotlin.coroutines.CoroutineContext,kotlin.Function1)`'s `https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-job/index.html` is canceled.

### close

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
public void close()
```

Releases resources, unregistering any active listeners. This instance should not be used after calling close.

### create

```
@RequiresApi(value = 34)
public static final @NonNull ProjectedDeviceController create(@NonNull Context context)
```

Connects to the service providing features for Projected devices and returns the `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController` when the connection is established. The caller is responsible for calling `https://developer.android.com/reference/androidx/xr/projected/ProjectedDeviceController#close()` on the returned instance when it's no longer needed to release all internal resources.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/android/content/Context.html context` | The context to use for binding to the service. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | if the projected service is not found or binding is not permitted |

### getAudioDevices

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
public final @NonNull List<@NonNull AudioDeviceInfo> getAudioDevices()
```

Returns the list of `https://developer.android.com/reference/android/media/AudioDeviceInfo.html` objects associated with the projected device.

### getCapabilities

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
public final @NonNull Set<@NonNull ProjectedDeviceController.Capability> getCapabilities()
```

The capabilities of the Projected device.

These capabilities represent intrinsic functionality of the device that will not change over the lifetime of the device, for example, whether the device is capable of showing a visual user interface at all, regardless of whether the screen is currently on or off.

### removeBatteryStateChangedListener

Added in [1.0.0-alpha14](https://developer.android.com/jetpack/androidx/releases/xr-projected#1.0.0-alpha14)

```
public final void removeBatteryStateChangedListener(
    @NonNull Function1<@NonNull BatteryState, Unit> listener
)
```

Removes a previously added listener. Note: Listeners are also automatically removed when their associated CoroutineScope is canceled.