在我当前为工作者Constraints
实现的过程中,我正在使用以下配置。
Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true).build()
我发现通过此Constraints
,Worker仅在网络具有Internet连接的情况下才能工作,但我希望即使没有互联网且设备已连接到wifi的约束也可以工作。
那么可能是一种添加仅网络约束而不是互联网约束的方法。
答案 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
应该是您要寻找的(尽管不能完全确定,最好仔细检查所有选项)。
如果connectedToWifi
是true
,则可以执行操作,否则只需终止工作人员返回更适合您需要的结果(您可以返回Success
,以便所有操作都在此处结束,或者Retry
(如果您希望工作人员在一段时间后自动重试)