首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android告警管理器未在指定时间触发

Android告警管理器未在指定时间触发
EN

Stack Overflow用户
提问于 2013-08-30 00:57:41
回答 2查看 1.1K关注 0票数 2

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

代码语言:javascript
复制
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);
    }
}
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-30 01:11:13

你在你的AndroidManifest.xml中注册接收器了吗?

代码语言:javascript
复制
<receiver android:name=".NotificationAlertReceiver "></receiver>
票数 1
EN

Stack Overflow用户

发布于 2013-08-30 01:31:34

由于您的警报使用的是AlarmType.RtcWakeup,因此您应该使用实时(例如System.currentTimeMillis())而不是线程时间作为"now“变量。

此外,您需要将秒数乘以10,000以得到毫秒数。正确的乘数是1,000。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18516841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档