无法使用广播接收器显示通知 Android
Cannot show notifications with Broadcast Receiver Android
我想在我的应用程序上单击按钮时显示提醒(通知和警报)。我创建了一个 BroadcastReceiver 来创建通知。当我单击片段中的按钮时调用它。
这是我到目前为止所做的:-
public class AlarmReceiver : BroadcastReceiver
{
private int resourceId;
public override void OnReceive(Context context, Intent intent)
{
var message = intent.GetStringExtra("message");
var title = intent.GetStringExtra("title");
var mEvent = intent.GetStringExtra("event");
var notIntent = new Intent(context, typeof(SplashActivity));
var contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent);
var manager = NotificationManagerCompat.From(context);
var style = new NotificationCompat.BigTextStyle();
style.BigText(message);
if (mEvent == "Birthday")
resourceId = Resource.Drawable.ic_cupcake;
else if (mEvent== "Anniversary")
resourceId = Resource.Drawable.ic_anniversary;
var wearableExtender = new NotificationCompat.WearableExtender().SetBackground(BitmapFactory.DecodeResource(context.Resources, resourceId));
//Generate a notification with just short text and small icon
var builder = new NotificationCompat.Builder(context)
.SetContentIntent(contentIntent)
.SetSmallIcon(Resource.Drawable.ic_applogo)
.SetContentTitle(title)
.SetContentText(message)
.SetDefaults(1)
.SetStyle(style)
.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
.SetAutoCancel(true);
var notification = builder.Build();
manager.Notify(0, notification);
}
}
提醒片段
public static void Remind(Activity mActivity, DateTime dateTime, string title, string message, string eventType)
{
Intent alarmIntent = new Intent(mActivity, typeof(AlarmReceiver));
alarmIntent.PutExtra("message", message);
alarmIntent.PutExtra("title", title);
alarmIntent.PutExtra("event",eventType);
PendingIntent pendingIntent = PendingIntent.GetBroadcast(mActivity, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager)mActivity.GetSystemService(Context.AlarmService);
//TODO: For demo set after 5 seconds.
alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5 * 1000, pendingIntent);
}
btnRemind.Click += delegate
{
var msg = "Wish " + Name + "on their " + eventType;
Remind(mActivity, DateTime.Now, "Reminder", msg, eventType);
Toast.MakeText(mActivity, "Reminder set", ToastLength.Long).Show();
};
清单
<application android:label="Events" android:icon="@drawable/Icon">
<receiver android:name=".AlarmReceiver" android:enabled="true">
</receiver>
</application>
SplashActivity
是我的启动器 activity。但是片段是从另一个名为 MainActivity
的 activity 显示的(这可能是问题所在吗?)
出于测试目的,我已启用该应用程序以在 5 秒后显示通知,但不知何故这不起作用并且通知没有显示。
感谢任何帮助
请在主 activity 启动时注册接收器并在退出时取消注册。
我想在我的应用程序上单击按钮时显示提醒(通知和警报)。我创建了一个 BroadcastReceiver 来创建通知。当我单击片段中的按钮时调用它。
这是我到目前为止所做的:-
public class AlarmReceiver : BroadcastReceiver
{
private int resourceId;
public override void OnReceive(Context context, Intent intent)
{
var message = intent.GetStringExtra("message");
var title = intent.GetStringExtra("title");
var mEvent = intent.GetStringExtra("event");
var notIntent = new Intent(context, typeof(SplashActivity));
var contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent);
var manager = NotificationManagerCompat.From(context);
var style = new NotificationCompat.BigTextStyle();
style.BigText(message);
if (mEvent == "Birthday")
resourceId = Resource.Drawable.ic_cupcake;
else if (mEvent== "Anniversary")
resourceId = Resource.Drawable.ic_anniversary;
var wearableExtender = new NotificationCompat.WearableExtender().SetBackground(BitmapFactory.DecodeResource(context.Resources, resourceId));
//Generate a notification with just short text and small icon
var builder = new NotificationCompat.Builder(context)
.SetContentIntent(contentIntent)
.SetSmallIcon(Resource.Drawable.ic_applogo)
.SetContentTitle(title)
.SetContentText(message)
.SetDefaults(1)
.SetStyle(style)
.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
.SetAutoCancel(true);
var notification = builder.Build();
manager.Notify(0, notification);
}
}
提醒片段
public static void Remind(Activity mActivity, DateTime dateTime, string title, string message, string eventType)
{
Intent alarmIntent = new Intent(mActivity, typeof(AlarmReceiver));
alarmIntent.PutExtra("message", message);
alarmIntent.PutExtra("title", title);
alarmIntent.PutExtra("event",eventType);
PendingIntent pendingIntent = PendingIntent.GetBroadcast(mActivity, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager)mActivity.GetSystemService(Context.AlarmService);
//TODO: For demo set after 5 seconds.
alarmManager.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 5 * 1000, pendingIntent);
}
btnRemind.Click += delegate
{
var msg = "Wish " + Name + "on their " + eventType;
Remind(mActivity, DateTime.Now, "Reminder", msg, eventType);
Toast.MakeText(mActivity, "Reminder set", ToastLength.Long).Show();
};
清单
<application android:label="Events" android:icon="@drawable/Icon">
<receiver android:name=".AlarmReceiver" android:enabled="true">
</receiver>
</application>
SplashActivity
是我的启动器 activity。但是片段是从另一个名为 MainActivity
的 activity 显示的(这可能是问题所在吗?)
出于测试目的,我已启用该应用程序以在 5 秒后显示通知,但不知何故这不起作用并且通知没有显示。
感谢任何帮助
请在主 activity 启动时注册接收器并在退出时取消注册。