总结以下官员
documentation
使用保护服务
BIND_VPN_SERVICE
权限so t
只有系统才能绑定到您的服务
.
使用“android.net.VpnService”发布服务广告
intent过滤器,以便系统可以找到您的服务。
中声明服务的示例
manifest
<service android:name=".MyVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
</service>
2.准备并连接服务
要准备应用程序成为用户当前的VPN服务,请致电
VpnService.prepare()
.
如果使用该设备的人尚未授予您应用程序的权限,该方法将返回活动意图。您使用此意图来启动请求权限的系统活动。
系统显示一个与其他权限对话框类似的对话框
,如摄像头或联系人访问。如果您的应用程序已经准备好,该方法将返回
null
.
关于连接步骤,我建议您仔细阅读此文档
section
,这样您将能够完全理解服务。
3.启动服务
您的VPN服务可以通过以下方式启动:
1.您的应用程序正常启动服务,因为有人点击了连接按钮。
2.系统启动服务,因为始终开启VPN。
系统通过调用onStartCommand()在后台启动服务。
然而,Android对8.0版(API 26级)或更高版本的后台应用程序进行了限制。如果您支持这些API级别,则需要通过调用service.startForeground()将服务转换到前台
4.停止服务
关于停止步骤,请遵循以下步骤
section
仔细阅读,了解服务如何以及何时停止/停止。
始终打开
实现“始终开启”功能的步骤与上述步骤相距不远。使用此
section
要了解更多信息,您也可以使用此
project
来帮助你。该项目是用Java而不是Kotlin编写的,但它可以帮助您了解如何在应用程序中实现它。
编辑
要实现“始终开启”功能,您可以使用
project
从…起
github!它完全是Kotlin的,最后一次更新是在1小时前(撰写本文时)。你可以找到
ForegroundService.kt
here
和
显示
here
.