c# - Android 警报管理器未在指定时间触发

标签 c# android xamarin.android xamarin

我正在尝试实现一个通知以在将来的固定点触发,但我很难让它正常工作。它会立即触发,而不是在未来的指定时间触发。下面是我的接收器类。我从另一个类调用 SetAlarm 并传递一个时间间隔,即 alertTime。有什么想法吗?谢谢!!!

using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Util;

namespace Test_Android
{
[BroadcastReceiver]
class NotificationAlertReceiver : BroadcastReceiver
{

    public NotificationAlertReceiver()
    {

    }

    public override void OnReceive(Context context, Intent intent)
    {
        PowerManager pm = (PowerManager)context.GetSystemService(Context.PowerService);
        PowerManager.WakeLock w1 = pm.NewWakeLock (WakeLockFlags.Partial, "NotificationReceiver");
        w1.Acquire ();
        var nMgr = (NotificationManager)context.GetSystemService (Context.NotificationService);
        var notification = new Notification (Resource.Drawable.loadIcon, "Arrival");
        var pendingIntent = PendingIntent.GetActivity (context, 0, new Intent (context, typeof(MainActivity)), 0);
        notification.SetLatestEventInfo (context, "Arrival", "Arrival", pendingIntent);
        nMgr.Notify (0, notification);
        w1.Release ();
    }

    public void CancelAlarm(Context context){ 
        Intent intent = new Intent(context, this.Class);
        PendingIntent sender = PendingIntent.GetBroadcast (context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.GetSystemService (Context.AlarmService);
        alarmManager.Cancel (sender);
    }

    public void SetAlarm(Context context, int alertTime){
        long now = SystemClock.CurrentThreadTimeMillis();
        AlarmManager am = (AlarmManager) context.GetSystemService (Context.AlarmService);
        Intent intent = new Intent(context, this.Class);
        PendingIntent pi = PendingIntent.GetBroadcast (context, 0, intent, 0);
        am.Set (AlarmType.RtcWakeup, now + ((long)(alertTime*10000)), pi);
    }
}
}

最佳答案

您是否在 AndroidManifest.xml 中注册了接收器?

<receiver android:name=".NotificationAlertReceiver "></receiver>

关于c# - Android 警报管理器未在指定时间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516841/

相关文章:

android - Visual Studio 2015 Xamarin aapt.exe报错包资源不存在

c# - 从 XML 字符串反序列化数组时遇到问题

c# - 如何在 net core C# 中获取当前环境 (QA/Prod/DEV) 名称?

xamarin - 我可以将 MvvmCross vNext 与 Xamarin 2.0 一起使用吗?

android - 以编程方式将 View 添加到 LinearLayout 的中间

c# - Android, C# : Alpha Animation only works when inital alpha is at 1. 无法从0开始?

c# - Android View 状态 : pressed, 已激活、已选择等绑定(bind)。我必须编写自定义绑定(bind)吗?

c# - 读取远程机器证书

c# - 在现有应用程序(Windows 或 Web).Net 中添加日志记录的最佳方式

java - 如何在android项目中包含HTML5WebView