安卓手机APP开发__网络连接性支持VPN

安卓手机APP开发__网络连接性支持VPN

安卓提供了API给开发者,来创建一个虚拟的私有网络(VPN)的解决方案.

根据这里的介绍,你能知道如何开发和测试你的针对安卓设备的VPN的客户端.

概述

VPN允许设备为了安全地连接网络,而没有物理性的连接在一个网络上.

安卓包括了一个内嵌的(PPTP 和 L2TP/IPSec)VPN客户端,它有时也叫

legacy VPN. 安卓4.0(API级别是14)引入了API,让APP的开发者能够提供

他们自己的VPN解决方案.你打包你的VPN解决方案进入你的APP。开发者

通常构建一个VPN的APP,是因为如下理由之一:

提供内嵌的客户端不支持的VPN协议

帮助用户更容易地连接到VPN服务。

接下来解释如何开发VPN的APP,不包括内嵌的VPN客户端。

用户体验

安卓提供了一个用户界面,帮助用户配置和开启和停止你的VPN解决方案。系统的用户界面

也让人能够使用设备连接一个活跃的VPN连接。安卓显示了VPN连接的如下的用户组件:

在一个VPN的APP首次激活之前,系统显示了一个连接请求对话框。对话框提示

用户使用设备时确认他们信任VPN并且接受请求。

VPN的设置屏幕(设置〉网络&互联网〉VPN)显示了用户接受的连接请求的是哪一个

VPN的APP。这里有一个按钮是配置系统选项或者是忘记VPN。

当一个连接是活跃的时候,快速配置显示了一个信息面板。触摸标签,显示一个对话框

有更多的信息和对一个链接的设置.

在状态栏包括了一个VPN的图标,来显示一个活跃的连接。

你的APP也需要提供一个用户界面,让用户使用设备来配置你的服务的选项。

例如,你的解决方案,可能需要捕捉帐户的授权设置。APP应该显示如下的用户界面:

控制手动地开启和停止一个连接。当需要的时候,总是在线的VPN能够连接.

但是,在用户第一次使用VPN时,允许用户配置连接.

当服务活跃的时候,有一个非打扰的通知。通知能显示连接状态或者是提供网络统计信息

的更多的内容。触摸通知,让你的APP来到前台。当服务变成不活跃时,移除通知。

VPN服务

你的APP为了一个用户连接系统网络到一个VPN的网关。每个用户能运行一个不同的VPN的

APP。你创建一个VPN服务,系统使用这个服务来启动和停止你的VPN,并且跟踪连接的状态

你的VPN服务是从VpnService继承下来的。

服务作为你的VPN的网络连接的容器和它们的本地的设备的接口。你的服务的实例

调用了VpnService.Builder方法来建立一个新的本地接口。

你的APP把如下的数据从连接的设备传到VPN的网关:

从本地的接口读取要转出的IP的数据包,加密它们,把它们发送给VPN网关。

从本的的接口写入要进入的数据包(从VPN网关接收并且解密)

重要的提示信息:当和VPN的网关进行交换数据包时,你的APP必须使用强加密手段

对于一个用户而言仅有一个活跃的服务。开始一个新的服务,自动地停止原有的服务。

添加一个服务

为了在你的APP中添加一个VPN服务,创建一个安卓服务,它是继承于VpnService。

在你的配置文件中声明一个VPN服务。内容如下:

使用BIND_VPN_SERVICE权限来保护服务,这样仅有系统能绑定到你的服务。

使用"android.net.VpnService"过滤器来广播你的服务,让系统能找到你的服务。

这个例子显示了你能在一个配置文件中,如何声明一个服务:

XML 复制代码
<service android:name=".MyVpnService"
         android:permission="android.permission.BIND_VPN_SERVICE">
     <intent-filter>
         <action android:name="android.net.VpnService"/>
     </intent-filter>
</service>

现在,你的APP声明了一个服务,系统能自动地根据需要启动和停止你的APP的VPN的服务。

例如,当运行着总是在线的VPN时,系统控制着你的服务。

准备一个服务

为了准备APP变成用户的当前的VPN服务,调用VpnService.prepare()。

如果用户使用设备没有对你的APP授予权限,这个方法返回一个活动的凭证,

你能使用这个凭证来开启一个系统的活动,这个活动来向用户请求权限。

系统显示一个对话框,这与其它的权限对话框是类似的,例如,照相机或者

通讯录读取。如果你的APP已经准备好了,方法就返回一个空值。

仅有一个APP能成为当前已经准备好的VPN服务。总是要调用VpnService.prepare()方法,

因为一个用户可能设置一个不同的APP作为VPN的服务。为了了解更多的内容,看服务生命

周期部分。

相关推荐
似霰4 分钟前
高通平台Display显示架构
android
极客先躯22 分钟前
中级java每日一道面试题-2024年7月3日
java·开发语言·java每日一道面试题
Song23 分钟前
C++:求梯形面积
开发语言·c++
如影随从1 小时前
04-ArcGIS For JavaScript的可视域分析功能
开发语言·javascript·arcgis·可视域分析
XiaoCCCcCCccCcccC1 小时前
C语言实现双向链表
c语言·开发语言·链表
十年一梦实验室1 小时前
【C++】相机标定源码笔记- RGB 相机与 ToF 深度传感器校准类
开发语言·c++·笔记·数码相机·计算机视觉
Tech Synapse1 小时前
Java循环创建对象内存溢出怎么解决
java·开发语言·jvm
蜉蝣之翼❉1 小时前
c++ 简单线程池
开发语言·c++
WHYBIGDATA1 小时前
Scala中高级的函数编程
开发语言·后端·scala