Android 12 (S) 出现 RxJava 或 Retrofit PendingIntent 错误
Posted
技术标签:
【中文标题】Android 12 (S) 出现 RxJava 或 Retrofit PendingIntent 错误【英文标题】:RxJava or Retrofit PendingIntent error with Android 12 (S) 【发布时间】:2022-01-06 08:12:19 【问题描述】:我正在尝试将定位版本更改为 android 12 (S)。但我有一个错误
java.lang.IllegalArgumentException: : Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
强烈考虑使用 FLAG_IMMUTABLE,仅当某些功能依赖于 PendingIntent 是可变的时才使用 FLAG_MUTABLE,例如如果它需要与内联回复或气泡一起使用。
产生此错误的代码是:
return regRestClient.getToken(idRef)
.onErrorResumeNext(
regRestClient.registerDevice(idRef, Build.PRODUCT, Build.MODEL)
.flatMap(response -> regRestClient.getToken(idRef))
)
.map((result) ->
new TokenResult(result.getToken())
)
.doOnError(error -> provideActivityToConsumer(activity -> onRegFailed(activity, error)))
.onErrorReturn(throwable -> new TokenResult(null));
获取设备令牌查询:
@GET("device/deviceId")
@Headers( Api.HEADER, Api.AUTH)
Single<TokenResult> getToken(@Path("idd") IdRef id);
我不明白,RxJava 库或改造库似乎有一些 PendingIntent 功能,但我不明白究竟是哪个库。
我的图书馆:
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.18'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
请帮忙!
【问题讨论】:
RxJava 和 Retrofit 都不是 Android 特定的库。它们不包含特定于 Android 的代码,例如PendingIntent
。 io.reactivex.rxjava2:rxandroid
是 Android 特有的,但如果它使用PendingIntent
,我会感到惊讶。也许你的 RxJava 链调用的东西,例如 getToken()
或 provideActivityToConsumer()
,正在创建一个 PendingIntent
。
【参考方案1】:
就我而言,我使用了库 - 'com.readystatesoftware.chuck:library:..*'。而且这个库包含自己的通知,它的通知不适用于 Android 12 (S)。
如果您还使用此库进行调试,只需将其删除并重试。
【讨论】:
【参考方案2】:只需将此依赖项添加到您的应用程序模块中,由于某种原因一切都会好起来的。
implementation 'androidx.work:work-runtime-ktx:2.7.1'
有消息来源:https://developer.android.com/jetpack/androidx/releases/work#version_27_2
【讨论】:
以上是关于Android 12 (S) 出现 RxJava 或 Retrofit PendingIntent 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 中使用 RxJava 在 Activity 之间传递数据?
如何使用 Rxjava 在 Android Kotlin 中过滤数据
在Android上调试时RxJava缓存线程中的InterruptedException
RxAndroid+RxJava+Gson+retrofit+okhttp初步搭建android网络请求框架
Android消息传递之基于RxJava实现一个EventBus - RxBus
RxJava/RxAndroid 中的 Schedulers.computation() v/s Schedulers.io()