Portable Xamarin Forms适配Android 34时PendingIntent报错求助
临时解决方案(Portable Xamarin Forms项目适配Android 34)
针对你升级Android目标平台到34后遇到的PendingIntent flag报错,结合Portable项目(PCL)的限制,给出以下临时修复方案:
1. 手动指定PendingIntent的Flag值
由于旧版本Xamarin.Android未封装Mutable/Immutable枚举项,直接使用对应的数值常量强制转换即可:
- 需要可变的PendingIntent:使用
(PendingIntentFlags)0x00000040(对应Android原生FLAG_MUTABLE) - 需要不可变的PendingIntent:使用
(PendingIntentFlags)0x00000080(对应Android原生FLAG_IMMUTABLE)
示例代码:
// 创建不可变的PendingIntent(根据业务场景选择对应flag) var pendingIntent = PendingIntent.GetActivity( Android.App.Application.Context, 0, new Intent(Android.App.Application.Context, typeof(MainActivity)), (PendingIntentFlags)0x00000080 | PendingIntentFlags.UpdateCurrent );
2. 安装适配MonoAndroid11的AndroidX.Work.Runtime版本
放弃安装2.9.0.1版本,选择支持MonoAndroid11的2.7.1.5版本:
- 卸载项目中已有的冲突Work相关包
- 在NuGet包管理器中搜索
Xamarin.AndroidX.Work.Runtime,手动选择2.7.1.5版本进行安装
3. 降级Firebase包至兼容版本
Xamarin.Firebase.Iid 121.1.0.7与MonoAndroid11不兼容,降级到适配版本:
- 卸载现有高版本Firebase相关包
- 安装
Xamarin.Firebase.Iid 120.1.0.3,同时确保所有Firebase依赖包(如Messaging、Core等)版本统一,避免版本冲突
4. 清单文件补充兼容配置(针对第三方库问题)
如果报错来自第三方SDK(如Firebase Messaging)内部创建的PendingIntent,在AndroidManifest.xml中添加如下配置,强制指定默认flag:
<application android:label="YourAppName" ...> <!-- 配置Firebase消息默认使用IMMUTABLE flag --> <meta-data android:name="firebase_messaging_pending_intent_flags" android:value="immutable" /> </application>
内容的提问来源于stack exchange,提问作者Matthew Pans
相关产品推荐
相关产品推荐

