使用 API 26 调用 - API 23 Android 中的 transientExtras

Using API 26 call - transientExtras in API 23 Android

我正在尝试将 extras 添加到我的 JobInfo.Builder 支持 Android API 23 及更高版本。问题是当将 Bundle 添加到 builder 时,我需要做 builder.setTransientExtras

ComponentName serviceComponent = new ComponentName(context, RestApiJobService.class);

JobInfo.Builder builder = new JobInfo.Builder(getUniqueJobId(), serviceComponent);

builder.setTransientExtras(RestApiJobFactory.save(jobItem);

这里的问题是 builder.setTransientExtras 仅在 API 26 及更高版本中受支持。而builder.setExtras只支持PersistableBundle。我需要它来支持 Bundle,因为我的 Bundle 中有 Files

在 Android 23 中是否有支持 builder.setTransientExtras 以及 getTransientExtras.

的解决方法

或者也许有一种方法可以将 Bundle 与 bundle.setExtras() 一起使用。

当在 JobInfo.Builder 上调用 build() 以获取持久作业时,使用 builder.setTransientExtras 可以抛出 IllegalArgumentException。更安全地使用 PersistableBundle 并将包的内容限制为可持久类型,例如LongDoubleString 和嵌套 PersistableBundle 以及其他。如果您可以修改 RestApiJobFactory class,而不是返回传递 File 对象的 Bundle,请尝试将 File 位置存储为 String .如果不能,请编写一个辅助方法将 Bundle 转换为 PeristableBundle,并在此过程中提取 File 信息。有关示例,请参见此答案

持久作业的原则是将额外的东西减少到基本的持久类型,当作业本身是运行时,应该构造复杂的瞬态类型。