我想知道是否有人可以帮助我。我想在Kotlin中以编程方式打开“Always-on vpn”功能。我很感激如果有人可以提供一些代码或解释实现它的过程。另外,我有一个问题,它是适当的,以这种方式实现VPN杀死开关或没有?
huwehgph1#
以下是官方documentation
VpnService
使用BIND_VPN_SERVICE权限保护服务,以便只有系统可以绑定到您的服务**。
BIND_VPN_SERVICE
**使用“android.net.VpnService”**Intent过滤器验证服务,以便系统可以找到您的服务。
在manifest中声明服务的示例
manifest
<service android:name=".MyVpnService" android:permission="android.permission.BIND_VPN_SERVICE"> <intent-filter> <action android:name="android.net.VpnService"/> </intent-filter> </service>
字符串
要准备应用成为用户当前的VPN服务,请调用VpnService.prepare()。如果使用设备的人员尚未授予您的应用权限,则该方法将返回Activity Intent。您可以使用此Intent启动请求权限的系统Activity。
系统会显示一个类似于其他权限对话框的对话框,例如摄像头或联系人访问。如果您的应用已经准备好,则该方法返回null。
null
对于连接步骤,我建议您仔细阅读本文档部分,以便您能够完全理解该服务。
您的VPN服务可以通过以下方式启动:1.你的应用程序启动了这项服务通常是因为有人点击了连接按钮。2.系统启动服务,因为始终在线VPN已打开。系统通过调用onStartCommand()在后台启动服务。
不过,Android对8.0(API Level 26)以上版本的后台应用有限制,如果您支持这些API Level,则需要通过调用Service.startForeground()将服务过渡到前台
有关停止步骤,请按照本节阅读仔细了解如何以及何时必须停止/停止服务。
实现Always-on功能的步骤与上面的步骤并不遥远。使用本节了解更多信息,您也可以使用此project来帮助您。该项目是在Java中,而不是Kotlin,但它可以帮助给予您如何在应用中实现它的一般想法。
要实现Always-on功能,您可以使用来自Github的project!它完全是Kotlin,最后一次更新是1小时前(在撰写本文时)。您可以找到ForegroundService.kthere和manifesthere。
ForegroundService.kt
1条答案
按热度按时间huwehgph1#
以下是官方documentation
1.使用
VpnService
创建VPN服务使用
BIND_VPN_SERVICE
权限保护服务,以便只有系统可以绑定到您的服务**。**使用“android.net.VpnService”**Intent过滤器验证服务,以便系统可以找到您的服务。
在
manifest
中声明服务的示例字符串
2.准备并连接服务
要准备应用成为用户当前的VPN服务,请调用VpnService.prepare()。
如果使用设备的人员尚未授予您的应用权限,则该方法将返回Activity Intent。您可以使用此Intent启动请求权限的系统Activity。
系统会显示一个类似于其他权限对话框的对话框,例如摄像头或联系人访问。如果您的应用已经准备好,则该方法返回
null
。对于连接步骤,我建议您仔细阅读本文档部分,以便您能够完全理解该服务。
3.启动服务
您的VPN服务可以通过以下方式启动:
1.你的应用程序启动了这项服务通常是因为有人点击了连接按钮。
2.系统启动服务,因为始终在线VPN已打开。
系统通过调用onStartCommand()在后台启动服务。
不过,Android对8.0(API Level 26)以上版本的后台应用有限制,如果您支持这些API Level,则需要通过调用Service.startForeground()将服务过渡到前台
4.停止服务
有关停止步骤,请按照本节阅读仔细了解如何以及何时必须停止/停止服务。
永不关机
实现Always-on功能的步骤与上面的步骤并不遥远。使用本节了解更多信息,您也可以使用此project来帮助您。该项目是在Java中,而不是Kotlin,但它可以帮助给予您如何在应用中实现它的一般想法。
要实现Always-on功能,您可以使用来自Github的project!它完全是Kotlin,最后一次更新是1小时前(在撰写本文时)。您可以找到
ForegroundService.kt
here和manifest
here。