在Android中在WorkManager上添加对本地wifi连接约束的检查

时间:2019-11-13 12:24:03

标签: android constraints android-workmanager

在我当前为工作者Constraints实现的过程中,我正在使用以下配置。

 Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED)
                .setRequiresBatteryNotLow(true).build()

我发现通过此Constraints,Worker仅在网络具有Internet连接的情况下才能工作,但我希望即使没有互联网且设备已连接到wifi的约束也可以工作。

那么可能是一种添加仅网络约束而不是互联网约束的方法。

2 个答案:

答案 0 :(得分:0)

您可以查看NetworkType的可用选项。这里的主要问题是,在较新的OS版本上,设备需要先将Wi-Fi SSID连接到互联网,然后才能使用它。

如果您已设置设备以使其即使没有互联网也可以连接到Wi-Fi,则可以测试其他选项之一(NetworkType.UNMETERED)。

答案 1 :(得分:0)

没有开箱即用的Constraint,所以我建议您手动进行此检查。

您可以仅触发工作程序,并首先检查一下:

val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?

            connectivityManager?.activeNetwork?.let { activeNetwork ->
                val capabilities = connectivityManager.getNetworkCapabilities(activeNetwork)
                val connectedToWifi = capabilities?.hasCapability(NetworkCapabilities.TRANSPORT_WIFI)
            }

NetworkCapabilities.TRANSPORT_WIFI应该是您要寻找的(尽管不能完全确定,最好仔细检查所有选项)。

如果connectedToWifitrue,则可以执行操作,否则只需终止工作人员返回更适合您需要的结果(您可以返回Success,以便所有操作都在此处结束,或者Retry(如果您希望工作人员在一段时间后自动重试)