代码之家  ›  专栏  ›  技术社区  ›  Navid Shokoufeh

打开“始终打开vpn”功能安卓

  •  0
  • Navid Shokoufeh  · 技术社区  · 2 年前

    我想知道是否有人能帮我做这件事。 我想在kotlin中以编程方式打开“始终打开vpn”功能。 如果有人能提供一些代码或解释实现过程,我将不胜感激。

    我还有一个问题,用这种方式实现vpn kill switch合适吗?

    0 回复  |  直到 2 年前
        1
  •  2
  •   ItzDavi    2 年前

    总结以下官员 documentation

    1.使用创建VPN服务 VpnService

    使用保护服务 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 .