如何解决始终在线的 VPN 以编程方式打开 android
永远在线的 VPN 开关能否以编程方式打开?
我已经添加了设备管理员权限。之后,我设置了始终与设备管理员一起使用
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this,DeviceAdminReceiver.class);
isAdminApp = mDPM.isAdminActive(mDeviceAdminSample);
if (isAdminApp) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mDPM.setAlwaysOnVpnPackage(mDeviceAdminSample,"",true);
}
} catch (PackageManager.NameNotFoundException namenotfoundexception) {
namenotfoundexception.printstacktrace();
} catch (Exception ex) {
}
}
但它并没有启用始终开启。
我已经添加了包名
mDPM.setAlwaysOnVpnPackage(mDeviceAdminSample,"my.app.package.name",true);
但仍未启用开关。
那么这段代码是做什么的呢? 如何以编程方式启用它?
我希望这个像下图
解决方法
根据 docs,setAlwaysOnVpnPackage
只能由配置文件所有者(通常是工作配置文件中的 MDM 客户端)或设备所有者(用于完全托管的设备)使用:
由设备或配置文件所有者调用以通过特定应用程序为当前用户配置始终在线的 VPN 连接。重新启动后会自动授予并保留此连接。
作为个人资料用户 - 我不希望我的 VPN 自行决定何时连接(如果正确实施,以编程方式设置始终开启将立即连接 VPN)。
作为工作资料用户(戴着员工的帽子),这不是我的决定,而是我的组织(通过资料所有者应用)。
所以,总而言之,这种行为是有道理的。
更新:
您可以克隆、构建和调试 Google 的 Test DPC 应用,而不是实施可能需要大量工作的 MDM,该应用具有测试以编程方式切换始终开启的 VPN 所需的一切。>
它还有数百万个你不需要的东西,所以一定要忽略其余的 :)
我没有看过他们的代码,但我建议搜索 setAlwaysOnVpnPackage
函数的用法。
Google 的测试 DPC 应用:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。