NetworkType.UNMETERED与NetworkType.METERED-PeriodicWork

时间:2018-09-12 13:03:10

标签: android android-workmanager

在我的应用程序中,我使用工作管理器进行定期工作。我正在将文件上传到服务器。我在单击该按钮时有一个按钮,出现一个对话框,询问用户-上传文件时要使用哪个网络-1. Wifi 2.任何

如果用户单击wifi,则每隔30分钟我要上传文件;如果用户单击每1小时要按一下我我要上传文件。

以下是我的代码: 1.如果用户选择WIFI

CGContextStrokePath(context);

如果用户选择“任意”:

PeriodicWorkRequest.Builder wifiWorkBuilder =
                            new PeriodicWorkRequest.Builder(FileUpload.class, 30,
                                    TimeUnit.MINUTES)
                                    .addTag("WIFIJOB1")
                                    .setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.UNMETERED).build());
                    wifiWork = wifiWorkBuilder.build();
                    WorkManager.getInstance().enqueueUniquePeriodicWork("wifiJob", ExistingPeriodicWorkPolicy.REPLACE, wifiWork);

对于任何网络,它都能完美运行,每隔1小时上传一次APK。但是,如果用户选择Wifi,那么这就是问题-

如果用户连接到其他移动设备的wifi(例如他正在使用热点),那么我认为这里的网络被视为计价网络,因此它不会上传文件。我只是想知道我们的房屋或办公室网络默认情况下是未计量网络。如果假设它不能解决问题(意味着有些是按计量的,有些是未计量的),那么如果用户选择wifi且用户wifi被认为是计量的,则使用此代码,则永远不会从他的设备文件中上传。

或者我应该创建另一个任务:

PeriodicWorkRequest.Builder mobileDataWorkBuilder =
                                new PeriodicWorkRequest.Builder(FileUpload.class, 1,
                                        TimeUnit.HOURS)
                                        .addTag("MOBILEDATAJOB1")
                                        .setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build());
                        mobileDataWork = mobileDataWorkBuilder.build();
                        WorkManager.getInstance().enqueueUniquePeriodicWork("mobileDataJob", ExistingPeriodicWorkPolicy.REPLACE, mobileDataWork);

因此,如果未连接到wifi的用户每隔1小时就会上传一次,如果连接到wifi(未测量)则每隔30分钟就会上传一次文件,如果连接到已测量的wifi,则每隔45分钟就会上传一次文件。

以上逻辑创建3个独立任务来上传文件是否有意义。任何建议将不胜感激。预先感谢

1 个答案:

答案 0 :(得分:0)

如果您只关心存在网络连接,请使用NetworkType.CONNECTED。如果文件很大,并可能使用户花费很多(因为他们最终将使用昂贵的数据连接),则应使用NetworkType.UNMETERED