如何在 android 中连接 wifi 时触发工作管理器?

How to trigger work manager when wifi is connected in android?

我的应用需要在设备连接互联网后立即同步数据。

我在 Worker class 中进行了同步工作,并且工作正常。但是我需要 运行 这个 class 一旦在 phone 中连接互联网。由于不推荐和弃用广播接收器的连接更改,我需要一种方法来在连接互联网时启动我的 class,以便同步数据。我怎样才能做到这一点?

我还想在用户存在应用程序并保持互联网连接状态时安排工作管理器,但是当应用程序从最近关闭时,不会调用 onDestroy。请问您对此有什么解决方案或逻辑吗?

由于 Android O 及更高版本的新限制,您无法在使用清单标志激活网络连接后立即启动 class。但是只要有互联网连接,您就可以告诉 Workmanager 到 运行 您的工作。

为此,您需要定义一个约束:

 Constraints constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build(); 

然后将您的工作加入队列:

OneTimeWorkRequest onetimeJob = new OneTimeWorkRequest.Builder(YourJob.class)
                    .setConstraints(constraints).build(); // or PeriodicWorkRequest
WorkManager.getInstance().enqueue(onetimeJob);

男孩明白你的意思。 你指出的事情是完全正确的,你应该尽量避免广播接收器这样的情况,因为现在人们有大量的应用程序,连接互联网后每个应用程序触发请求都会使用户的系统冻结,因为每个应用程序都想发送请求wifi连接后。因此 android 系统附带了 JET PACK,之后你不应该执行你的应用程序的操作,而是向 android 系统请求该操作,他们将处理后台请求。

正如上面提到的 Saeed

Constraints constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build(); 
OneTimeWorkRequest onetimeJob = new OneTimeWorkRequest.Builder(YourJob.class)
                    .setConstraints(constraints).build(); // or PeriodicWorkRequest
WorkManager.getInstance().enqueue(onetimeJob);

但是等等,你想在连接互联网时启动工作,所以你想要一些类似不推荐使用的广播来改变连接。 你为什么不做一件事? 每当用户在前台或后台使用时获得的数据都会触发工作管理器。如果您正在对其进行改造,那么在没有互联网连接时会出现 returns 错误,因此您可以在网络故障时安排作业。

所以你的工作会是

  override fun onFailure(call: Call<Chat>, t: Throwable) {
                 Log.v("chatsyncchecking","sending message failed",t)

                 if(t is IOException){
                     Log.v("chatsyncchecking","scheduling chat sync")
                     (app as App).enqueueChatSync()
                 }
             }

(您可以触发来自应用程序 class 的每个请求)

因此,这给您带来了一个好处,即您不应该在连接互联网时解雇工作经理。当某些任务失败时,你就开火。这也减少了对 android 系统的工作请求。毕竟我们都是社区,可以帮助 android 改进,用户可以在 phone 方面获得很好的体验,不会有太多滞后。希望对你有帮助