在我当前针对工作人员Constraints
的实现中,我正在使用以下配置。
Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true).build()
[我发现通过此Constraints
,Worker仅在网络具有Internet连接的情况下才能工作,但我希望即使没有互联网且设备已连接至wifi的约束也可以工作。
因此,可能是添加仅网络约束而不是Internet的方法。
您可以查看NetworkType
的可用选项。这里的主要问题是,在较新的OS版本上,该设备要求在使用Wi-Fi SSID之前将其连接到Internet。
[如果您已将设备设置为即使没有互联网连接也可以连接到Wi-Fi,则可以测试其他选项之一(NetworkType
。]
没有开箱即用的NetworkType.UNMETERED
,所以我建议您手动进行此检查。
您可以触发工作人员,并首先检查一下:
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
为connectedToWifi
,则可以执行操作,否则,只需结束工作人员返回的结果即可更好地满足您的需要(您可以返回true
,以便所有结果都在此处结束;如果需要,可以返回Success
工作人员会在一段时间后自动重试)