我目前正在尝试使用Xamarin在Visual Studio中创建通知,但我在使用Android应用程序时遇到了问题。
这是连接到通知接收方的通知服务类,然后应在一定的秒数后发送通知。问题是,带有pendingIntent.GetBroadcast的那行代码总是在其运行轨道上停止代码。没有出现错误消息,所以我不知道为什么这一行是不正确的。
有没有人能给点建议或指出哪里出了问题?或者干脆放弃这种做法,尝试一种新的方法。
我很乐意提供任何进一步的信息,以帮助确定什么是错误的。WriteLine命令只是用来查看代码执行了多少,它的作用是“Testing2”
using System;
using System.Runtime.Remoting.Contexts;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Support.V4.App;
using WCDP_FMRS.Services;
using Context = Android.Content.Context;
namespace WCDP_FMRS.Droid.Services
{
// Implement the INotificationService for Android
public class AndroidNotificationService : INotificationService
{
public void ScheduleNotification(string title, string message, int seconds)
{
Console.WriteLine("Testing 1");
var alarmIntent = new Intent(Application.Context, typeof(AndroidNotificationReceiver));
var notifyTime = DateTime.Now.AddSeconds(seconds);
alarmIntent.PutExtra("title", title);
alarmIntent.PutExtra("message", message);
Console.WriteLine("Testing 2");
**var pendingIntent = PendingIntent.GetBroadcast(Application.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);**
var alarmManager = Application.Context.GetSystemService(Context.AlarmService) as AlarmManager;
Console.WriteLine("Testing 2.5");
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
alarmManager.SetExactAndAllowWhileIdle(AlarmType.RtcWakeup, notifyTime.ToLocalTime().Ticks / 10000, pendingIntent);
Console.WriteLine("Testing 3");
}
else if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
{
alarmManager.SetExact(AlarmType.RtcWakeup, notifyTime.ToLocalTime().Ticks / 10000, pendingIntent);
Console.WriteLine("Testing 4");
}
else
{
alarmManager.Set(AlarmType.RtcWakeup, notifyTime.ToLocalTime().Ticks / 10000, pendingIntent);
Console.WriteLine("Testing 5");
}
Console.WriteLine("Testing 6");
}
public void RequestAuthorization()
{
NotificationChannelHelper.CreateNotificationChannel(Application.Context);
}
}
}
1条答案
按热度按时间b91juud31#
从PendingIntent.FLAG_MUTABLE的文档中,我们知道:
在
Build.VERSION_CODES.R
之前,默认情况下PendingIntents
是可变的,除非设置了FLAG_IMMUTABLE
。从Build.VERSION_CODES.S
开始,需要在创建时使用(@link #FLAG_IMMUTABLE}或FLAG_MUTABLE
显式指定PendingIntents的可变性。强烈建议在创建PendingIntent
时使用FLAG_IMMUTABLE
。FLAG_MUTABLE
仅应在某些功能依赖于修改底层意图时使用,例如任何需要与内联回复或气泡一起使用的PendingIntent
。所以,你可以尝试替换代码:
其中: