在android中连接wifi时如何触发work manager?

在android中连接wifi时如何触发work manager?,android,broadcastreceiver,android-workmanager,android-jobscheduler,Android,Broadcastreceiver,Android Workmanager,Android Jobscheduler,我有一个应用程序,它需要在设备上连接互联网后立即同步数据 我在工人阶级的同步工作,它是工作良好。但我需要运行这个类一旦互联网连接在手机上。由于广播接收器的on连接更改不被推荐和弃用,我需要一种方法在连接internet时启动我的类,以便同步数据。我怎样才能做到这一点 我还想在用户存在应用程序时安排工作经理,并保持互联网连接状态,但当应用程序从最近关闭时,不会调用onDestroy。您对此有什么解决方案或逻辑吗?由于Android O及以上版本的新限制,您不能在网络连接激活后立即使用清单标志启动类

我有一个应用程序,它需要在设备上连接互联网后立即同步数据

我在工人阶级的同步工作,它是工作良好。但我需要运行这个类一旦互联网连接在手机上。由于广播接收器的on连接更改不被推荐和弃用,我需要一种方法在连接internet时启动我的类,以便同步数据。我怎样才能做到这一点


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

由于Android O及以上版本的新限制,您不能在网络连接激活后立即使用清单标志启动类。但是,您可以告诉
Workmanager
在任何internet连接可用时立即运行您的作业

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

 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系统请求该操作,他们将处理后台请求

正如赛义德上面提到的那样

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);
但是,等等,你想在互联网连接时解雇工作,所以你需要一些类似于不推荐的广播的东西来改变连接。 你为什么不做一件事? 当用户处于前台或后台时,无论何时获取数据,都可以使用fire工作管理器。如果您正在对其进行改装,则当没有internet连接时,它将返回错误,这样,当故障是由于网络原因时,您可以安排作业

所以你的工作将是

  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()
                 }
             }
override-fun-onFailure(call:call,t:Throwable){
Log.v(“chatsyncchecking”,“发送消息失败”,t)
if(t是IOException){
Log.v(“聊天同步检查”、“安排聊天同步”)
(应用程序作为应用程序)。enqueueChatSync()
}
}
(您可以从应用程序类激发每个请求)


因此,无论何时连接互联网,您都不应该解雇工作经理,这对您来说是一个好处。当某项任务失败时,你就开火。这也减少了对android系统的工作请求。毕竟,我们所有人都是帮助安卓系统改进的社区,用户在使用手机时也会有很好的体验。希望它能帮助您

如何在Google文档中查看:->“WorkManager适用于可延迟的任务,即不需要立即运行,并且即使应用程序退出或设备重新启动,也需要可靠运行”。这意味着请求将被执行,但可能不会立即执行,而且周期性工作请求的最短时间为15分钟。谢谢回答,谢谢这一部分,但我已经做到了,我的工作经理运行得很好,但我缺少的重要一点是,每当网络连接时,我都需要运行该工作经理。那么我该把这个请求排在哪里呢?嗨,谢谢你的回答,谢谢这一部分,但我已经做到了,我的工作经理运行得很好,但我缺少的重要一点是,每当网络连接时,我都需要运行那个工作经理。那么我该把这个请求排在哪里呢。@simplegalaxy,你是说你想在每次网络连接时调用这个作业吗?@SaeedMasoumi,你的回答是这样的,每次网络连接时都会调用这个作业吗?天哪,你的回答如此流利,以至于我喜欢一个专业的文档管理员写的文章。还有一件事,我正在使用改装,这有助于获得一个好主意。