安卓手机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的服务。为了了解更多的内容,看服务生命

周期部分。

相关推荐
黑码哥11 分钟前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
Once_day11 分钟前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
亓才孓23 分钟前
[JDBC]元数据
android
喜欢喝果茶.30 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓31 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)31 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
独行soc34 分钟前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能42 分钟前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿43 分钟前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市
island13141 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络