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

问题描述 投票:1回答:1

我正在尝试将extras添加到支持Android API 23及更高版本的JobInfo.Builder中。问题是将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,因为我的Files中有Bundle

[Android 23中是否有任何变通方法来支持builder.setTransientExtrasgetTransientExtras也相同。

或者也许有一种将Bundle与bundle.setExtras()结合使用的方法。

android bundle job-scheduling android-jobscheduler transient
1个回答
1
投票

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

持久化作业的原理是将额外内容减少为基本的持久类型,并且在作业本身运行时,应构造复杂的临时类型。

© www.soinside.com 2019 - 2024. All rights reserved.