面向 S+(版本 31 及更高版本)要求在创建 Pendingintent 时指定 FLAG_IMMUTABLE 或 FLAG_IMMUTABLE 之一

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

我在将 targetSDK 升级到 31 (Android 12) 时遇到这个问题

我正在使用React Native,一个名为react-native-sms-retriver的包PhoneNumberHelper.java

中使用了一个PendingIntent
        final GoogleApiClient googleApiClient = getGoogleApiClient(context);

        final PendingIntent intent = Auth.CredentialsApi
                .getHintPickerIntent(googleApiClient, request);

        try {
            activity.startIntentSenderForResult(intent.getIntentSender(),
                    REQUEST_PHONE_NUMBER_REQUEST_CODE, null, 0, 0, 0);
        } catch (IntentSender.SendIntentException e) {
            promiseReject(SEND_INTENT_ERROR_TYPE, SEND_INTENT_ERROR_MESSAGE);
            callAndResetListener();
        } finally {
            if (googleApiClient.isConnected()) {
                googleApiClient.disconnect();
            }
        }

我该如何解决这个问题?

我已经尝试过以下方法,但没有成功

  1. implementation 'androidx.work:work-runtime:2.7.1'
    中添加
    android/build.gragle
  2. 在 app/build.gradle 中添加
    implementation 'com.google.android.gms:play-services-base:18.1.0' implementation 'com.google.android.gms:play-services-basement:18.1.0'

我在类似的问题中看到了以下代码,但不确定如何在我的案例中使用它

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
             return PendingIntent.getActivity(context, id, intent, PendingIntent.FLAG_IMMUTABLE | flag);
         } else {
             return PendingIntent.getActivity(context, id, intent, flag);
         }

我不知道如何使用它,因为包代码中没有

PendingIntent.getActivity()

Error Screenshot

android react-native android-pendingintent android-12 androidsdk31
1个回答
0
投票

该问题是因为身份验证库没有最新的 SDK 版本 (31) 要求。我遇到了类似的问题,在构建 Gradle 中更新最新的身份验证库后它得到了修复。

将您的auth库版本更新到20.7.0或更高版本:

implementation "com.google.android.gms:play-services-auth:20.7.0"
© www.soinside.com 2019 - 2024. All rights reserved.