首页 > 解决方案 > Android WorkRequest NetworkType 约束无法区分带互联网和不带互联网的 VPN

问题描述

我有一个WorkRequest我想在设备有互联网连接时运行的。约束似乎是做到这一点的方法——我可以NetworkType像这样定义一个约束:

val constraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

但是,我观察到使用 VPN 的设备的一些行为。当 VPN 处于活动状态时,即使设备没有Internet连接,它似乎也会将其WorkRequest视为。NetworkType.CONNECTED

有什么方法可以使约束按我的预期工作吗?

提前致谢 :)

标签: androidandroid-workmanager

解决方案


请首先检查 VPN 具有哪些网络功能:

通过 android.net.NetworkCapabilities 上网检查不工作

然后和这个比较:

互联网&NOT_RESTRICTED&TRUSTED&VALIDATED

这就是NetworkType.CONNECTED的意思。

如果您愿意,您可以转储 JS 并查看您正在等待的确切功能,如下所示:

adb shell dumpsys 作业调度程序

https://developer.android.com/topic/libraries/architecture/workmanager/how-to/debugging


推荐阅读