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 的代码,例如 PendingIntentio.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()