在我的应用程序中,我使用工作管理器进行定期工作。我正在将文件上传到服务器。我在单击该按钮时有一个按钮,出现一个对话框,询问用户-上传文件时要使用哪个网络-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个独立任务来上传文件是否有意义。任何建议将不胜感激。预先感谢
答案 0 :(得分:0)
如果您只关心存在网络连接,请使用NetworkType.CONNECTED
。如果文件很大,并可能使用户花费很多(因为他们最终将使用昂贵的数据连接),则应使用NetworkType.UNMETERED
。