如何解决xamarin 表单应用中的 Android 通知
我正在使用 xamarin 表单应用程序,我正在尝试开发一个带有两个按钮的 Android 通知:
我对 Intent 和 Android 都没有经验,到目前为止我可以用两个按钮显示通知: notification example
Android 解决方案中负责显示通知的类是 localnotifications : Ilocalnotifications
类:
class localnotifications : Ilocalnotifications
{
const string channelId = "default";
const string channelName = "Default";
const string channelDescription = "The default channel for notifications.";
...
bool channelInitialized = false;
int messageId = 0;
int replyPendingIntentId = 0;
int photoPendingIntentId = 0;
notificationmanager manager;
public event EventHandler NotificationReceived;
public static localnotifications Instance { get; private set; }
public localnotifications() => Initialize();
public void Initialize()
{
if (Instance == null)
{
CreateNotificationChannel();
Instance = this;
}
}
public void SendNotification(string title,string message)
{
if (!channelInitialized)
{
CreateNotificationChannel();
}
Show(title,message);
}
public void ReceiveNotification(string title,string message)
{
var args = new NotificationEventArgs()
{
Title = title,Message = message,};
NotificationReceived?.Invoke(null,args);
}
private static readonly string KEY_TEXT_REPLY = "key_text_reply";
AndroidX.Core.App.RemoteInput remoteEntryInput = new AndroidX.Core.App.RemoteInput.Builder(KEY_TEXT_REPLY)
.SetLabel("Escribir enTrada")
.Build();
private Intent replyIntent;
private Intent photoIntent;
public void Show(string title,string message)
{
NotificationCompat.Builder builder = new NotificationCompat.Builder(AndroidApp.Context,channelId)
.SetContentTitle(title)
.SetContentText(message)
.SetLargeIcon(BitmapFactory.DecodeResource(AndroidApp.Context.Resources,Resource.Drawable.abc_ab_share_pack_mtrl_alpha))
.SetSmallIcon(Resource.Drawable.abc_ab_share_pack_mtrl_alpha)
.SetDefaults((int)NotificationDefaults.sound | (int)NotificationDefaults.Vibrate);
NotificationCompat.Action reply = CreateReplyIntent(title,message);
builder.AddAction(reply);
NotificationCompat.Action image = CreateImageIntent();
builder.AddAction(image);
Notification notification = builder.Build();
manager.Notify(messageId++,notification);
}
NotificationCompat.Action CreateReplyIntent(string title,string message)
{
//replyIntent = new Intent(AndroidApp.Context,typeof(MainActivity));
replyIntent = new Intent();
replyIntent.PutExtra(TitleKey,title);
replyIntent.PutExtra(MessageKey,message);
// Build a PendingIntent for the reply action to trigger.
PendingIntent replyPendingIntent =
PendingIntent.Getbroadcast(AndroidApp.Context,replyPendingIntentId++,replyIntent,PendingIntentFlags.UpdateCurrent);
// Create the reply action and add the remote input.
return new NotificationCompat.Action.Builder(Resource.Drawable.abc_ab_share_pack_mtrl_alpha,"Escribir enTrada",replyPendingIntent)
.AddRemoteInput(remoteEntryInput)
.Build();
}
NotificationCompat.Action CreateImageIntent()
{
//photoIntent = new Intent("android.media.action.IMAGE_CAPTURE");
photoIntent = new Intent(AndroidApp.Context,typeof(MainActivity));
//photoIntent.SetFlags( ActivityFlags.LaunchAdjacent | Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Build a PendingIntent for the reply action to trigger.
PendingIntent phtoPendingIntent = PendingIntent.Getbroadcast(AndroidApp.Context,photoPendingIntentId++,photoIntent,PendingIntentFlags.UpdateCurrent);
return new NotificationCompat.Action.Builder(Resource.Drawable.abc_ab_share_pack_mtrl_alpha,"Sacar foto",phtoPendingIntent)
.Build();
}
void CreateNotificationChannel()
{
manager = (notificationmanager)AndroidApp.Context.GetSystemService(AndroidApp.NotificationService);
if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var channelNameJava = new java.lang.String(channelName);
var channel = new NotificationChannel(channelId,channelNameJava,NotificationImportance.Default)
{
Description = channelDescription
};
manager.CreateNotificationChannel(channel);
}
channelInitialized = true;
}
}
不明白的是应用如何/在何处对这些 PendintIntent 做出反应,以及如何将信息从 android 解决方案传递到 xamarin 表单模型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。