Rx2AndroidNetworking在Android 31+报错:PendingIntent需指定IMMUTABLE/MUTABLE标志
问题描述
在Android 31及以上版本中使用Rx2AndroidNetworking调用接口时,抛出以下异常:
java.lang.IllegalArgumentException: com.gomini.gominipassenger: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
用户代码示例
接口调用代码:
public static Observable<AppVersion> checkAppVersion() { return Rx2AndroidNetworking.post(Constant.Api.Url.BASE_URL + Constant.Api.Url.CHECK_APP_VERSION) .addBodyParameter(Constant.Api.CheckAppVersion.APP_VERSION, String.valueOf(BuildConfig.VERSION_CODE)) .addBodyParameter(Constant.Api.CheckAppVersion.DEVICE_TYPE, Constant.DEVICE_TYPE) .setOkHttpClient(client) .build() .getObjectObservable(AppVersion.class) .compose(RxUtils.applyNetworkSchedulers()); }
依赖配置:
implementation 'com.amitshekhar.android:rx2-android-networking:1.0.2'
解决办法
升级依赖版本:当前使用的1.0.2版本未适配Android 12+的PendingIntent强制规则,直接升级到兼容版本即可修复问题,推荐使用:
implementation 'com.amitshekhar.android:rx2-android-networking:1.1.2'该版本已针对Android 12+调整了PendingIntent的创建逻辑,添加了
FLAG_IMMUTABLE参数。临时替代方案(不推荐):若无法立即升级依赖,可尝试自定义OkHttpClient并拦截内部请求,手动修正PendingIntent的创建参数,但此方法需要修改库的内部逻辑,维护成本高,优先建议升级版本。
内容的提问来源于stack exchange,提问作者Hamdy Abd El Fattah

