Я использую xamarin.forms для своего проекта Android. Когда я запускаю код на свой мобильный Android 13, у меня возникает следующая проблема:
java.lang.IllegalArgumentException: com.fd.trucker.app: Ориентация на S+ (версия 31 и выше) требует, чтобы один из FLAG_IMMUTABLE или FLAG_MUTABLE должен быть указан при создании PendingIntent. Настоятельно рассмотрите возможность использования FLAG_IMMUTABLE, используйте FLAG_MUTABLE только в том случае, если некоторые функции зависят от изменяемости PendingIntent, например. если его нужно использовать со встроенными ответами или пузырьками. в android.app.PendingIntent.checkFlags(PendingIntent.java:401) в android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:671) в android.app.PendingIntent.getBroadcast(PendingIntent.java:658) на com.google.firebase.iid.zzl.zzd (неизвестный источник: 18) на com.google.firebase.iid.zzl.zzb (неизвестный источник: 229) на com.google.firebase.iid.zzl.zza (неизвестный источник: 0) на com.google.firebase.iid.zzj.zzb (неизвестный источник: 41) на com.google.firebase.iid.zzj.getToken (неизвестный источник: 56) на com.google.firebase.iid.FirebaseInstanceId.getToken (неизвестный источник: 10) на com.google.firebase.iid.FirebaseInstanceId.zzcfy (неизвестный источник: 4) на com.google.firebase.iid.FirebaseInstanceIdService.zza (неизвестный источник: 148) в com.google.firebase.iid.FirebaseInstanceIdService.handleIntent(неизвестно Источник: 122) на com.google.firebase.iid.zzc.run (неизвестный источник: 4) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) в java.lang.Thread.run(Thread.java:1012)
Но я уже добавил неизменное к ожидающему намерению, которое я использовал. 1.
Intent alarmIntent = new Intent(this, typeof(BootCompletedReceiver));
PendingIntent pending = PendingIntent.GetBroadcast(this, 0, alarmIntent, PendingIntentFlags.Immutable);
AlarmManager alarmManager = GetSystemService(AlarmService).JavaCast<AlarmManager>();
alarmManager.SetRepeating(AlarmType.RtcWakeup, BootCompletedReceiver.FirstReminder(), time, pending);
PendingIntent pendingIntent = PendingIntent.GetBroadcast(this, 0, alarmIntent, 0);
NotificationManager manager = (NotificationManager)GetSystemService(NotificationService);
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
int id = new Random(seed).Next(000000000, 999999999);
var push = new Intent();
var fullScreenPendingIntent = PendingIntent.GetActivity(this, 0, push, PendingIntentFlags.Immutable);
NotificationCompat.Builder notification;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var chan1 = new NotificationChannel(PRIMARY_CHANNEL, new Java.Lang.String("Primary"), NotificationImportance.High);
manager.CreateNotificationChannel(chan1);
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
else
{
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
notification.SetContentIntent(fullScreenPendingIntent)
.SetContentTitle("Upgrade Failed")
.SetContentText(Constants.DBUpgradeFailNotifications)
.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon))
.SetSmallIcon(Resource.Drawable.icon_transparent)
.SetStyle((new NotificationCompat.BigTextStyle()))
.SetPriority(NotificationCompat.PriorityHigh)
.SetColor(0x0a384a)
.SetAutoCancel(true);
manager.Notify(id, notification.Build());
NotificationManager manager = (NotificationManager)GetSystemService(NotificationService);
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
int id = new Random(seed).Next(000000000, 999999999);
var push = new Intent();
var fullScreenPendingIntent = PendingIntent.GetActivity(this, 0, push, PendingIntentFlags.Immutable);
NotificationCompat.Builder notification;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var chan1 = new NotificationChannel(PRIMARY_CHANNEL, new Java.Lang.String("Primary"), NotificationImportance.High);
manager.CreateNotificationChannel(chan1);
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
else
{
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
notification.SetContentIntent(fullScreenPendingIntent)
.SetContentTitle("Destination Arrival")
.SetContentText("It appears you've arrivedDestroy at the destination.Please enter the BL & Scale Ticket.")
.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon))
.SetSmallIcon(Resource.Drawable.icon_transparent)
.SetStyle((new NotificationCompat.BigTextStyle()))
.SetPriority(NotificationCompat.PriorityHigh)
.SetColor(0x0a384a)
.SetAutoCancel(true);
manager.Notify(id, notification.Build());
NotificationManager manager = (NotificationManager)GetSystemService(NotificationService);
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
int id = new Random(seed).Next(000000000, 999999999);
var intent = new Intent(this, typeof(MainActivity));
intent.PutExtra("title", title);
intent.PutExtra("body", body);
intent.PutExtra("tripid", tripid);
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
intent.SetData(Android.Net.Uri.Parse("custom://" + SystemClock.CurrentThreadTimeMillis()));
var fullScreenPendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.Immutable);
NotificationCompat.Builder notification;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var chan1 = new NotificationChannel(PRIMARY_CHANNEL, new Java.Lang.String("Primary"), NotificationImportance.High);
manager.CreateNotificationChannel(chan1);
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
else
{
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
notification.SetContentIntent(fullScreenPendingIntent)
.SetContentTitle(title)
.SetContentText(body)
.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon))
.SetSmallIcon(Resource.Drawable.icon_transparent)
.SetStyle((new NotificationCompat.BigTextStyle()))
.SetPriority(NotificationCompat.PriorityHigh)
.SetColor(0x0a384a)
.SetAutoCancel(true)
.SetOngoing(false);
manager.Notify(Convert.ToInt32(tripid), notification.Build());
NotificationManager manager = (NotificationManager)GetSystemService(NotificationService);
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
int id = new Random(seed).Next(000000000, 999999999);
var push = new Intent();
var fullScreenPendingIntent = PendingIntent.GetActivity(this, 0, push, PendingIntentFlags.Immutable);
NotificationCompat.Builder notification;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var chan1 = new NotificationChannel(PRIMARY_CHANNEL, new Java.Lang.String("Primary"), NotificationImportance.High);
chan1.LightColor = Color.Green;
manager.CreateNotificationChannel(chan1);
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
else
{
#pragma warning disable CS0618 // Type or member is obsolete
notification = new NotificationCompat.Builder(this);
#pragma warning restore CS0618 // Type or member is obsolete
}
notification.SetContentIntent(fullScreenPendingIntent)
.SetContentTitle(message.GetNotification().Title)
.SetContentText(message.GetNotification().Body)
.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon))
.SetSmallIcon(Resource.Drawable.icon_transparent)
.SetStyle((new NotificationCompat.BigTextStyle()))
.SetPriority(NotificationCompat.PriorityHigh)
.SetColor(0x0a384a)
.SetAutoCancel(true);
manager.Notify(id, notification.Build());
NotificationManager manager = (NotificationManager)GetSystemService(NotificationService);
var seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().ToString(), @"\d+").Value);
int id = new Random(seed).Next(000000000, 999999999);
string title = "";
string body = "";
var intent = new Intent(this, typeof(MainActivity));
var i = p0 as Intent;
var bundle = i.Extras;
title = bundle.GetString("gcm.notification.title");
body = bundle.GetString("gcm.notification.body");
var tripid = bundle.GetString("key2");
intent.PutExtra("title", title);
intent.PutExtra("body", body);
intent.PutExtra("tripid", tripid);
intent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.SingleTop);
intent.SetData(Android.Net.Uri.Parse("custom://" + SystemClock.CurrentThreadTimeMillis()));
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.Immutable);
NotificationCompat.Builder notification;
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var chan1 = new NotificationChannel(PRIMARY_CHANNEL, new Java.Lang.String("Primary"), NotificationImportance.High);
chan1.LightColor = Color.Green;
manager.CreateNotificationChannel(chan1);
notification = new NotificationCompat.Builder(this, PRIMARY_CHANNEL);
}
else
{
#pragma warning disable CS0618 // Type or member is obsolete
notification = new NotificationCompat.Builder(this);
#pragma warning restore CS0618 // Type or member is obsolete
}
notification.SetContentIntent(pendingIntent)
.SetContentTitle(title)
.SetContentText(body)
.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon))
.SetSmallIcon(Resource.Drawable.icon_transparent)
.SetStyle((new NotificationCompat.BigTextStyle()))
.SetPriority(NotificationCompat.PriorityHigh)
.SetColor(0x0a384a)
.SetAutoCancel(true)
.SetOngoing(false);
manager.Notify(Convert.ToInt32(tripid), notification.Build());
Пожалуйста, дайте мне решение для этого.
Я провел небольшое исследование об ошибке. Некоторые люди столкнулись с проблемой: произошел сбой из-за более низкой версии плагинов Firebase, и после обновления зависимостей Android и плагинов Flutter проблема была решена.
Вы можете проверить эту ссылку о поддержке Android 12 для PendingIntents с неизменяемым флагом.
Кроме того, вы можете проверить этот комментарий о сделать версию sdk ниже, это также устраняет проблему.
Спасибо, Guangyu Bai - MSFT, у меня работает обновление версии firebase
Привет, кто-нибудь, пожалуйста, помогите мне