Android 如何仅在使用WorkManager的蜂窝网络上运行作业?
我正在开发一个应用程序,当WiFi连接丢失时,它必须运行作业。我可以使用WorkManager轻松检测设备何时连接到WiFi,但我还没有找到一种方法将Worker设置为仅在手机数据上运行,我会在检测到用户连接到WiFi网络后立即设置Android 如何仅在使用WorkManager的蜂窝网络上运行作业?,android,broadcastreceiver,android-workmanager,android-jobscheduler,Android,Broadcastreceiver,Android Workmanager,Android Jobscheduler,我正在开发一个应用程序,当WiFi连接丢失时,它必须运行作业。我可以使用WorkManager轻松检测设备何时连接到WiFi,但我还没有找到一种方法将Worker设置为仅在手机数据上运行,我会在检测到用户连接到WiFi网络后立即设置 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACC
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE"/>
</intent-filter>
</receiver>
我过去的做法是使用广播接收器,当用户连接或断开WiFi网络时,它会让我知道
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE"/>
</intent-filter>
</receiver>
我知道我可以结合这两种解决方案,并根据设备API使用其中一种,但我希望避免这种情况。我看过WorkManager,但没有找到一种仅在使用蜂窝数据时运行Worker的方法。我是否遗漏了某些内容,或者这在WorkManager中目前不可能实现?更新如果您可以假设蜂窝网络始终按流量计费,而WiFi始终未按流量计费,则可以使用这些网络类型作为约束条件。更多细节请参见评论,因为情况似乎并非总是如此 原始答案 您可以在有WIFI连接时运行的工作中创建具有约束的新工作请求 当设备切换到蜂窝(计量)连接时,将运行此新工作:
// Create a Constraints object that defines when the task should run
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.METERED)
.build()
.这实际上不起作用,因为蜂窝网络可以不计量,而WiFi网络可以计量。这就是为什么它在中被弃用的原因。有趣的是,我一直认为是计量的~Cellular。您可以在WorkManager问题跟踪器上打开功能请求,但此时WorkManager中没有指定网络传输类型的内容: