# CameraSelector.Builder

Artifact: [androidx.camera:camera-core](https://developer.android.com/jetpack/androidx/releases/camera) [View Source](https://cs.android.com/search?q=file:androidx/camera/core/CameraSelector.java+class:androidx.camera.core.CameraSelector.Builder) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/camera#1.0.0)

*** ** * ** ***


```
class CameraSelector.Builder
```

<br />

*** ** * ** ***

Builder for a `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector`.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#Builder()()` |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#addCameraFilter(androidx.camera.core.CameraFilter)(cameraFilter: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraFilter)` Adds a `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraFilter` to the current set of filters. |
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector` | `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#build()()` Builds the `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector`. |
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#requireLensFacing(int)(lensFacing: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Requires a camera with the specified lens facing. |
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#setPhysicalCameraId(java.lang.String)(physicalCameraId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` Sets the physical camera id. |

## Public constructors

### Builder

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/camera#1.0.0)

```
Builder()
```

## Public functions

### addCameraFilter

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/camera#1.0.0)

```
fun addCameraFilter(cameraFilter: CameraFilter): CameraSelector.Builder
```

Adds a `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraFilter` to the current set of filters. It can be used to select a specific camera based on customized criteria like Camera2 characteristics.

Multiple filters can be added. All filters will be applied by the order they were added when the CameraSelector is used, and the first camera output from the filters will be selected.

| Parameters |
|---|---|
| `cameraFilter: https://developer.android.com/reference/kotlin/androidx/camera/core/CameraFilter` | The `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraFilter` for selecting cameras with. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | This builder. |

### build

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/camera#1.0.0)

```
fun build(): CameraSelector
```

Builds the `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector`.

### requireLensFacing

Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/camera#1.0.0)

```
fun requireLensFacing(lensFacing: Int): CameraSelector.Builder
```

Requires a camera with the specified lens facing.

Valid values for lens facing are `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector#LENS_FACING_FRONT()`, `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector#LENS_FACING_BACK()` and `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector#LENS_FACING_EXTERNAL()`. However, requiring `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector#LENS_FACING_EXTERNAL()` is currently experimental and may produce unexpected behaviors.

If lens facing is already set, this will add extra requirement for lens facing instead of replacing the previous setting.

| Parameters |
|---|---|
| `lensFacing: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The lens facing for selecting cameras with. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | This builder. |

### setPhysicalCameraId

Added in [1.4.0](https://developer.android.com/jetpack/androidx/releases/camera#1.4.0)

```
fun setPhysicalCameraId(physicalCameraId: String): CameraSelector.Builder
```

Sets the physical camera id.

A logical camera is a grouping of two or more of those physical cameras. See [Multi-camera API](https://developer.android.com/media/camera/camera2/multi-camera)

If we want to open one physical camera, for example ultra wide, we just need to set physical camera id in CameraSelector and bind to lifecycle. All CameraX features will work normally when only a single physical camera is used.

If we want to open multiple physical cameras, we need to have multiple `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector`s and set physical camera id on each, then bind to lifecycle with the `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector`s. Internally each physical camera id will be set on `https://developer.android.com/reference/kotlin/androidx/camera/core/UseCase`, for example, `https://developer.android.com/reference/kotlin/androidx/camera/core/Preview` and call `https://developer.android.com/reference/android/hardware/camera2/params/OutputConfiguration.html#setPhysicalCameraId(java.lang.String)`.

Currently only two physical cameras for the same logical camera id are allowed and the device needs to support physical cameras by checking `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraInfo#isLogicalMultiCameraSupported()`. In addition, there is no guarantee or API to query whether the device supports multiple physical camera opening or not. Internally the library checks `https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#isSessionConfigurationSupported(android.hardware.camera2.params.SessionConfiguration)`, if the device does not support the multiple physical camera configuration, `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` will be thrown when binding to lifecycle.

Setting both a physical camera ID via `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#setPhysicalCameraId(java.lang.String)` and a lens category via `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#setLensCategory(int)` on the same builder will cause `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder#build()` to throw an `https://developer.android.com/reference/java/lang/IllegalArgumentException.html`.

| Parameters |
|---|---|
| `physicalCameraId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | Physical camera id. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/camera/core/CameraSelector.Builder` | this builder. |