public class VpnService.Builder
extends Object
java.lang.Object | |
↳ | android.net.VpnService.Builder |
Helper类创建一个VPN接口。 这个类应该始终在外层VpnService
的范围内使用。
也可以看看:
Public constructors |
|
---|---|
VpnService.Builder() |
Inherited methods |
|
---|---|
From class java.lang.Object
|
VpnService.Builder addAddress (InetAddress address, int prefixLength)
添加一个网络地址到VPN接口。 IPv4和IPv6地址都受支持。 在致电establish()
之前,必须至少设置一个地址。 隐式添加地址允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
InetAddress
|
prefixLength |
int
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the address is invalid. |
VpnService.Builder addAddress (String address, int prefixLength)
使用数字地址字符串将VPN网络地址添加到VPN接口的便捷方法。 有关数字地址格式的定义,请参阅InetAddress
。 隐式添加地址允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
String
|
prefixLength |
int
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the address is invalid. |
也可以看看:
VpnService.Builder addAllowedApplication (String packageName)
添加允许访问VPN连接的应用程序。 如果此方法至少调用一次,则只允许通过此方法添加的应用程序(并且不允许其他人)访问。 否则(如果此方法从未被调用),所有应用程序默认都是允许的。 如果添加了一些应用程序,其他未添加的应用程序将使用网络,就好像VPN未运行一样。 A VpnService.Builder
可能只有一组允许的应用程序或一组不允许的应用程序,但不能同时使用两者。 在调用addDisallowedApplication(String)
之后调用此方法,反之亦然,将抛出UnsupportedOperationException
。 packageName
必须是当前安装的应用程序的规范名称。 如果没有这样的应用程序,则会引发PackageManager.NameNotFoundException
。
Parameters | |
---|---|
packageName |
String : The full name (e.g.: "com.google.apps.contacts") of an application. |
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining method calls. |
Throws | |
---|---|
|
If the application isn't installed. |
PackageManager.NameNotFoundException |
VpnService.Builder addDisallowedApplication (String packageName)
添加拒绝访问VPN连接的应用程序。 默认情况下,除了通过此方法拒绝的应用程序之外,所有应用程序均被允许访问。 拒绝的应用程序将使用网络,就好像VPN没有运行一样。 A VpnService.Builder
可能只有一组允许的应用程序或一组不允许的应用程序,但不能同时使用两者。 在调用addAllowedApplication(String)
之后调用此方法(反之亦然)将抛出UnsupportedOperationException
。 packageName
必须是当前安装的应用程序的规范名称。 如果没有这样的应用程序,则会引发PackageManager.NameNotFoundException
。
Parameters | |
---|---|
packageName |
String : The full name (e.g.: "com.google.apps.contacts") of an application. |
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining method calls. |
Throws | |
---|---|
|
If the application isn't installed. |
PackageManager.NameNotFoundException |
VpnService.Builder addDnsServer (String address)
使用数字地址字符串将DNS服务器添加到VPN连接的便捷方法。 有关数字地址格式的定义,请参见InetAddress
。 隐式添加服务器允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
String
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the address is invalid. |
也可以看看:
VpnService.Builder addDnsServer (InetAddress address)
将VPN服务器添加到VPN连接。 IPv4和IPv6地址都受支持。 如果没有设置,则将使用默认网络的DNS服务器。 隐式添加服务器允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
InetAddress
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the address is invalid. |
VpnService.Builder addRoute (InetAddress address, int prefixLength)
添加到VPN接口的网络路由。 支持IPv4和IPv6路由。 隐式添加路由允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
InetAddress
|
prefixLength |
int
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the route is invalid. |
VpnService.Builder addRoute (String address, int prefixLength)
使用数字地址字符串将网络路由添加到VPN接口的便捷方法。 有关数字地址格式的定义,请参见InetAddress
。 隐式添加路由允许来自该地址系列(即IPv4或IPv6)的流量通过VPN路由。 @see #allowFamily
Parameters | |
---|---|
address |
String
|
prefixLength |
int
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the route is invalid. |
也可以看看:
VpnService.Builder addSearchDomain (String domain)
将搜索域添加到DNS解析器。
Parameters | |
---|---|
domain |
String
|
Returns | |
---|---|
VpnService.Builder |
VpnService.Builder allowBypass ()
允许所有应用程序跳过此VPN连接。 默认情况下,所有来自应用的流量都通过VPN接口转发,应用无法旁路VPN。 如果调用此方法,应用程序可能会使用诸如bindProcessToNetwork(Network)
方法直接通过底层网络或任何其他有权访问的网络发送/接收数据。
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining of method calls. |
VpnService.Builder allowFamily (int family)
允许来自指定地址系列的流量。 默认情况下,如果没有将特定系列(IPv4或IPv6)的地址,路由或DNS服务器添加到此VPN,则该系列的所有传出通信都会被阻止。 如果添加了任何地址,路由或DNS服务器,则允许该系列。 即使不添加该系列的地址,路由或DNS服务器,该方法也可以解除地址系列的阻塞。 如果支持,那么该家庭的流量通常会落入底层网络。 family
必须是AF_INET
(对于IPv4)或AF_INET6
(对于IPv6)。 如果它不是,则抛出IllegalArgumentException
。
Parameters | |
---|---|
family |
int : The address family (AF_INET or AF_INET6 ) to allow. |
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining of method calls. |
ParcelFileDescriptor establish ()
使用提供给此构建器的参数创建VPN接口。 该接口用于IP数据包,并返回一个文件描述符供应用程序访问它们。 每次读取都会检索一个传出的数据包,并将其发送到接口。 每次写入都会像接收到的接口一样注入传入的数据包。 文件描述符默认处于非阻塞模式,以避免阻塞Java线程。 要在本机空间中完全使用文件描述符,请参阅detachFd()
。 当VPN连接终止时,应用程序必须关闭文件描述符。 VPN接口将被删除,系统将自动恢复网络。
为了避免冲突,同时只能有一个活动的VPN接口。 通常,在VPN连接的生命周期中,网络参数永远不会更改。 应用程序在关闭之前创建新的文件描述符也很常见。 但是,在执行无缝切换时有两个接口很少但并非不可能。 在这种情况下,当新的界面成功创建时,旧界面将被停用。 两个文件描述符都是有效的,但现在传出的数据包将被路由到新的接口。 因此,在耗尽旧的文件描述符后,应用程序必须关闭它并开始使用新的文件描述符。 如果无法创建新接口,则现有接口及其文件描述符将保持不变。
如果因任何原因无法创建接口,则会引发异常。 但是,如果应用程序未准备好或被吊销,此方法将返回null
。 这有助于解决其他VPN应用程序之间可能的竞争状况
Returns | |
---|---|
ParcelFileDescriptor |
ParcelFileDescriptor of the VPN interface, or null if the application is not prepared. |
Throws | |
---|---|
IllegalArgumentException |
if a parameter is not accepted by the operating system. |
IllegalStateException |
if a parameter cannot be applied by the operating system. |
SecurityException |
if the service is not properly declared in AndroidManifest.xml . |
也可以看看:
VpnService.Builder setBlocking (boolean blocking)
将VPN接口的文件描述符设置为阻塞/非阻塞模式。 默认情况下,由establish()
返回的establish()
是非阻塞的。
Parameters | |
---|---|
blocking |
boolean : True to put the descriptor into blocking mode; false for non-blocking. |
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining method calls. |
VpnService.Builder setConfigureIntent (PendingIntent intent)
将PendingIntent
设置为用户配置VPN连接的活动。 如果未设置,则配置按钮将不会显示在系统管理对话框中。
Parameters | |
---|---|
intent |
PendingIntent
|
Returns | |
---|---|
VpnService.Builder |
VpnService.Builder setMtu (int mtu)
设置VPN接口的最大传输单元(MTU)。 如果未设置,则将使用操作系统中的默认值。
Parameters | |
---|---|
mtu |
int
|
Returns | |
---|---|
VpnService.Builder |
Throws | |
---|---|
IllegalArgumentException |
if the value is not positive. |
VpnService.Builder setSession (String session)
设置此会话的名称。 它将显示在系统管理的对话框和通知中。 这是建议不要求的。
Parameters | |
---|---|
session |
String
|
Returns | |
---|---|
VpnService.Builder |
VpnService.Builder setUnderlyingNetworks (Network[] networks)
设置VPN为其上游连接使用的底层网络。
Parameters | |
---|---|
networks |
Network : An array of networks the VPN uses to tunnel traffic to/from its servers. |
Returns | |
---|---|
VpnService.Builder |
this VpnService.Builder object to facilitate chaining method calls. |