# ProxySelector

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Ctors](https://developer.android.com/reference/java/net/ProxySelector#pubctors)\|[Methods](https://developer.android.com/reference/java/net/ProxySelector#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/java/net/ProxySelector#inhmethods)  

# ProxySelector

`
public


abstract
class
ProxySelector
`  
`

extends `[Object](https://developer.android.com/reference/java/lang/Object)`


``


`

|---|------------------------|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | java.net.ProxySelector |

<br />

*** ** * ** ***

Selects the proxy server to use, if any, when connecting to the network resource referenced by a URL. A proxy selector is a concrete sub-class of this class and is registered by invoking the[setDefault](https://developer.android.com/reference/java/net/ProxySelector#setDefault(java.net.ProxySelector))method. The currently registered proxy selector can be retrieved by calling[getDefault](https://developer.android.com/reference/java/net/ProxySelector#getDefault())method.

When a proxy selector is registered, for instance, a subclass of URLConnection class should call the[select](https://developer.android.com/reference/java/net/ProxySelector#select(java.net.URI))method for each URL request so that the proxy selector can decide if a direct, or proxied connection should be used. The[select](https://developer.android.com/reference/java/net/ProxySelector#select(java.net.URI))method returns an iterator over a collection with the preferred connection approach.

If a connection cannot be established to a proxy (PROXY or SOCKS) servers then the caller should call the proxy selector's[connectFailed](https://developer.android.com/reference/java/net/ProxySelector#connectFailed(java.net.URI,%20java.net.SocketAddress,%20java.io.IOException))method to notify the proxy selector that the proxy server is unavailable.

The default proxy selector does enforce a[set of System Properties](https://developer.android.com/reference/java/net/doc-files/net-properties#Proxies)related to proxy settings.

<br />

## Summary

|                                          ### Public constructors                                           ||
|---------------------------------------------------------------------------------------------------------|---|
| ` `[ProxySelector](https://developer.android.com/reference/java/net/ProxySelector#ProxySelector())`() ` |

|                                                                                                                                                                                                                                                                                                                  ### Public methods                                                                                                                                                                                                                                                                                                                   ||
|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` abstract void`                                                                                                                                | ` `[connectFailed](https://developer.android.com/reference/java/net/ProxySelector#connectFailed(java.net.URI,%20java.net.SocketAddress,%20java.io.IOException))`(`[URI](https://developer.android.com/reference/java/net/URI)` uri, `[SocketAddress](https://developer.android.com/reference/java/net/SocketAddress)` sa, `[IOException](https://developer.android.com/reference/java/io/IOException)` ioe) ` Called to indicate that a connection could not be established to a proxy/socks server. |
| ` static `[ProxySelector](https://developer.android.com/reference/java/net/ProxySelector)                                                       | ` `[getDefault](https://developer.android.com/reference/java/net/ProxySelector#getDefault())`() ` Gets the system-wide proxy selector.                                                                                                                                                                                                                                                                                                                                                               |
| ` abstract `[List](https://developer.android.com/reference/java/util/List)`<`[Proxy](https://developer.android.com/reference/java/net/Proxy)`>` | ` `[select](https://developer.android.com/reference/java/net/ProxySelector#select(java.net.URI))`(`[URI](https://developer.android.com/reference/java/net/URI)` uri) ` Selects all the applicable proxies based on the protocol to access the resource with and a destination address to access the resource at.                                                                                                                                                                                     |
| ` static void`                                                                                                                                  | ` `[setDefault](https://developer.android.com/reference/java/net/ProxySelector#setDefault(java.net.ProxySelector))`(`[ProxySelector](https://developer.android.com/reference/java/net/ProxySelector)` ps) ` Sets (or unsets) the system-wide proxy selector.                                                                                                                                                                                                                                         |

| ### Inherited methods |
|-----------------------|---|
| From class` `[java.lang.Object](https://developer.android.com/reference/java/lang/Object)` ` |--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` `[Object](https://developer.android.com/reference/java/lang/Object)          | ` `[clone](https://developer.android.com/reference/java/lang/Object#clone())`() ` Creates and returns a copy of this object.                                                                                                                                                      | | ` boolean`                                                                     | ` `[equals](https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` obj) ` Indicates whether some other object is "equal to" this one.                                           | | ` void`                                                                        | ` `[finalize](https://developer.android.com/reference/java/lang/Object#finalize())`() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.                                                          | | ` final `[Class](https://developer.android.com/reference/java/lang/Class)`<?>` | ` `[getClass](https://developer.android.com/reference/java/lang/Object#getClass())`() ` Returns the runtime class of this`Object`.                                                                                                                                                | | ` int`                                                                         | ` `[hashCode](https://developer.android.com/reference/java/lang/Object#hashCode())`() ` Returns a hash code value for the object.                                                                                                                                                 | | ` final void`                                                                  | ` `[notify](https://developer.android.com/reference/java/lang/Object#notify())`() ` Wakes up a single thread that is waiting on this object's monitor.                                                                                                                            | | ` final void`                                                                  | ` `[notifyAll](https://developer.android.com/reference/java/lang/Object#notifyAll())`() ` Wakes up all threads that are waiting on this object's monitor.                                                                                                                         | | ` `[String](https://developer.android.com/reference/java/lang/String)          | ` `[toString](https://developer.android.com/reference/java/lang/Object#toString())`() ` Returns a string representation of the object.                                                                                                                                            | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long,%20int))`(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed. | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long))`(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed.                   | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait())`() ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*.                                                                                             | ||

## Public constructors

### ProxySelector

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public ProxySelector ()
```

<br />

<br />

## Public methods

### connectFailed

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public abstract void connectFailed (URI uri, 
                SocketAddress sa, 
                IOException ioe)
```

Called to indicate that a connection could not be established to a proxy/socks server. An implementation of this method can temporarily remove the proxies or reorder the sequence of proxies returned by[select(java.net.URI)](https://developer.android.com/reference/java/net/ProxySelector#select(java.net.URI)), using the address and the IOException caught when trying to connect.

<br />

|                                   Parameters                                   ||
|-------|-------------------------------------------------------------------------|
| `uri` | `URI`: The URI that the proxy at sa failed to serve. <br />             |
| `sa`  | `SocketAddress`: The socket address of the proxy/SOCKS server <br />    |
| `ioe` | `IOException`: The I/O exception thrown when the connect failed. <br /> |

|                                                               Throws                                                               ||
|--------------------------------------------------------------------------------------------------------|----------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if either argument is null |

### getDefault

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static ProxySelector getDefault ()
```

Gets the system-wide proxy selector.

<br />

|                                                        Returns                                                         ||
|---------------------------------------------------------------------------------|---------------------------------------|
| [ProxySelector](https://developer.android.com/reference/java/net/ProxySelector) | the system-wide`ProxySelector` <br /> |

|                                                                                                                        Throws                                                                                                                         ||
|------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) | If a security manager has been installed and it denies[NetPermission](https://developer.android.com/reference/java/net/NetPermission)`("getProxySelector")` |

**See also:**

- [setDefault(ProxySelector)](https://developer.android.com/reference/java/net/ProxySelector#setDefault(java.net.ProxySelector))  

### select

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public abstract List<Proxy> select (URI uri)
```

Selects all the applicable proxies based on the protocol to access the resource with and a destination address to access the resource at. The format of the URI is defined as follow:

- http URI for http connections
- https URI for https connections
- `socket://host:port`  
  for tcp client sockets connections

<br />

<br />

|                          Parameters                           ||
|-------|--------------------------------------------------------|
| `uri` | `URI`: The URI that a connection is required to <br /> |

|                                                                                                                                                                                                                     Returns                                                                                                                                                                                                                     ||
|-------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [List](https://developer.android.com/reference/java/util/List)`<`[Proxy](https://developer.android.com/reference/java/net/Proxy)`>` | a List of Proxies. Each element in the the List is of type[Proxy](https://developer.android.com/reference/java/net/Proxy); when no proxy is available, the list will contain one element of type[Proxy](https://developer.android.com/reference/java/net/Proxy)that represents a direct connection. <br /> |

|                                                             Throws                                                              ||
|--------------------------------------------------------------------------------------------------------|-------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if the argument is null |

### setDefault

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static void setDefault (ProxySelector ps)
```

Sets (or unsets) the system-wide proxy selector. Note: non-standard protocol handlers may ignore this setting.

<br />

|                                         Parameters                                          ||
|------|---------------------------------------------------------------------------------------|
| `ps` | `ProxySelector`: The HTTP proxy selector, or`null`to unset the proxy selector. <br /> |

|                                                                                                                        Throws                                                                                                                         ||
|------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [SecurityException](https://developer.android.com/reference/java/lang/SecurityException) | If a security manager has been installed and it denies[NetPermission](https://developer.android.com/reference/java/net/NetPermission)`("setProxySelector")` |

**See also:**

- [getDefault()](https://developer.android.com/reference/java/net/ProxySelector#getDefault())