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

时间:2019-09-29 08:32:57

标签: android broadcastreceiver android-workmanager android-jobscheduler

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

我在Worker类中有同步工作,并且工作正常。但是,只要电话连接了互联网,我就必须立即上课。由于不建议也不建议使用广播接收器的连接更改,因此,我需要一种方法来在连接Internet时触发课程,以使数据同步。我该如何实现?

我还认为,当用户存在该应用程序并保持Internet连接状态时安排工作管理器,但是从最近关闭该应用程序时,不会调用onDestroy。您对此有任何解决方案或逻辑吗?

2 个答案:

答案 0 :(得分:4)

男孩明白了。 您指出的事情是完全正确的,您应该尝试避免出现广播接收器的情况,因为这些人今天拥有大量应用程序,并且在连接互联网后触发每个应用程序的启动请求会使用户系统冻结,因为每个应用程序都希望发送请求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);

但是,等一下,您想在连接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()
                 }
             }

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

因此,这给您带来了好处,那就是在连接Internet时不应该解雇工作经理。当某些任务失败时,您将解雇。这也使得对Android系统的工作请求减少了。毕竟,我们都是帮助android改进的社区,用户在手机方面的丰富经验也丝毫不落后。希望对您有帮助

答案 1 :(得分:1)

由于对Android O及更高版本的新限制,您不能使用清单标志在网络连接处于活动状态后立即启动类。但是,只要有互联网连接,您就可以告诉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);