- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的应用程序中,我使用工作管理器进行定期工作。我正在上传文件到服务器。我有一个按钮,单击该按钮会出现一个对话框,并询问用户 - 上传文件时要使用哪个网络 - 1. Wifi 2. 任何
如果用户点击 wifi,我每 30 分钟上传一次文件,如果用户点击任何,我每 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);
如果用户选择任何:
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);
对于任何网络,它都能完美运行并每 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);
因此,如果用户未连接到 wifi,文件将每 1 小时上传一次,如果连接到 wifi(未按流量计费),文件将每 30 分钟上传一次,如果连接到按流量计费的 wifi,则文件将每 45 分钟上传一次。
创建 3 个单独的任务来上传文件的逻辑是否有意义。任何建议将不胜感激。提前致谢
最佳答案
如果您只关心是否存在网络连接,只需使用 NetworkType.CONNECTED
。如果文件非常大,并且可能会让用户付出代价(因为他们最终会使用昂贵的数据连接),您应该使用 NetworkType.UNMETERED
。
关于android - NetworkType.UNMETERED 与 NetworkType.METERED - PeriodicWork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52295913/
在我的应用程序中,我使用工作管理器进行定期工作。我正在上传文件到服务器。我有一个按钮,单击该按钮会出现一个对话框,并询问用户 - 上传文件时要使用哪个网络 - 1. Wifi 2. 任何 如果用户点击
我有一个 WorkRequest我想在设备有互联网连接时运行。 Constraints似乎是这样做的方法 - 我可以定义一个 NetworkType像这样的约束: val constraints =
在 ConnectivityManager 类中,我看到如下方法: public int startUsingNetworkFeature(int networkType, String featur
我正在尝试为包含 WorkManager WorkRequests 的类编写 Android 仪器测试。 很长一段时间,我都被困在可以看到 worker 排队但他们从未被执行的地步。经过一段时间的反复
我是一名优秀的程序员,十分优秀!