# GCKDeviceScanner Class

[Instance Methods](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#pub-methods) \| [Properties](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#properties) GCKDeviceScanner Class Reference

## Overview

A class that asynchronously scans for available devices and sends corresponding notifications to its listener(s).

This class is implicitly a singleton; since it does a network scan, it isn't useful to have more than one instance of it in use.

**[Deprecated:](https://developers.google.com/cast/v3/reference/ios/deprecated#_deprecated000012)**
:   Use [GCKDiscoveryManager](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_discovery_manager "A class that manages the device discovery process. ") to discover Cast receivers.

Inherits NSObject.

|---|---|
| ## Instance Method Summary ||
| (instancetype) | - [init](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a9c99143f724d45d320df252b237c0c47) |
|   | Constructs a new [GCKDeviceScanner](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner "A class that asynchronously scans for available devices and sends corresponding notifications to its ..."). [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a9c99143f724d45d320df252b237c0c47) |
|   ||
| (instancetype) | - [initWithFilterCriteria:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a3b2954f09caaf2823ae663f0a06deaed) |
|   | Designated initializer. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a3b2954f09caaf2823ae663f0a06deaed) |
|   ||
| (void) | - [startScan](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#ab5f648510ad897e241f5c7d8d61b0fda) |
|   | Starts a new device scan. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#ab5f648510ad897e241f5c7d8d61b0fda) |
|   ||
| (void) | - [stopScan](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a5592f3759cf795e9db8e737aff75acf0) |
|   | Stops any in-progress device scan. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a5592f3759cf795e9db8e737aff75acf0) |
|   ||
| (void) | - [addListener:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a648811bc5ac7200ddce5d4437ddb08e1) |
|   | Adds a listener for receiving notifications. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a648811bc5ac7200ddce5d4437ddb08e1) |
|   ||
| (void) | - [removeListener:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a212f53ce908ff04ff21a24b1ad08fcd6) |
|   | Removes a listener that was previously added with [addListener:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a648811bc5ac7200ddce5d4437ddb08e1). [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a212f53ce908ff04ff21a24b1ad08fcd6) |
|   ||

|---|---|
| ## Property Summary ||
| NSArray \* | [devices](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#aaa4812c78ce52b6a7adc6f46a97bb3b2) |
|   | The array of discovered devices. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#aaa4812c78ce52b6a7adc6f46a97bb3b2) |
|   ||
| BOOL | [hasDiscoveredDevices](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a1a9fffd277a1cedef669fe14172f103e) |
|   | Whether the current/latest scan has discovered any devices. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a1a9fffd277a1cedef669fe14172f103e) |
|   ||
| BOOL | [scanning](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a0c3a7d7c387d505e49f88b58f1078290) |
|   | Whether a scan is currently in progress. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a0c3a7d7c387d505e49f88b58f1078290) |
|   ||
| [GCKFilterCriteria](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_filter_criteria) \* | [filterCriteria](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a91acaa83592bde9e52c2138d0195b84b) |
|   | The current filtering criteria. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a91acaa83592bde9e52c2138d0195b84b) |
|   ||
| BOOL | [passiveScan](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#aa9e04b47e3d5ef62126ed83970ff75b8) |
|   | Whether the scan should be a passive scan. [More...](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#aa9e04b47e3d5ef62126ed83970ff75b8) |
|   ||

## Method Detail

|---|---|---|---|
| - (instancetype) init |   |   |   |

Constructs a new [GCKDeviceScanner](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner "A class that asynchronously scans for available devices and sends corresponding notifications to its ...").

**[Deprecated:](https://developers.google.com/cast/v3/reference/ios/deprecated#_deprecated000014)**
:   Use [initWithFilterCriteria:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a3b2954f09caaf2823ae663f0a06deaed) instead; do not use without a criteria.

|---|---|---|---|---|
| - (instancetype) initWithFilterCriteria: |   | ([GCKFilterCriteria](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_filter_criteria) \*__nullable) | *filterCriteria* |   |

Designated initializer.

Constructs a new [GCKDeviceScanner](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner "A class that asynchronously scans for available devices and sends corresponding notifications to its ...") with the given filter criteria.

Parameters
:

    |---|---|
    | filterCriteria | The filter criteria. May not be `nil`. |


|---|---|---|---|
| - (void) startScan |   |   |   |

Starts a new device scan.

The scan must eventually be stopped by calling [stopScan](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a5592f3759cf795e9db8e737aff75acf0).

|---|---|---|---|
| - (void) stopScan |   |   |   |

Stops any in-progress device scan.

This method **must** be called at some point after [startScan](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#ab5f648510ad897e241f5c7d8d61b0fda) was called and before this object is released by its owner.

|---|---|---|---|---|
| - (void) addListener: |   | (id\< [GCKDeviceScannerListener](https://developers.google.com/cast/v3/reference/ios/protocol_g_c_k_device_scanner_listener-p) \>) | *listener* |   |

Adds a listener for receiving notifications.

Parameters
:

    |---|---|
    | listener | The listener to add. |


|---|---|---|---|---|
| - (void) removeListener: |   | (id\< [GCKDeviceScannerListener](https://developers.google.com/cast/v3/reference/ios/protocol_g_c_k_device_scanner_listener-p) \>) | *listener* |   |

Removes a listener that was previously added with [addListener:](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_device_scanner#a648811bc5ac7200ddce5d4437ddb08e1).

Parameters
:

    |---|---|
    | listener | The listener to remove. |


## Property Detail

|---|---|
| |---| | - (NSArray\*) devices | | readnonatomiccopy |

The array of discovered devices.

|---|---|
| |---| | - (BOOL) hasDiscoveredDevices | | readnonatomicassign |

Whether the current/latest scan has discovered any devices.

|---|---|
| |---| | - (BOOL) scanning | | readnonatomicassign |

Whether a scan is currently in progress.

|---|---|
| |---| | - ([GCKFilterCriteria](https://developers.google.com/cast/v3/reference/ios/interface_g_c_k_filter_criteria)\*) filterCriteria | | readwritenonatomiccopy |

The current filtering criteria.

|---|---|
| |---| | - (BOOL) passiveScan | | readwritenonatomicassign |

Whether the scan should be a passive scan.

A passive scan sends discovery queries less frequently, so it is more efficient, but the results will not be as fresh. It's appropriate to do a passive scan when the user is not actively selecting a Cast target.