NetworkType.UNMETERED 与 NetworkType.METERED - PeriodicWork

PPD*_*PPD 7 android android-workmanager

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

如果用户点击wifi,我每30分钟上传一次文件,如果用户点击Any我每1小时上传一次文件。

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

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);
Run Code Online (Sandbox Code Playgroud)

如果用户选择任何:

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);
Run Code Online (Sandbox Code Playgroud)

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

如果用户连接到其他移动设备的 wifi(比如他正在使用热点),那么这里的网络我想我认为是计量网络,所以它不会上传文件。我只想知道我们的家庭或办公室网络默认情况下是否为未计量网络。如果假设它没有修复(意味着有些是计量的,有些是未计量的),那么如果用户选择 wifi 并且用户 wifi 被认为是计量的,那么使用此代码将永远不会从他的设备文件上传。

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

PeriodicWorkRequest.Builder meteredwifiWorkBuilder =
                            new PeriodicWorkRequest.Builder(FileUpload.class, 45,
                                    TimeUnit.MINUTES)
                                    .addTag("METEREDWIFIJOB")
                                    .setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.METERED).build());
                    wifiWork = wifiWorkBuilder.build();
                    WorkManager.getInstance().enqueueUniquePeriodicWork("meteredwifiJob", ExistingPeriodicWorkPolicy.REPLACE, wifiWork);
Run Code Online (Sandbox Code Playgroud)

因此,如果用户未连接到 wifi 文件将在每 1 小时后上传,如果连接到 wifi(未计量)文件将在每 30 分钟后上传,如果连接到计量wifi 则文件将在每 45 分钟后上传。

创建 3 个单独的任务来上传文件是上述逻辑有意义的。任何建议将不胜感激。提前致谢

Rah*_*hul 2

如果您只关心网络连接是否存在,只需使用NetworkType.CONNECTED. 如果文件非常大,并且可能会让用户付出代价(因为他们最终将使用昂贵的数据连接),那么您应该使用NetworkType.UNMETERED.