Tim*_*rry 1 vpn android network-programming
我有一个 Android VPN 应用程序。当我触发启动 VPN 的意图(通过VPNService.prepare)时,如果设备上已配置始终在线的 VPN,它会立即失败。这看起来很合理,但我希望能够轻松检测到这种情况,这样我就可以向用户显示有用的消息。
我所说的“始终在线”是指特定的 VPN 始终在线 Android VPN 标志: https: //developer.android.com/guide/topics/connectivity/vpn#always-on
我似乎无法找到一种方法来访问该信息,即使它在 Android 内部使用(例如,这里,但getAlwaysOnVpnPackage
似乎没有公开 AFAICT)。
我见过的最好的选择是检查 Android 中的 VPN 连接是否处于活动状态?,它会告诉您当前是否有任何 VPN 连接处于活动状态,但这还不够,因为:
有什么方法可以检查设备当前是否将 VPN 配置为“始终开启”?
小智 5
你可以使用这个方法
private fun isVpnAlwaysOn(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
val alwaysOn = Settings.Secure.getString(contentResolver, "always_on_vpn_app")
return !alwaysOn.isNullOrEmpty()
} else false
}
Run Code Online (Sandbox Code Playgroud)
“alwaysOn”包含配置了always-on的应用程序的包名称。